1. 程式人生 > >VIM的一些自己的使用tips(5年前整理的,看到後熱淚盈眶)

VIM的一些自己的使用tips(5年前整理的,看到後熱淚盈眶)

高效利用 VIM,成為編碼高手(環境 VIM7.2)

很久以前,接觸了 Linux 系統,並且開始在 Linux 系統上開始了我的 C 語言學習歷程。最先一般都
是在 gedit 裡面像高亮版本的記事本一樣寫程式。後來知道原來 Linux 下有 2 個歷史上很有名的編輯器,
一個是 VIM,一個是 Emacs。而且還有人說過一句話:世界上分為 3 種程式設計師,一種是用 VIM 的,一種是用
Emacs 的,還有一種是其他的。雖然這句話很片面,但是還是能夠說明 VIM 和 Emacs 確實是很經典的,能
夠把我們的編碼速度提高到極致的編輯器。因為我電腦裡面只安裝了 VIM,所以我就開始用 VIM 寫程式。最
先的時候很不適應,覺得根本不好用。還要分 3 種模式,好麻煩的。於是就開始學習怎麼使用 VIM,看漢化
的 VIM 文件,還有網上一些前輩的文章,慢慢的,對這個編輯器熟悉了很多。基本可以完全不用滑鼠,完全
用鍵盤進行程式設計,平時閱讀開源軟體或者其他的原始碼也是完全用這個甚至些一些文字的文件也是用的這個。
覺得真的用起來太方便了!首先截上幾張我的 vim 的截圖
這裡寫圖片描述


這個是我在閱讀 snort 原始碼的時候進行的一些操作。其中安裝了很多外掛在上面,還設定了函式高亮以及
鍵盤對映的一些東西。覺得已經很夠用了。其實 vim 最經典的還是 h,j,k,l 這 4 個按鍵。太經典了!手都
不用脫離按鍵區,確實提高了不少效率。
接下來先教大家我這個 vim 是怎麼配置的。
Part1:
1.解壓安裝外掛和配置 tar zxvf vim.tar.gz -C ~/
2.安裝 ctags 還有 cscope:
sudo apt-get install ctags cscope
最後的兩個工具主要是詞法分析的工具,很多外掛的功能會依賴這 2 個工具。
就這麼簡單,外掛和配置檔案的配置就完成了。當然這鐘配置只能夠給當前使用者使用,如果要給全域性的使用者
都有效的話,要用 root 把 vimrc 拷貝到/etc/vim/vimrc 檔案裡面,其他檔案放到 vim 的安裝根目錄
/usr/share/vim/vim72/
PS:下面講到的所有與 Ctrl 相關的命令都是在 Ctrl 按住的情況下按另外那個鍵另外,大寫字母你可以用
shift+[char]也可以開啟大寫鎖定(capslock)
基本的配置就完成了。現在說說我自己的平時用得最多的一些東西吧。
配置完了估計你不會覺得 vim 差別有多大,就只是可以在左邊顯示行號了。這個時候,你試試按下 wm 兩個
鍵(先按 w,再 m)是不是奇蹟出現了?左邊的檔案管理視窗,以及 C 檔案資訊都出現在了 vim 介面上。呵呵。
很神奇吧~那兩個介面其實是靠的外掛(最後會說到外掛)呼叫的 vim 內建的 split 命令實現的。當我們需要
在 vim 上建立自己的視窗分割時,也可以用這個命令的哦。使用方法
:split 123.txt
即可如果改用 vsplit,可以橫著加入一個分割。然後我們如果要在幾個 split 之間進行切換操作,在滑鼠
的 a 模式下可以用滑鼠.但是筆者覺得用滑鼠是一種效率很低的操作。所以我一般用快捷鍵
Ctrl+w
進行切換。Ctrl+w 是一個命令,在正常模式下使用,按下之後,如果按一下方向,即可移動到相應方向的分
割,Ctrl+w+w 是沿著 split 的順序進行切換就不需要加方向了。
這裡寫圖片描述

另外還有一種標籤式的編輯多個檔案的方法,就是 tabe 命令使用
方法跟 split 一樣的.效果如下
切換視窗可以用滑鼠點選(前面的配置裡啟用了滑鼠選項)但是我
一般不用滑鼠。因為滑鼠確實很不效率。用命令在正常命令模式
下按 gt 則是切換到下一個標籤,按下 gT 則是切換到上一個標籤。
另外,如果標籤很多,可以在前面加上數字 3gt 是切換到下 2 個
標籤(包含了自己。呵呵)一般這樣切換就很效率了。也有其他切
換方式。感興趣可以自己搜搜~呵呵(我去,那個年代呵呵還是很正常的)。

