Получение omnicppcomplete и ctags для работы в VIM - PullRequest
2 голосов
/ 26 сентября 2011

Вот мой .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 для этого, но на самом деле ничего не происходит. Я делаю что-то неправильно? Пути в заданных тегах * строки правильные ...

1 Ответ

4 голосов
/ 27 сентября 2011

Эта строка должна вызывать проблему:

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

Для будущих проблем отладки, небольшой совет: вы можете проверить значение omnifunc, выполнив set omnifunc. Таким образом, вы можете проверить, действительно ли вам нужна функция завершения.

...