簡體   English   中英

使omnicppcomplete和ctags在VIM中工作

[英]Getting omnicppcomplete and ctags to work in VIM

這是我的.vimrc

syntax on
set number
set nowrap
set autoindent
" configure tags - add additional tags here or comment out not-used ones
set tags+=~/.vim/tags/cpp_files
set tags+=~/.vim/tags/cpp_src/
set tags+=~/.vim/tags/qt
" 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

autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete
au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main
autocmd FileType cpp set omnifunc=cppcomplete#CompleteCPP

我已按照指南進行操作,但實際上沒有任何反應。 如您所見,我嘗試了autocmd和au type命令的變體來使其工作,但是實際上什么也沒發生。 難道我做錯了什么? 設置標簽*行中的路徑是正確的...

此行應該是導致問題的那一行:

autocmd FileType cpp set omnifunc=cppcomplete#CompleteCPP

您會看到,您具有以下命令:

au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main
autocmd FileType cpp set omnifunc=cppcomplete#CompleteCPP

事實是,當輸入擴展名為“ cpp”或“ hpp”的緩沖區時,將執行第一個自動命令。 當文件類型設置為cpp時執行第二個命令,這通常 打開緩沖區發生。 甚至訂購的順序都沒有關系,第二個總是在第一個之后執行,因此omnifunc總是設置為cppcomplete#completeCPP ,而您不希望這樣。 您應該用以下一行替換這兩行:

autocmd FileType cpp set omnifunc=omni#cpp#complete#Main

以防萬一,如果仍然無法使用,請嘗試以下方法:

au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main

對於將來的調試問題,一個小技巧:您可以通過執行set omnifunc來檢查omnifunc的值。 這樣,您可以檢查完成功能是否確實是您想要的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM