工欲善其事,必先利其器–vim-tips

來源:互聯網
上載者:User

1) 為什麼別人的方法在我這裡行不通?

(2) 如何找到上次編輯的檔案?

(3) 如何複製粘貼?

(4) 如何在多個檔案中進行替換?

(5) 如何把fold一次全部開啟?

(6) 如何選擇或者複製游標所在的單詞?

(7) 如何計數搜尋的字串?

(8) 如何去掉高亮搜尋?

(9) 如何解決linux下gvim中文菜單亂碼的問題?

(10) 如何對所編輯的檔案文法高亮顯示?

(11) 如何快速插入多行數字0-99?


==============================================================================

(1) 為什麼別人的方法在我這裡行不通?


估計這是最難回答的一個問題了。:-)

不過首先應該確定你的VIM版本是否足夠新,功能是否完整。使用 :version 命令查看你

的VIM版本以及功能。一個常見的情況,如果你用的是RedHat系統,請確定安裝了

vim-enhance的rpm包,否則將是不完整的VIM。


(2) 如何找到上次編輯的檔案?


Ctrl+O (按兩次)


(3) 如何複製粘貼?


方法一:先ma標記當前位置為a,移動到新的位置,再y`a或者y'a複製從標記位置a到

當前位置的內容。`和'的區別:`以字元為單位,'以行為單位。這個方法應該是所有vi

都適用的。(如果不對請指正。)

方法二:按v或V或Ctrl+V進入visual模式,移動游標選擇一段內容,按y。三者的區別:

v以字元為單位,V以行為單位,Ctrl+V是塊選擇。這個方法只在VIM下適用。

使用J可以將上下兩行合并為一行


 e)   把一段文字轉換為全部大寫。   

  ~   交換大小寫(a   ->   A,   A   ->   a)   

  U   將小寫變大寫(a   ->   A,   A   ->   A)   

  u   將大寫變小寫(a   ->   a,   A   ->   a)   

    

(4) 如何在多個檔案中進行替換?


一般可以用sed或者vim來做。比如要對目前的目錄下的*.c檔案進行替換:

方法一:

for i in *.c; do

  sed -i -e 's/oldvalue/newvalue/g' $i

done

方法二:

vim *.c

:argdo %s/oldvalue/newvalue/g


(5) 如何把fold一次全部開啟?


zR 或者 :set foldlevel=999


(6) 如何選擇或者複製游標所在的單詞?


在VIM中用iw或者aw表示一個單詞,兩者稍有區別。

選擇游標所在的單詞:viw (v進入visual模式,然後iw)

複製游標所在的單詞:yiw


(7) 如何計數搜尋的字串?


如果需要統計緩衝中一個模式(pattern)出現的頻率,需要把 'report' 置為0,然後

用替換命令把模式替換成它自己。Vim 報告的已替換的數目就是模式出現的次數。例:

        :set report=0

        :%s/./&/g               characters

        :%s/\i\+/&/g            words

        :%s/^                   lines

        :%s/the/&/g             "the" anywhere

        :%s/\<the\>/&/g         "the" as a word

你可能希望複位 'hlsearch' 或者使用 ":nohlsearch"。


(8) 如何去掉高亮搜尋?


方法一::nohlsearch

方法二:/awertgvcxz (尋找一個肯定不存在的字串)

設定了高亮搜尋(:set hlsearch)以後,可以通過 :set nohlsearch 永久地關閉高亮

顯示,也可以通過 :nohlsearch 暫時關閉高亮顯示,下次搜尋時將自動回復高亮。


(9) 如何解決linux下gvim中文菜單亂碼問題?


以vim6.3為例

source /usr/local/vim/share/vim/vim63/delmenu.vim

source /usr/local/vim/share/vim/vim63/menu.vim


光source一個menu.vim或者啥也不source都是亂碼

另外,也有網友報告說沒有遇到此類問題


(10) 如何對所編輯的檔案文法高亮顯示?


需要解釋的是,VI有很多變種,它本身並沒有這種功能,提供這種功能

往往是其各種衍生版本,比如說vim。下面就vim中如何文法高亮簡單解釋一下。


首先,確定一下你所用的作業系統,如果是windows,那麼預設的設定檔

就可以工作了。如果還不行,可以用滑鼠從syntax菜單下選擇一下適合你的

檔案類型(新版本的gvim預設把檔案類型選擇關閉了,需要點開,然後按照

開頭字母選擇類型)

如果是linux,那麼確認一下是否是redhat。如果是redhat,那麼需要安裝

vim-enhanced的rpm包。這些都做了以後,可以用:syntax on來開啟文法高亮。

必要時可以用:set filetype=...來設定你的檔案類型。

如果使用圖形介面,比如gvim,那麼syntax on和set filetype的操作可以

用滑鼠在菜單中選擇,同windows下。

如果是在控制台中使用vim,還應當確定你的終端設定支援顏色。


(11) 如何快速插入多行數字0-99?


在命令列中輸入以下代碼,或者先把代碼儲存到一個外部檔案,然後source這個檔案:

let i = 0

while i < 100

  put = i

  let i = i + 1

  endw

