2

これが私の.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タイプコマンドを試しましたが、実際には何も起こりません。私は何か間違ったことをしていますか?settags*行のパスは正しいです...

4

1 に答える 1

4

この行は、問題の原因となる行である必要があります。

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」のバッファに入るときに実行されます。2番目は、ファイルタイプがcppに設定されている場合に実行されます。これは、常にバッファーを開いた後に発生します。どのように注文してもかまいません。2番目のものは常に最初のものの後に実行されるため、omnifuncは常にに設定されcppcomplete#completeCPPますが、これは望ましくありません。これらの行の両方を次の1行に置き換える必要があります。

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

念のため、それでも機能しない場合は、代わりにこれだけを試してください。

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

将来のデバッグの問題については、ちょっとしたヒント:をomnifunc実行しての値を確認できますset omnifunc。そうすれば、完了関数が本当に必要なものであるかどうかを確認できます。

于 2011-09-27T06:40:02.917 に答える