對原文作了部分修改及增長,原文地址http://timothyqiu.com/archives/using-omnicomplete-for-c-cplusplus-in-vim/ php
OmniComplete 並非插件的名字,而是 Vim 衆多補全方式中的一種(全能補全)。說白了 OmniComplete 其實就是根據光標前的內容猜想光標後的內容,具體怎麼猜取決於所採用的腳本。 html
而 OmniCppComplete 就是專爲 C/C++ 編寫的 OmniComplete 一個補全腳本。 python
那麼常常和 OmniCppComplete 一塊兒出沒的 Ctags 又是什麼呢?Ctags 全名 Exuberant Ctags,是一個獨立的程序(也就是說,其實和 Vim 一點關係都沒有)。它能夠爲各類語言的源代碼生成語言元素(language object)索引文件。對於 C/C++ 來講,就是把源代碼中的各類宏、函數、類、類成員等等元素和它們的相關信息生成索引文件,供其它程序使用。 c++
OmniCppComplete 腳本就是根據 Ctags 生成的索引文件進行補全的。 好了,背景知識就是這樣,安裝步驟以下: shell
通常ctags 都是默認安裝過的,fedora下能夠用yum list ctags,查看是否安裝 vim
以生成 C++ 標準庫索引文件爲例: curl
使用命令行進入 D:/ctags/cpp_src 後執行: 函數
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp .
建議將上一步生成的 D:/ctags/cpp_src/cpp 文件放到一個專門放置索引文件的目錄以便後面的統一設置,例如放到 D:/ctags/tags 網站
其它庫的索引文件也能夠依法炮製,只需切換到該庫的 include 文件夾,執行: ui
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f <文件名> .
添加openGL
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/GL
修改爲對應tags
mv tags gl
fedora17 的$HOME下沒有.vim文件夾,建立一個就能夠了,vim會自動加載的。
可是也能夠設置成全局的,對全部用戶有效,就是吧~/.vim 替換成 $VIM/vimfiles
$VIM/vimfiles:功能同上,不過是對全部用戶均有效的。
VIM 插件通常安裝在 5 個地方,存放插件的路徑都列在「runtimepath」選項中,咱們能夠使用 set 命令查看它:
:set runtimepath?
顯示結果以下:
runtimepath=~/.vim,/usr/local/share/vim/vimfiles,/usr/local/share/vim/vim63,/u
sr/local/share/vim/vimfiles/after,~/.vim/after Unix 下的 $HOME/.vim 或 Windows 下的 %HOME% $VIM/vimfiles:功能同上,不過是對全部用戶均有效的。 $VIMRUNTIME:隨 VIM 一同發行的插件與腳本。不要在這裏存放你本身下載或安裝的文件,升級 VIM 的時候,這裏的文件極可能被直接覆蓋掉,不會給出任何提示信息。 Unix 下的 $HOME/.vim/after 或 Windows 下的 %HOME% $VIM/vimfiles/after:對全部用戶均有效的一些全局設置修正腳本。 以上路徑都是使用「VIM 語言」給出的,通常狀況下,$VIMRUNTIME 都不會被定義爲系統環境變量,$VIM 在少數狀況下會在 VIM 以外被定義。若是你想知道這些路徑都是什麼,能夠在 VIM 中使用「:echo $VIMRUNTIME」或「:echo $VIM」。 以上提到的 5 個目錄的子目錄結構都是相同的。若是你但願在其它目錄裏安裝插件的話,建議使用 $VIMRUNTIME 的目錄結構做爲模版,將必要的目錄結構建立完整,像這樣:
+ <Directory>
+ colors + compiler + doc + etc + ftdetect + ftplugin + indent + keymap + plugin + syntax |
在 vimrc 文件中加入
其中「表示註釋
" ctags 索引文件 (根據已經生成的索引文件添加便可, 這裏我額外添加了 hge 和 curl 的索引文件) set tags+=D:/ctags/tags/cpp set tags+=D:/ctags/tags/hge set tags+=D:/ctags/tags/curl " OmniCppComplete let OmniCpp_NamespaceSearch = 1 let OmniCpp_GlobalScopeSearch = 1 let OmniCpp_ShowAccess = 1 let OmniCpp_ShowPrototypeInAbbr = 1 " 顯示函數參數列表 let OmniCpp_MayCompleteDot = 1 " 輸入 . 後自動補全 let OmniCpp_MayCompleteArrow = 1 " 輸入 -> 後自動補全 let OmniCpp_MayCompleteScope = 1 " 輸入 :: 後自動補全 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] " 自動關閉補全窗口 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif set completeopt=menuone,menu,longest
另外,還需確認在 vimrc 中開啓了 filetype 選項,否則 OmniComplete 沒法自動識別 C/C++ 文件類型進行補全。
這樣,在插入模式編輯 C/C++ 源文件時按下 . 或 -> 或 ::,或者手動按下 Ctrl+X Ctrl+O 後就會彈出自動補全窗口,此時能夠用 Ctrl+N 和 Ctrl+P 上下移動光標進行選擇。
也許你也已經注意到了一個問題,那就是「自動補全窗口的配色很是之醜」,Vim 自帶的幾個配色方案中只有兩三種配色改掉了自動補全窗口醜陋的紫色,其它的基本上都是很逆天的用灰色表示當前選中項、紫色表示其餘項。
要改變自動補全窗口的配色能夠在 vimrc 中加上:
highlight Pmenu guibg=darkgrey guifg=black highlight PmenuSel guibg=lightgrey guifg=black
Pmenu 是全部項的配色,PmenuSel 是選中項的配色,guibg 和 guifg 分別對應背景色和前景色。
ps:tab鍵 設置爲4個空格,設置tab寬度
爲了vim更好的支持python寫代碼,修改tab默認4個空格有兩種設置方法: 1. vim /etc/vimrc
2. vim /etc/vimrc
推薦使用第二種,按tab鍵時產生的是4個空格,這種方式具備最好的兼容性。 from: http://my.oschina.net/renwofei423/blog/17338 |