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

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.