用vim實現C++代碼的自動補全功能

使用過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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章