我的vim技巧集

來源:互聯網
上載者:User
平常用到的vim技巧,整理記錄在blog上,方便尋找。

VIM中,移動游標到下一個單詞的詞首,使用命令"w",移動游標到上一個單詞的詞首,使用命令"b";移動游標到下一個單詞的結尾,用命令"e",移動游標到上一個單詞的結尾,使用命令"ge"。

上面這些命令都使用'iskeyword'選項中的字元來確定單詞的分界,還有幾個命令,只把空白字元當做"單詞"的分界。當然,這裡說的"單詞"已經不是傳統意義上的單詞了,而是由非空白字元構成一串字串。命令"W"移動游標到下個字串的開始,命令"B"移動到上個字串的開始;命令"E"移動到下個字串的結尾,命令"gE"移動到上個字串的結尾。

使用H/M/L這三個鍵,可以讓游標跳到當前視窗的頂部、中間、和底部,停留在第一個非Null 字元上。H命令和L命令前也可以加一個數字,但數位含義不再是倍數,而是指距視窗頂部、底部的行數。例如,"3H"表示游標移動到距視窗頂部第3行的位置;"5L"表示游標移動到距視窗底部5行的位置

在閱讀代碼時,有時我們需要根據游標所在的位置滾屏,把游標所在行移動視窗的頂端、中間或底部,這時就可以用到"zt"、"zz"和"zb"。這種滾屏方式相對於翻頁來講,它的好處在於,你能夠始終以當前游標位置做為參照,不會出現翻幾次頁後,發現自己迷失了方向。
^_^
********************************************************************************

1.
選取多個檔案用vim開啟,只用一個視窗,檔案都列在buffer中(這個在windows找到辦法了,我用的TC+F4menu,在F4menu設定中的調用vim的"開啟檔案"項選擇"所有檔案以列表方式開啟",就會將選取的檔案都讀進buffer,但視窗只顯示一個),
gvim --remote-tab-silent
如果在命令列中,直接加參數-p即可在多tab頁中分別開啟檔案,如:vim -p
file1.c file2.c

2. vim用什麼方法顯示16進位?
:%!xxd

3. 怎樣在vim中粘貼進案頭剪貼簿裡的內容?
比如我在opera裡複製的內容粘貼到vim裡.
"*p
"+p

4. 在文本wrap的時候怎樣才能跳到上一行而不是上一段? 如同notepad裡那樣?
加個g,如:gj,gk.....
d:\soft

5. 請問vim在命令列上可以複製粘貼麼?
Ctrl+r"或者Ctrl+r Ctrl+w可以粘貼到命令列 "
而對把編輯區到命令列,可以先拷貝到如a寄存器,然後在命令列ctrl-r a

6. 如何?行之間的倒序排序
比如
a
c
b
變成
b
c
a
答案::g/./m0
解釋:
:h :m
m->move <address>
m0->把匹配行移動到第一行之前

這是VIM協助文檔裡一個tip
:h 12.4

7.怎麼實現文本的自然排序。
比如
d
a
c
b
排成
a
b
c
d
答案::sort

8. 如何刪除含有某些內容的行?
例如,想要刪除含有console的行,怎麼寫呢?
:g/console/d

9.搜尋到一行如何刪除該行上面的5行?
:g/string/norm d5k
:g/搜尋內容/normal d5k

10. 請問怎樣每隔x行插入一個空行
答:
假設每隔5行吧,
qa4jo<Esc>jq
然後 @a就可以了
或者:
:%s/\(.*\n\)\{3}/\0\r/g
3換成你要的數字

11. 如何用vim的列操作加註釋
用c-v選中了一列,輸入大寫I或者大寫A,然後輸入comment符號,然後esc

12.操作多個檔案其實超級簡單
o newfilename
:bn buffer Next
:bp Buffer Pervious
:bN The list number N of the buffers
:sp newfile // open a newfile with a splited window
:vs newfile // open a newfile with a vertical splited window
[ctrl] +j // down window (same with the key j)
[ctrl] +k // up window (same with the key k)
[ctrl] +h // left window (same with the key h)
[ctrl] +l // right window (same with the key l)