這裡寫圖片描述

Part2:
然後我再來和大家說說我平時使用得最多的 vim 命令以及一些自己遇到的問題和解決方法。
一、模式切換
大家知道 vim 有 3 種模式。正常,插入,可視其中,一般是按 i 進入插入模式寫程式碼,但是有時候在行末尾的時候,按 i 卻總是在最後個字元之前進 入的編輯,這個時候我們只要按 a 即可在游標字元之後進入插入模式。另外,我最喜歡用的一個命令是 o/O 小寫的 o 是往下插入一行,進入插入模式。大寫的 O 是向上插入一行進入插入模式另外還有 c/C 我用得不多。 是刪除一行內容進入插入模式。至於大小區別,請讀者自己去試試。進入可視模式可以用 v 命令。這個 v 是 這個樣子的但是如果我們用 Ctrl+v 則是塊模式~呵呵。我很喜歡用塊模式,當我要註釋很多行程式碼的時候, 我就直接 ctrl+v 先選中要註釋的行。然後按 I 大寫的 I,進入插入模式游標位於行首。然後寫下//最後 ESC 下,效果就出來啦~要刪除也很簡單,直接再 ctrl+v 選中後按 d 就刪除完了。這個確實有用建議大家 可以試試~呵呵
這裡寫圖片描述


