2009/03/14

打造自己的VIM: 源碼補齊 SuperTab OmniCppComplete Code_Complete

VIM的源碼補齊是我比較少用的部分(這就是身在系統廠的悲哀,幾乎沒什麼機會寫大一點的專案),但就我以前寫code的經驗,小弟認為我這次要介紹的3個plugins應該是能滿足大部分的需求。這3個plugins為[SuperTab]、[OmniCppComplete]及[Code_Complete]。

SuperTab

SuperTab是這3個源碼補齊我最喜歡的plugin,它使用不需要什麼設定,也不用產生tags檔案,裝好即用。它補齊的所使用的關鍵字是藉由搜尋所有被開啟的檔案內的字。而使用方式也很容易,當你打字打到一半需要它幫你補齊時就按下<tab>鍵,它就幫你把剩下的字補齊。但有時我們會希望是插入一個真正的Tab而不是要幫助補齊,這時需要按下Shift+Tab,它的使用就這樣而已,是不是很容易呀。以下是一張截圖,可以看到圖上有2個關鍵字AAAA及AABB,當我輸入AA後要它補齊,又有多個關鍵字被找到它會彈出一個popup menu讓你選擇。



OmniCppComplete

OmniCppComplete是針對C/C++程式所設計的源碼補齊方式,它需要tags檔案的幫忙,若是還不知道要怎麼產生tags檔案,可以參考我之前的文章,安裝:[打造自己的VIM: 函式列表 TagList],產生:[打造自己的VIM: 源碼追蹤 SrcExpl]。關於OmniCppComplete的截圖可以到[這裡]來看,那裡提供了很多圖,我就不再為各位截圖了。

OmniCppComplete的使用除了先產生tags檔案外,另外可以用的鍵就只有<c-x><c-o>,按下Ctrl+X及Ctrl+O後,它就會依據tags檔案及目前游標前的的字彈出相對應的popup menu供使用者選擇,就使用上也是很容易。

而在設定上,我自己是什麼都沒設,如果有覺得使用上有什麼不便,可以看看它裡頭的doc,那裡有所以它可以設定的option,我稍微看了一下大概就是調整popup menu的顯示設定或是自動選擇第一個item。

Code_Complete

不知道各位有沒有看過一些在mac上的demo,那些人有些人是寫RoR有些是寫HTML(PHP),他們只要輸入if或for等關鍵字,他們的文字編輯器就會幫他們把後面相關的文字補齊,一整個寫起程式來很帥,Code_Complete就是提供這種功能。相信有人還是不懂我在說什麼,我用下的套圖來說明,下面第一張圖是一個C的程式,一般include完檔案後會寫個main function,在我輸入完main再按下Alt+d如圖2,它便幫我把該補完的補完了,並且跳到要繼續寫程式的地方;接著我輸入if如圖3,再按下Alt+d,它又幫我把剩下補完。若是想跳到下一個`<...>`處,只要按下Alt+d它就會幫我們跳過去。









到這裡應該大家都知道基本用法,但是Code_Complete他是根據什麼來補齊呢?各位可以打開code_complete.vim,可以看到有一行寫著:

let g:template['c']['main'] = "int main(int argc, char \*argv\[\])\<cr>{\<cr>".g:rs."...".g:re."\<cr>}"


等於符號左邊的意思是遇到附檔名屬於c程式且游標前面是main時,一按下Alt+d便用等於符號右邊的字串補完。至於右邊字串的意思大家就自己跟main產生出來的東東比對一下大概就可以猜到它的意思。

2 comments:

dryman said...

最近開始學vim,爬ptt上面的文連到了大大的網誌:D

我原本使用的程式環境是mac還有textmate,就是傳說中可以用一大堆快速鍵來飆程式碼的神奇編輯器。

code complete有一個類似的vim plugin叫做VimMate可以做到類似的事情喔XD

而且編寫snippet比code complete更快更直覺!

dryman said...

更正:
不是vimMate而是snipMate