13.一組能讓你爽出內傷的 Vim motion
用vim這麼長時間,當看到下邊幾句,對vim的認識提高一個台階。
ci[ 刪除一對 [] 中的所有字元並進入插入模式
ci( 刪除一對 () 中的所有字元並進入插入模式
ci< 刪除一對 <> 中的所有字元並進入插入模式
ci{ 刪除一對 {} 中的所有字元並進入插入模式
cit 刪除一對 HTML/XML 的標籤內部的所有字元並進入插入模式
ci" ci' ci` 刪除一對引號字元 (" 或 ' 或 `) 中所有字元並進入插入模式

14. 統計關鍵字的個數
:%s/pattern/&/g
&代表的意思就是用來表示前面比對的字串,所以做這個指令其實對檔案本身並不會有什麼改變。但是由於做的是全域的取代置換,vim會告訴你有從多少行中多少個字串被取代。輕輕鬆鬆很漂亮地用一行命令解決這個問題。
輸入只有一行的命令:結果就會出現在最後一行上,而且不會改變到檔案本身.

15. 尋找關鍵字
可按『*』來選取關鍵字。不過 vim 在這裡搜尋邊界是根據空白或者像「 { 」、「 (
」這些符號等來決定,所以對於中文來說,這個功能可能就不是那麼好用。可以用『v』選取然後『y』複製。搜尋時,在『/』後,按<
Ctrl-R >然後跟上數字鍵 0 ,就會出現剛剛複製進入register的字串。指令如下:
/<Ctrl-R>0<CR>
在 vim的register中,register 0是作刪除或是 yank 動作時,預設使用的暫存器。
不過在前面可以發現,如果我們用「 * 」作搜尋的時候,字串的前後會被「 \< \>
」夾著。舉例來說,如果你找的是 \<link\>,那麼, min_links
就不會符合,同樣,linknode也不會符合。這也就是說「 \<
」表示的是一個字的頭,而 「 \>
」代表的是一個字的尾,當你寫\<link的時候,表示你要找的字,是以link開頭的,同理,link\>就是以link結尾的字,所以用兩個夾起來,就代表要字串的的確確是所要的那個字。

而既然有了 「*」往下找的,就有往回找的,按鍵是「 # 」
,你懶得記那麼多的話,就用 「*」 然後搭配 「 N 」 吧!

到這裡,你可能會想,如果我不想打那麼多字,可是我想要的又不要完全是一樣的,怎麼辦?
vim 也有這樣的東西,就是在你打「*」之前,先加一個 「g」,也就是
g*
這樣 vim 在做搜尋的時候,就不會包含 \< \> 這兩個東西在前後了。同樣「 #
」的使用也可以變成「 g# 」

16. 查看符號定義
Vi提供了像Win32下IDE那樣的功能,可以很方便的查看函數原型、結構聲明、宏的定義等。只是它的功能相比之下,要弱一些,不過,結合其它一些技巧,完全可以滿足你的需要。使用這個功能,需要做一些設定:
1.
安裝ctags軟體包。在安裝光碟片可以找到,也可以到網上下載源碼包,自己編譯。
2. 產生tags檔案。進入到你的原始碼所在的目錄,運行ctags
-R命令,它會為目前的目錄及子目錄下的來源程式建立索引,並在目前的目錄下建立一個tags檔案,裡面儲存的是符號索引資訊。
3.
設定tags路徑。在vi的起動指令檔中(一般是~/.vimrc),告訴vi在哪裡可以找到tags檔案,一般盡量用相對路徑。如:set
tags=./tags,../tags,../../tags,../../../tags
4. 跳到指定的符號。<ctrl> + ]
可以跳轉到游標所在處的符號的符號的定義那裡。
5. 返回到原來的位置。<ctrl> + t 或者<ctrl> + o可以返回原來的位置。

17. 查看系統函數的協助
Vi也可以像VC那樣,很方便的跳轉到系統函數的協助那裡。原理很簡單,在vi運行外部命令man就行了:!man
fopen,這樣做,可能會覺得有些麻煩,vi提供了快捷的方式: <shift> +
k可以跳到游標所在處的符號的協助那裡。

18. 自動定位編譯錯誤處
在VC裡,編譯時間,如果出現編譯錯誤,雙擊錯誤資訊,編輯器自動切換到出現錯誤的地方,是不是很方便呢?其實不用羨慕,vi也有這種功能,在vi裡,運行make命令後,如果有編譯錯誤,你按一下斷行符號,vi自動定位到第一個編譯錯誤那裡。記得,要用內建的make命令,即運行:make,不是外部命令:!make。

19.自動定位尋找結果
在寫程式時,我們常常想知道,有哪些地方使用了某個函數,怎麼辦呢,你可以在shell裡,用grep尋找,然後開啟對應的檔案,可以看到相關的上下文資訊。但這樣做比較麻煩,Vi有個內建的grep命令,用起來很方便:
1. 尋找。用法和shell中的grep一致。
2. 跳到第一個尋找結果處。直接斷行符號就行了。
3.
列出所有的尋找結果。:cl命令可以列出所有的尋找結果,每個結果都有一個編號。
4. 跳到某項尋找結果的檔案中。:cc <編號>
命令可以跳到指定編號尋找結果的檔案中,<編號>是前面用:cc列出來的編號。
5. 返回到原來的位置。<ctrl> + o 可以返回原來的位置。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.