二、游標移動
1—h,j,k,l 這幾個是最經典的 vi 命令了~經典得確實沒有話說。完全擺脫了鍵盤上的束縛。讓 手完全位於鍵盤關鍵區。可能剛開始用 vim 會不習慣這種操作方式。但是慢慢的,會發現,原來那麼的爽! 這裡我做了個鍵盤對映,在插入模式下,Ctrl+h 也能夠左移其他幾個都能夠在按住 Ctrl 鍵進行移動
2—w , f , ,0, 可 以移動到一行的末尾,0 可以移動到一行的開頭。最後那個%和[,]可以移動到括號處。%我用得比較多,在 一個有括號的行按一下即可移動到匹配的括號處去。另外兩個是直接移動到相應方向的括號處,試試即可~
3—gg,G,ctrl+f,ctrl+b。要進行大篇幅的移動的時候,這幾個命令可以派上用場。gg 是移 動到文字開頭,G 是移動到文字尾部。而且如果在前面加上一個數字,比如 121G 或者 121gg 即可移動到 121 行的開頭哦。Ctrl+f 螢幕向下移動一頁 ,就是 pagedown 那個建 。Ctrl+b 螢幕向上移動一頁, 就是page up的作用。另外有ctrl+D(向下移動半屏)ctrl+U(向上移動半屏)這2個我幾乎沒用過。。。
4—’。單引號,這個命令可以讓我們在大場合下進行游標的移動。我一般用的就 2 個。一個是”就 是連續按 2 次單引號。這個可以讓我們在兩個跨越比較大的地方進行游標的切換。比如我現在在第一行,然 後按 G 移動到最後一行這個時候我們要回到之前的那一行,就直接按 2 次單引號就 OK 啦。另外一個就
是’ ” 先單引號,再雙引號。這個可以讓我們在重新開啟一個檔案的時候,游標移動到上次關閉檔案的游標 位置處
三、搜尋,替換,刪除
1—直接/word 或者?word 即可搜尋 word 這個單詞,前者是游標向下找,後者是向上。另外,vim
支援搜尋正則表示式。這樣我們就可以很容易的匹配到自己想要的結果啦~
2—按# 。這個是快速搜尋,直接找當前游標下的那個單詞
3—n / N 。這個就是重複前面一個搜尋的意思。比如,前面是搜的/yutao,這個就是再搜
一次yutao ,N和小n的功能剛剛相反,那個是重複前面的,這個是反向搜尋~嘿嘿 4—:n1,n2s/word1/word2/g 這個功能是替換。意思是,從n1到n2行間,查詢到word1,
替換為 word2,如果我們把 n2 換成來 ,,gc ,,n1,n25x/X,d/D,c/CxX dcd,cd,cdd5,5dddw,d …..反正按一下 d,然後 按移動的命令,就是從當前游標刪除到移動那個位置。這裡我要給大家講一個比較不錯的使用技巧 di”你在 一個有 printf(“xxxxxxxxxxx”);這種行試試就可以了~呵呵~是不是變成了 printf(“”);為什麼 會成這樣原因我也解釋不清楚。偶然間發現的~(^__^) 嘻嘻……ci”就可以直接編輯那個地方喲~~
另外要說的就是 vim 的查詢和替換都支援正則表示式的。比如,我想要把文字中的所有 fun(a,b,c) 改為 fun(b,a,c)就直接這樣:%s/fun(([^,]),([^,]),([^,]*)/fun(\2,\1,\3)/g 這個如果 你看不懂……就搜一下正則表示式吧~不在本文的講解範圍~呵呵
四、撤銷,重做
一般的圖形介面下的編輯器,CTRL+Z 是撤銷的意思。CTRL+Y 是重做。這 2 個我以前用得相當多~但 是到了 vim 下~撤銷的命令是 u 重做的命令是 CTRL+R。我不知到為啥設計者要這樣設計。
Part3:
vim 與系統剪下版的使用。
在平時的情況下~我們要從網上拷貝一些東西到 vim 裡面,在 vim 終端上直接點選右鍵,就可以直接實現粘 貼功能。但是在我們想從 vim 中複製東西出去的時候,卻發現選中後,複製那個選項是灰色的,這個是因為我 之前在配置檔案裡面寫了一個 set mouse=a;這個就是設定滑鼠作為 vim 的游標作用。我們只要 set mouse=v 就可以讓滑鼠像選中終端的文字一樣選中 vim 正在編輯的文字了。
Part4:
尋求程式設計的幫助 誰敢說他一切的程式碼全部是自己腦殼裡面記下來的,那麼多庫函式,引數,返回值等等~肯定很多記不住或 者記憶模糊,這裡我們就要在 vim 裡面尋求幫助咯~記得以前很喜歡 TC 編輯器的幫助功能,很不錯~我們 vim 也是有很強大的幫助體系喲當我們在某個函式上面的時候,如果我們想要查詢它的系統幫助文件,按一下 K 即 可但是有的時候,會發現它出來的是系統命令的說明文件(比如 printf)這就要求我們知道 man 手冊的幫助 模式了。每個手冊都是有一個區段號的,我們先在bash下man man一下~看下自己的說明文件可以看到它 對每一個號都有說明的。1 是代表使用者命令,2 是系統呼叫,3 是函式庫,4 是裝置等等像 printf 這種既是用 戶命令,同時也是函式庫的字眼,我們就要指定索引型別了 man printf 一下,然後對比 man 3 printf。 根據這個規則,我們在 vim 下,要索引特定型別,就直接[number]K 就可以咯。比如我在 printf 上按下
3 K 即可跳到 printf 的函式 man 手冊去方便吧~另外吐槽下就是有的 Linux 發行版 man 手冊並沒有帶完所 有的庫函式。需要自行安裝。比如 POSIX 執行緒庫就沒有相應的 manpage。Ubuntu 下 sudo apt-get install manpages-posix-dev 即可。呵呵(我去,又是一個呵呵)~
這裡寫圖片描述
Part5:
語法摺疊
相信用過 eclipse 之類 IDE 的朋友肯定都很喜歡它的程式碼摺疊功能作為一個很好的編輯器肯定都是有這個 功能的。下面我來介紹下 vim 的程式碼摺疊。由於我平時只用一種摺疊方式,所以我只講我用的方式。如果有
興趣可以自己檢視下幫助直接輸入命令:help fold 我使用的摺疊模式是indent(縮排)直接在我們的文字下面輸入:set foldmethod=indent開啟模式
(我在 vimrc 下寫的預設摺疊是 manual,你可以根據你的需要更改為 indent) 現在講講怎麼檢視摺疊程式碼和摺疊程式碼
在正常模式下,我們輸入 za/zA 命令即可控制摺疊了。如果當前處已經摺疊,則是開啟摺疊程式碼,如果沒有折 疊,則是摺疊程式碼,A 是連同子摺疊也一起打開了。具體摺疊的方式已經顧名思義—縮排.大括號處摺疊。
Pary6: 使用vim巨集
以前沒有怎麼用過 vim 的巨集,後來去搜了搜,發現真的是經典中的經典!它可以記錄我們在 vim 下進行 的操作,然後我要使用這一系列的操作,只調用那一個巨集就可以了.而且巨集會儲存在 vim 暫存器中,只要沒有被 覆蓋,即使關閉了 vim,重新開啟也是存在的這個一般是我們想到了要做一系列連續的事情的時候才用。我這 裡就舉一個簡單的例子吧。把一行註釋成為/xxxxxxxxxxxxxxxxxxxxxxxx/的樣子。當然你完全可以用 //註釋很效率,但是我這裡是為了演示巨集的強大。具體操作如下:
首先在正常模式下按下 q,然後隨便按一個字母(你要記得到哈)我這裡就 t 吧。也就是按下 qt 然後 vim 下 面會出現記錄中的說明。好了,現在它就開始記錄我們的所有的操作了。 然後我們首先到行首—正常模式下按 0。然後進入插入模式—正常模式按 i 然後輸入/然後 ESC 回到正 常模式,然後到行尾部—-$然後進入插入模式—-a 然後輸入/。這裡最後為什麼要按 a 進入讀者請自己 實驗即可知道。
最後按下 ESC 回到正常模式。按下 q 完成記錄!
這樣,一個叫 t 的巨集就製作完成了。我們在想要執行這一系列命令的地方按下 @t(正常模式下按)你應該就 能看到效果咯。如果我們要執行 10 次巨集命令,就按 [email protected] 就 OK。vim 會執行 10 次這種命令哦~
Part7:
原始碼閱讀
1、ctags。通過這個工具,我們可以建立一個名為 tags 的檔案,這個檔案裡面全是巨集和函式的定義等。一 般我們要補全和高亮等,很大程度都得靠這個玩意兒。生成 tags 命令如下:
ctags -R –c-kinds=+p –fields=+S 目錄名
這裡我已經把我的庫生成了一個 tags 放到了.vim/plugin/這個目錄裡面,而且在 vimrc 上面已經引用了。 現在講講用法:
在閱讀原始碼的時候,我們在把游標移動到一個函式或者巨集上的時候,按
下 Ctrl+],這個時候你會發現直接跳到了這個函式或者巨集的定義的地方。 然後按下 Ctrl+t 跳轉回之前編輯的檔案。按下 Ctrl+w+]就會直接
split 一個新的窗口出來~十分方便~呵呵。然後我講講我下的一個叫
做 tagHighlight(http://www.vim.org/scripts/script.php? script_id=2646)的外掛。這個外掛要在 python2.6 的基礎上使用,使用 命令:UpdateTypesFile 可以讓 vim 生成當前目錄下的 tags 檔案,然後 再生成一個自己的語法檔案叫做 types_c.taghl。當然,它支援很多種語 言,不僅僅是C/C++,具體可以help TagHighlight。使用這個外掛,我們 可以直接根據 tags 檔案讓巨集和 typedef 高亮起來哦~而且還高亮我們自
定義函式,系統函式是之前配置的顏色~這樣程式碼的閱讀更賞心悅目啦。
這裡寫圖片描述
2、cscope。這個和 ctags 有點像,但是比 ctags 定位更加準確。特別是在一個工程比較大的專案中,顯 得尤為重要。在 vim 中輸入命令:cscope 即可看到系統的幫助
這裡寫圖片描述
一般用得最多的都是 find 命令。用法已經寫了比如我要找 main 這個函式定義的位置,就輸入如下命令 cscope find g main回車馬上游標就會跳到main函式處!命令確實比較麻煩。所以下面介紹下高階 用法。
我安裝了一個叫做 cscope_maps.vim(http://cscope.sourceforge.net/cscope_maps.vim),這個插 件可以把 cscope 上面的一些功能對映到鍵盤按鍵上面。我們可以直接用按鍵來快捷的進行查詢工作。 把游標放到一個在你程式中多處用到的符號上,連續輸入 CTRL+\ s(Control 加反斜線,然後 s),你 會在 Vim 視窗底部看到一個顯示出程式中所有引用了該符號的地方的選單。選擇其中一個按 Enter,就會跳 到那 個引用的地方。在 ctags 裡,你可以輸入 CTRL-t 跳回到搜尋之前的位置(還可以巢狀搜尋, CTRL-t 會一次回退一層)。
如果想也像之前那樣 split 一個窗口出來,也是可以的。我們只用把之前的\換做成為(數字鍵的最左邊那 個) 或者2就可以了。(分析外掛發現本來對映的應該是@但是不知到為啥或者2都可以。。)
Part8:
程式碼補全
有了程式碼補全,啪拉啪啦程式碼就出來了。多安逸啊!vim 的程式碼補全也是很強大的哦!
vim 的程式碼補全全靠的 tags 檔案來實現的。首先是按下 tab 鍵,即可實現最平常的補全功能。這個是因為 我安裝了 supertab(http://www.vim.org/scripts/script.php?script_id=1643)這個外掛,平時 的話就是 Ctrl+N。這個叫關鍵字補全模式。這個就可以實現簡單的補全功能但是會發現這個把該出來的和
不該出來的都出來了,點都不智慧。所以我們講講其他的。(supertab 外掛會重複你上一次的補全模式) 我們用得最多的也就是結構體補全吧~一般要求準確。讓結構體成員準確無誤的出來,我們就用全能補全模 式快捷鍵:Ctrl+x Ctrl+o
其實在按 Ctrl+x 的時候,應該你就能發現很多選項了。那些選項具體是什麼補全模式你就自己去試吧。我 懶得一個一個講咯。什麼檔案補全啊,字典補全,全文補全之類的,自己一個一個去試試吧
這裡寫圖片描述
最後得說說函式補全功能。是我下載了的一個外掛叫做 codecomplete(http://www.vim.org/scripts/script.php?script_id=1764)實現的。它可以根據 tags 檔案裡面定義的函式原型,生成函式的引數列表。本來之前的快捷鍵是 tab,但因為和 supertab 衝突 了,所以我修改成了 Ctrl+p 來補全。我們先輸入一個 main,然後按下 Ctrl+p,試試效果?呵呵。 然後我們隨便輸入一個函式,試試效果 memcpy(然後按下 Ctrl+p(需要注意的是必須要加上’(‘,不然沒有 反映。現在就發現函式的原型出來了,再按下 Ctrl+p,就跳到了第一個引數,再按…….. 需要注意的是。由於庫的檔案錯綜複雜。所以直接生成的 tags 會造成很多函式補全不出來。或者有多個匹 配項。這個大家可以選擇手動在 tags 檔案裡面去新增或者重新生成 tags 檔案。
現在說說我裡面的外掛之 csupport—-讓 VIM 成為 IDE
首先它提供了比較全面的幫助文件:help csupport
大家應該能夠發現,在編輯一個.c 或者.cpp 檔案的時候,會出現一個模板,沒錯,這個就是這個外掛產生 的。大家可以在~/.vim/c-support/templates/Templates 檔案中修改上自己的註釋。比如我的就是
這裡寫圖片描述
呵呵。這個外掛功能可厲害啦。在插入模式下輸入\im 試試。你就能夠很明顯的看到是不是 main 函式直接 出來啦?而且還帶有註釋的。輸入\ii。是不是一個標準庫開啟檔案的模板就出來啦?當我們寫完一個檔案 之後輸入\rr 試試效果呢?呵呵。編譯錯誤就出來啦,而且在錯誤上回車一下,就跳到那一行去了喲。。如 果沒問題,就直接執行結果出來了。裡面的內建命令很多。我們可以輸入\ h p (外掛幫助)去看看。功能確實 很豐富。但是也很多比較冗餘。自己看幾個喜歡的記住用就 OK 了吧~~
這裡寫圖片描述

Part9: 幾個與我們相關的目 錄說明 autoload:外掛的函
數庫(有點相當於 C 語言裡面的動態庫的意思)
doc: 說明文件存放目錄
syntax:語法檔案。定義語法高亮很多就是在這裡哦
plugin:外掛目錄 ftplugin:也是外掛目錄,但是這個目錄下的外掛只對自己型別的原始檔起作用,不是全域性的外掛.比如有 個 c.vim 的外掛,就只會對.c 的檔案進行功能性的操作,其他檔案不會有效果 backup:這個目錄是我設定的。就是每編輯一個文件,儲存後在這裡都會有一份儲存之前的備份文件。這個 的作用自己去體會吧
c-support:這個是 c.vim 外掛的目錄,裡面有很多它的模板和字典檔案。
dist:TagHighlight 外掛的目錄。具體什麼用我也不清楚。
總結:
vim 是一個很個性化的編輯器。我的配置不一定大家都喜歡,而且還有很多外掛並沒有講解,比如 php 的函 數補全,python 語法縮排,tagbar(按 F4 看效果)等等。但是可以根據這種配置發現自己的需要以及怎麼解 決。我上面的大多都是來源於網上。有一些不喜歡的功能也有些修改。想到自己想要什麼功能就去網上搜一 搜,看一看官方文件(可以漢化的喲)就出來啦。當然,等用熟悉之後 vim 的外掛編寫其實也不難,如果平時 時間有空閒,可以學一學外掛的編寫方法,鍵盤對映啊,高亮設定啊,等等。