Vim中利用OmniCppComplete實現C++程式碼自動補全
阿新 • • 發佈:2019-01-24
概述:OmniCppComplete適用於vim7.0及以上,OmniCppComplete利用catags產生的資料庫實現C/C++的程式碼自動補全功能。
一、OmniCppComplete 特點:
- Complete namespaces, classes, structs and union members.- Complete inherited members for classes and structs (single and multiple inheritance).
- Complete attribute members eg: myObject->_child->_child etc...
- Complete type returned by a function eg: myObject->get()->_child.
- Complete the "this" pointer.
- Complete a typedef.
- Complete the current scope (global and class scope).
- Complete an object after a cast (C and C++ cast).
- Complete anonymous types (eg: struct {int a; int b;}g_Var; g_Var.???). It also works for a typedef
二、 安裝步驟:
1、安裝OmniCppComplete。可以到OmniCppComplete的官方下載:點選開啟連結,有時可能除了翻牆沒法開啟。可以從這個地方下載:點選開啟連結。具體參考安裝目錄doc/omnicppcomplete.txt。
2、新建一個儲存ctags資料庫的目錄,例如在安裝目錄下新建一個tags目錄。
3、建立stdc++ tags:下載解壓modified libstdc++ headers 到 tags/cpp_src。官方下載連結:點選開啟連結,或者:點選開啟連結。stdc++ tags介紹:能夠被ctags使用的被稍做了修改的libstdc++標頭檔案,從stdc++標頭檔案建立的ctags資料庫被OmniCppComplete來實現STL、流以及其他標準C++內容的補全功能 。
4、建立stdc++的catags資料庫:
4.1 轉到tags目錄
4.2 執行:
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp cpp_src
5、增加額外的tags:$ ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f gl /usr/include/GL/ # for OpenGL $ ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f sdl /usr/include/SDL/ # for SDL $ ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f qt4 /usr/include/qt4/ # for QT4
6、編輯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/sdl
set tags+=~/.vim/tags/qt4
" build tags of your own project with Ctrl-F12
map <C-F12> :!ctags -R --sort=yes --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