首先確定vim編輯.cc或者.cpp文件時當前自動補全函數,在命令模式下輸入
:set omnifunc?
如果得到的結果為:omnifunc=ccomplete#Complete,說明有必要進行以下的操作以實現針對c++的自動補全
1 首先安裝OmniCppComplete,參見:
http://www.vim.org/scripts/script.php?script_id=1520
安裝的過程很簡單,與大多數vim插件一樣,cd到~/.vim/目錄解壓所下載的文件即可
2 在~/.vim/目錄下創建tags子目錄
3 創建stdc++ 對應的tags:
A)首先下載經高手修改定制的libstdc++頭文件,可以到這裡下載:
http://www.vim.org/scripts/script.php?script_id=2358
並將其解壓到~/.vim/tags
B) 運行以下命令
$ cd ~/.vim/tags
$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ cpp_src
$ mv tags cpp
4 修改~/.vimrc文件
在其中加入以下內容:
" configure tags - add additional tags here or comment out not-used ones
set tags+=~/.vim/tags/cpp
set tags+=~/.vim/tags/gl
set tags+=~/.vim/tags/fl
" build tags of your own project with CTRL+F12
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
" OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
let OmniCpp_MayCompleteDot = 1 " autocomplete after .
let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" automatically open and close the popup menu / preview window
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest,preview
5 檢驗
用vim打開cpp文件,輸入
std::
將得到std命名空間的所有標示符,按CTRL+N或者CTRL+P選擇
繼續輸入std::vector vi,然後輸入
vi.
vim將自動提示其成員