2011-12-28 74 views
0

我试图让omnicomplete工作的C++,而一切似乎是为了当我重置我的omnifunc为omnifunc=omni#cpp#complete#Main,插件不识别omnifunc,我得到一个pattern not found错误。我已经安装了Ctags并将其放入.vim/<name_of_dir>,同时将cpp_src添加到.vim/tags并运行必要的命令。 (更多信息请参见hereOmniComplete和Vim问题

问题是,无论我尝试什么,我仍然遇到此错误。我能做些什么才能做到这一点?我以前试过这个,第一次只是头痛,结果导致我无法工作。但是,这一次,我确定了。

的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 

与往常一样,任何的帮助深表感谢。

更新

发布我的C标签文件,为他人在案件检查存在与一个问题:

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-]。如果你的tags没问题,Vim会跳转到这个符号定义。如果不是,那么当然,omnicppcomplete将不起作用。 (我用omnicppcomplete超过一年多了,它的工作原理并不完全与复杂的类/结构,但工程。)

最后,检查my answer here,因为我会建议absolutelly相同的:得到完美的C/C++/Objective-C代码完成,你应该使用Clang Complete(没有ctags这种完成需要)。

如果您想要标签存在(比如说,要轻松跳转到符号定义),请使用Indexer插件。