OmniComplete и Vim вопросы
Я пытаюсь заставить работать omnicomplete для C++, и, хотя все кажется в порядке, когда я перезагружаю свой omnifunc на omnifunc=omni#cpp#complete#Main
, плагин не распознает omnifunc, и я получаю pattern not found
ошибка. Я установил Ctags и вставил его .vim/<name_of_dir>
вместе с добавлением cpp_src
в .vim/tags
и запуск необходимых команд. (см. здесь для получения дополнительной информации)
Проблема в том, что, что бы я ни пытался, я все равно получаю эту ошибку. Что я могу сделать, чтобы заставить это работать? Я пробовал это раньше, и в первый раз я почувствовал головную боль, из-за которой я не смог заставить ее работать. На этот раз, однако, я полон решимости.
VimRc
1 syntax on
2 set number
3 set autoindent
4 set ft=nasm
5 set ts=4
6 set nowrap
7 set nocp
8 filetype plugin on
9 map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
10
11 autocmd FileType cpp set omnifunc=omni#cpp#complete#Main
12
13 " configure tags - add additional tags here or comment out not-used ones
14 set tags+=~/.vim/tags/cpp
15 set tags+=~/.vim/tags/gl
16 set tags+=~/.vim/tags/sdl
17 " set tags+=~/.vim/tags/qt4
18 " " build tags of your own project with Ctrl-F12
19 map <C-F12> :!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
20 "
21 " " OmniCppComplete
22 let OmniCpp_NamespaceSearch = 1
23 let OmniCpp_GlobalScopeSearch = 1
24 let OmniCpp_ShowAccess = 1
25 let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
26 let OmniCpp_MayCompleteDot = 1 " autocomplete after .
27 let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
28 let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
29 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
30 " " automatically open and close the popup menu / preview window
31 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
32 set completeopt=menuone,menu,longest,preview
Как всегда, любая помощь очень ценится.
Обновить
Публикация моего файла Ctags для проверки другими пользователями в случае возникновения проблемы с этим:
ctags -R --c++-kinds=+p --fields-+iaS --extra=+q .
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
1 ответ
Очевидно, Vim не может найти ваш файл тегов. Ваша команда ctags -R --c++-kinds=+p --fields-+iaS --extra=+q .
создаст tags
файл в текущем каталоге. Убедитесь, что это то, что вы хотите.
Пожалуйста, выполните следующую команду:
:set tags?
и убедитесь, что ваш файл тегов присутствует в результирующем списке. Вы также можете поместить курсор на любой символ (скажем, на какое-нибудь имя класса) и нажать Ctrl-]
, Vim перейдет к этому определению символа, если ваш tags
все в порядке. Если это не так, то, конечно, omnicppcomplete
не будет работать. (Я использую omnicppcomplete
уже больше года, и это работает. Не идеально со сложными классами / структурами, но работает.)
И, наконец, проверьте мой ответ здесь, потому что я бы рекомендовал абсолютно то же самое: чтобы получить идеальное завершение кода на C/C++/Objective-C, вам следует использовать Clang Complete (нет ctags
необходим для такого рода завершения).
И если вы хотите, чтобы присутствовали теги (скажем, для быстрого перехода к определению символов), используйте плагин Indexer.