2011-12-28 2 views
0

Я пытаюсь получить omnicomplete для работы на C++, и, хотя все, кажется, в порядке, когда я возвращаю свой omnifunc как omnifunc=omni#cpp#complete#Main, плагин не распознает omnifunc, и я получаю pattern not found ошибка. Я установил Ctags и поместил его в .vim/<name_of_dir>, а также добавив cpp_src в .vim/tags и выполнив необходимые команды. (см. here для получения дополнительной информации)OmniComplete и Vim issues

Проблема в том, что независимо от того, что я пытаюсь, я до сих пор получаю эту ошибку. Что я могу сделать, чтобы это работало? Я пробовал это раньше, и в первый раз только что была головная боль, которая привела к тому, что я не смог заставить ее работать. На этот раз, однако, я определен.

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 

Как всегда, любая помощь очень ценится.

Update

проводки мой файл 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 больше года, и она работает не идеально со сложными классами/структур, но работает.).

И, наконец, проверить my answer here, потому что я бы рекомендовал absolutelly тот же: , чтобы получить идеальный C/C++/Objective-C вам необходимо использовать Clang Complete (для такого рода завершения требуется ctags).

И если вы хотите, чтобы теги присутствовали (скажем, чтобы легко перейти к определению символов), используйте плагин Indexer.