使用過Source Insight的人一定對它的自動補全功能印象深刻,在很多的整合式開發環境中,也都支援自動補全。VIM做為一個出色的編輯器,這樣的功能當然少不了。而且,作為一個通用的編輯器,VIM實現的補全功能並不僅僅限於對程式的補全,它可以對檔案名稱補全、根據字典進行補全、根據本緩衝區或其它緩衝區類似的內容進行補全、根據檔案文法補全等等,它甚至允許使用者自己編寫函數來實現定製的補全。
作為系列文章中的一篇,本文以介紹VIM對程式的補全為主,也順帶介紹一下其它的補全方式。本文將分為兩篇,第一篇主要介紹VIM的OMNI補全,第二篇簡要介紹其它的補全方式,以及SuperTab外掛程式。
VIM的OMNI補全(以下稱“全能補全”)可以支援多種程式語言,包括C,C++,XML/HTML,CSS,JAVASCRIPT,PHP,RUBY等,詳細列表請參閱“:help compl-omni-filetypes”。在本文中,主要介紹C及C++的全能補全。
VIM在對不同類型的檔案進行補全時,會根據檔案類型,為其設定不同的補全函數。也就是說,要實現全能補全功能,需要開啟檔案類型檢測。把下面的命令加到你的vimrc中:
你可以查看'omnifunc'選項,來知道當前的補全函數是什麼。
對C及C++代碼的全能補全需要使用Exuberant ctags產生的標籤檔案,我們在前面的文章中介紹過如何使用Exuberant ctags程式來產生標籤檔案。不過,如果你的Exuberant ctags版本為5.5.4,那麼需要為其打上增加"typename:"欄位補丁,才能支援C的全能補全。補丁在這裡下載:
ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
可以在這裡找到MS-Windows上已經編譯好的可執行版本:
http://georgevreilly.com/vim/ctags.html
不過我建議使用最新5.6版本Exuberant Ctags。在下面的網站可以下載:
http://ctags.sourceforge.net/
你可以直接下載已經編譯好的rpm版本,或者下載原始碼。如果是後者,使用以下命令對原始碼進行編譯:
如果你沒有系統目錄的寫入權限,你可能要把Exuberant Ctags安裝到自己的主目錄,只需要把上面的“./configure”命令改為“./configure –prefix=/home/xxx”就可以了。
Ctags升級後,使用“ctags –R”更新一下標籤檔案,現在再進入VIM就可以在C程式中全能補全了。我們依舊以VIM 7.0的原始碼為例。
例如,我們在VimMain()函數中,輸入“gui”三個字元,然後按下“CTRL-X CTRL-O”,在VIM的狀態行會顯示“Omni Completeion”,表明現在進行的是全能補全,同時會彈出一個下拉式功能表,顯示所有匹配的標籤。你可以使用來上下選擇,在選擇的同時,所選中的項就被放在游標位置,不需要再按斷行符號來把它放在游標位置(像Source Insight那樣)。
如果更習慣於使用Source Insight這種方式,你可以使用上、下游標鍵來選擇項目,然後按斷行符號把選中的項目放到游標位置。不過這樣一來,你的手指就會離開主編輯區,並且需要多輸入一個斷行符號鍵。
本文結尾處提供了一個鍵綁定,允許在使用"CTRL-P"和"CTRL-N"時,輸入斷行符號表示補全結束,而不是插入斷行符號。
如果補全處於啟用狀態,可以用"CTRL-E"停止補全並回到原來錄入的文字。用"CTRL-Y"可以停止補全,並接受當前所選的項目。
預設的,VIM會使用下拉式功能表和一個preview視窗(預覽視窗)來顯示匹配項目,下拉式功能表列出所有匹配的項目,預覽視窗則顯示選中項目的詳細資料。開啟預覽視窗會導致下拉式功能表抖動,因此我一般都去掉預覽視窗的顯示,這需要改變'completeopt'的值,我的設定如下:
上面的設定表明,只在下拉式功能表中顯示匹配項目,並且會自動插入所有匹配項目的相同文本。
如果要支援C++的全能補全,需要到http://www.vim.org下載OmniCppComplete外掛程式,連結如下:
http://www.vim.org/scripts/script.php?script_id=1520
|
install details |
1) Unzip the plugin to ~/.vim (unix) or %HOMEPATH%/vimfiles (windows) 2) Run Vim and type the following command : :helptags $HOME/.vim/doc or :helptags $HOME/vimfiles/doc 3) Type :h omnicppcomplete and please read the installation paragraph. |
|
下載後,把它解壓到你的.vim目錄(在windows下是vimfiles目錄),它會安裝以下檔案:
確保你已關閉了VI相容模式,並允許進行檔案類型檢測:
接下來,使用下面的命令,為C++檔案產生標籤檔案,假定你的檔案在src分類樹下:
在對C++檔案進行補全時,OmniCppComplete外掛程式需要在標籤檔案中包含C++的額外資訊,因此上面的ctags命令不同於以前我們所使用的,它專門為C++語言產生一些額外的資訊,上述選項的含義如下:
現在,進入VIM,設定好tag選項(我在前面的文章中介紹過)。好極了,VIM能夠對C++自動補全了!
我寫了一個簡單的例子,來示範C++的自動補全功能,如所示,在輸入“t.”後,OmniCppComplete外掛程式會自動彈出struct test1的成員供選擇,而在輸入“b->”後,又會自動彈出class base的成員供選擇,非常方便,連“CTRL-X CTRL-O”都不必輸入。OmniCppComplete外掛程式的預設設定比較符合我的習慣,因此不須對其設定進行調整,如果你需要調整,參閱OmniCppComplete的協助頁。
下表是我的vimrc中設定的鍵綁定,使用pumvisible()來判斷下拉式功能表是否顯示,如果下拉式功能表顯示了,鍵映射為了一個值,如果未顯示,又會映射為另一個值。
上面的映射都是在插入模式下的映射,解釋如下:
- 如果下拉式功能表彈出,斷行符號映射為接受當前所選項目,否則,仍映射為斷行符號;
- 如果下拉式功能表彈出,CTRL-J映射為在下拉式功能表中向下翻頁。否則映射為CTRL-X CTRL-O;
- 如果下拉式功能表彈出,CTRL-K映射為在下拉式功能表中向上翻頁,否則仍映射為CTRL-K;
- 如果下拉式功能表彈出,CTRL-U映射為CTRL-E,即停止補全,否則,仍映射為CTRL-U;
在下一篇文章中,將繼續介紹VIM提供的其它補全方式。
[參考文檔]
1. VIM協助檔案
2. http://vimcdoc.sourceforge.net/
3. http://www.vim.org/tips/tip.php?tip_id=1228
4. http://www.vim.org/tips/tip.php?tip_id=1386
[尾記]
本文可以自由應用於非商業用途。轉載請註明出處。
原文連結:http://blog.csdn.net/easwy
[版本]
23Apr07, easwy, v0.1, initial version
24Apr07, easwy, v0.2, add description of ctags option
15May07, easwy, v0.3, add filetype on, thanks paulhsu
windows下用vim實現qt代碼的自動補全功能
1.安裝vim.
2.下載ctags for win32並解壓到c:/ctags/目錄下;
3.將c:/ctags加入windows的path環境變數中;
4.下載omnicppcomplete將解壓到vim安裝目錄的vimfiles目錄下;
5.轉到qt的include目錄下執行ctags -R --c++-kinds=+p --fields=+iaS --extra=+q;命令完成後會在該目錄下
產生一個tags檔案,它是omnicppcomplete和vim用來作命令補全的資料庫。
6.在qt的src目錄下再執行一遍上述命令;
7.編輯vim安裝目錄下的_vimrc檔案,將下述兩行加入其中
set tags+=c:/Qt/4.3.3/include/tags
set tags+=c:/Qt/4.3.3/src/tag
其中c:/Qt/4.3.3/是我機器上qt 的安裝目錄,根據你的情況作出調整。
8.到你的工程目錄下執行5步中的命令;
9.用vim開啟一個cpp檔案試一下吧,哈哈;
轉自 :http://blog.csdn.net/lwhsyit/article/details/2907583