如果位元不足需要在前面補零,可以用Ctrl-V塊選擇,然後I插入0。


※ 修改:·thinelephant 於 Jun 30 11:03:43 修改本文·[FROM: 211.100.11.*]

※ 來源:·BBS 水木清華站 smth.org·[FROM: 211.100.11.*]



發信人: vale (淺穀·等待溪流), 信區: VIM

標  題: VIM中不易發現的強勁功能

發信站: BBS 水木清華站 (Mon May 31 10:54:41 2004), 站內


在我最初使用Vim時,有些功能並不知道,等發現後真後悔自己幹了那麼久的體力活。


1. * (super star)

向下尋找游標下(或附近)的&lt;word>。向上找用#。g*尋找則不限制whole word。


2. C-R (magic insert)

在insert模式下,C-R (register) 插入register裡的內容,一個有趣的reg是"=".

假設你想輸入123K的具體位元組數,不用開啟計算機,試試這個“<C-R>=1024*123<CR>”,

“125952”就出來了!

另外在命令列裡C-R C-W和C-R C-A是必用的技巧,它們將游標下的<word>和<WORD>

考到命令列裡,省了你無數的typing。


3. C-X (auto complete)

在insert模式下,C-X C-P/N/L/F等自動完成前面的詞、行、檔案名稱等,是編程時必用的

命令。其中C-P和C-N可以不用C-X。


4. [p & ]p (smart paste)

paste同時自動根據目標行的縮排調整來源行的縮排。在copy程式碼片段的時候非常有用。


5. C-O (fast out, fast in)

在insert模式下,用C-O後可以執行一個normal命令,然後立即返回insert模式,省去了

用ESC的麻煩。


6. [I (fast grep )

[I顯示檔案中包含游標下<word>的所有行。我常用來瀏覽某個id在程式中的引用情況。

還有很多相關的命令::h include-search


7. object-select

iw, aw, ib, i], i} ... 都非常有用!看help吧

:h object-select



先寫這麼多,以後再補充吧。


--

        The world puts off its mask of vastness to its lover.

     It becomes small as one song, as one kiss of the eternal.



※ 來源:·BBS 水木清華站 http://smth.org·[FROM: 210.82.111.*]


發信人: ann77 (ann), 信區: VIM

標  題: 我常用的 vim 的功能

發信站: BBS 水木清華站 (Fri May 28 13:39:08 2004), 站內


光說我馬上能夠想起來的。


1.


fx

x 表示任何一個字元。

這是最快的在一行種移動的方法了。然後用 

;  (分號)

繼續移動。


反向移動好像是 t ,但是我記性不好,

總是記不住,於是 

0fx

用 0 先回到行首,在 f 


2.

任何一個操作命令在加一個移動命令。實現對某個範圍的操作。

例如 

dfx

表示刪除到下一個出現 x 的地方, x 可以使任一字元。

操作命令有  d (cut), y(copy) , p(paste), v (select)

移動命令有  hjkl, f, /, gg, G


3.

任何命令組合都可以先按一些 數字健 表示重複操作。

如:

d123j

刪除下面123行。


4. 宏紀錄的功能

例如,把檔案中所有奇數行和偶數行合并。按如下序列

gg

qq

J

q

100000000@q


5. C-p

在 insert mode 下

寫程式的時候,任何超長的變數名字都不成問題。

如果有一個this_is_very_long_variable_name

可以

this<C-P> 

90%的可能性自動就把名字補全了。


於是,我寫程式的時候,變數的名字其的越來越長,輸入越來越快。:)


6. C-x C-p

在寫程式 abc.h 的時候

寫道 #include "abc.h" 的時候 

其實可以

#include "a<C-x><C-p>"


90% 的情況,可以自動補全檔案名稱。



6.從外部命令輸入

:r !ls

可以讀取目前的目錄的檔案清單。

如果你對 bash 很熟悉的話,這個功能非常好用

例如

輸入

case 1

case 2

....

case 1000:

的方法是

:r !for ((i=0;i<100;i++));do echo "case $i" ; done


7. 利用外部命令處理文字。

我在 ~/.vimrc 中寫了一行。

map = ggVG:!indent -nut -st -kr 2>/dev/null<CR>G


我按一個 = ,就可以利用外部命令 indent 美化 我的 c 程式。

我認為,

還可以用外部命令排序

例如

用 v 選定要排序的地區

然後按一個歎號。

:'<,'>!sort 


8

我在 ~/.vimrc 中寫了

map <Left> :bp<CR>

map <Right> :bn<CR>

map <F4> :bd<CR>


就可以用 左右方向健來切換 buffer

F4 關閉 buffer 了。


9

我在 ~/.vimrc 中寫了

runtime ftplugin/man.vim


就可以在把游標停在一個函數上,然後用 

\k

查看線上協助了。



:Man getuid

查看 getuid 函數的手冊了。


10.

:make 

可以用外部命令 make 編譯工程。

:cw 

查看出錯資訊,

:cn

:cp

在出錯資訊之間跳轉。


11.

]] , [[ , [] , ][  命令可以在函數之間移動。

收藏邀請

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.