2008/04/03

Make vim more powerful

在Linux下我最習慣使用的程式編輯環境是vim(我在windows很少寫程式),或許過去習慣使用visual studio,Eclipse,Netbean或是相關IDE的人,會覺得怎麼會有人還會使用這種古董級的編程環境,它既難用,又少了一堆功能。但事實上真正會使用vim的人,他們的vim是可以比source insight這類的源碼追蹤環境還強大的。這篇文章我主要是來介紹「如何打造vim成為一個強大的編程環境」。這篇文章適合稍微對vim有一點瞭解的人來閱讀。

在開始之前我先讓大家看一下我的vim視窗截圖
這張圖內有幾個重點要觀察:
  • 多檔編輯列表顯示在最上面的小視窗裡。
  • 源碼有folding的功能,左邊中間的視窗。
  • 字串搜尋的結果及編譯的訊息顯示在左下的視窗,這個視窗稱為quickfix window。
  • 源碼的函式列表顯示在右邊視窗。
另外還有些功能是上圖沒顯示的:
  • 源碼追蹤,這能讓你跳到你現在游標所在變數或函式的宣告或是定義的地方。
  • 方便的瀏覽硬碟內的檔案並開啟。
  • 源碼補齊,對於寫大專案很需要這種功能。
以下我將簡單介紹如何使用這些功能,詳細資訊請自己閱help document及http://www.vim.org 有些快速鍵是以我的vimrc(vim設定檔,位於~/.vimrc)為基礎,所以有需的人可以參考我的設定檔及plugin包

多檔編輯

這個功能是使用tabBar的vim plugin,將該plugin下載並放在~/.vimrc/plugin/後,在多檔編輯時該視窗會自動跑出來。切換視窗的方法大略為Ctrl+Tab Ctrl+Shift+Tab 及 Alt+[number]。

補充:在vim要開其他檔,可輸入:e 檔名來開啟其他檔。

Folding

Folding又可以叫程式碼摺疊,這個功能是預設就有的,詳細指令可參考gvim裡的工具列Tools->Folding,我平常不習慣使用這個功能,若要開啟我會設:set foldmethod=indent

字串搜尋及編譯訊息列表

這兩項功能的訊息列表是放在quickfix window,開啟方式為:copen關閉為:cclose。我的快速鍵為F4。另外要跳到下一個及前一個訊息的指令為:cnext :cprev。我的快速鍵為Ctrl+n及Ctrl+p。
字串搜尋的指令為:vimgrep [pattern] [file_list]。編譯的訊息,使用前提是你要有Makefile,編譯時只要打:make其訊息將自動放至quickfix裡。我的快速鍵為Ctrl+F3。

函式列表


這是使用taglist這個plugin。我的快速鍵為F5。

源碼追蹤

在vim裡必需有ctags檔案的技援,在使用前必需先安裝,在ubuntu內安裝很容易,在terminal輸入sudo apt-get install exuberant-ctags就安裝完了,產生該檔的指令有點複雜,在vim裡輸入":!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ." 即可。我的快速鍵為Ctrl+F12。
有了該檔案,在vim只要游標移到你想要查詢的函式或變數輸入Ctrl+]或Ctrl+t即可跳過去再跳回來,若是有同時找到多個類似keyword,你可以輸入:ts選擇你要跳那一個,或是當你已經跳過去了,想直接跳到下一個keyword可以輸入:tnext。
另一種可能使用的情形是有些人想要直接開另一個window來看該keyword,這種情形可以使用srcexplore這個plugin。我的快速鍵為F6。


檔案列表

使用ls這個plugin,我的快速鍵為F2。

源碼補齊

使用omnicppcomplete這個plugin,我平常不習慣用它,請大家自己參考plugin的網頁:
http://www.vim.org/scripts/script.php?script_id=1520


結論

其實vim還有很多很強大的功能,只是跟其他IDE比起來沒有一開就預設裝好,但藉著一些plugin,可以讓它擁有各式各樣的能力,此外,你還可以自行的修改它,讓它符合平常使用的習慣。這篇文章,主要介紹了一些plugin,主要是讓已熟悉使用vim的讀者們能更瞭解到vim的強大,並且將它運用在工作中,希望這篇文章能讓讀者們能更快快樂樂的用vim。

參考資料

5 comments:

偉寧 said...

不好意思 你的那個VIM"設定檔及plugin包"連結好像失效了耶~
可以補回去嗎?謝謝!

Rickey said...

@偉寧

新的設定檔請參考這篇文章來抓

至於plugin現在不提供了,因為有些plugin更新的快且我擔心license問題,所以就請你們自己上vim官網抓吧

偉寧 said...

感謝~

Mr. Wu said...

產生該檔的指令有"檔"複雜
....打錯字了??
另外謝謝提供教學

Rickey said...

@Mr. Wu
感謝提醒 (我的文章錯別字還不少 ^^")