首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让omnicppcomplete和ctag在VIM中工作

让omnicppcomplete和ctag在VIM中工作
EN

Stack Overflow用户
提问于 2011-09-26 04:32:37
回答 1查看 7.2K关注 0票数 2

这是我的.vimrc

代码语言:javascript
复制
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

我遵循了this指南,让它正常工作,但什么也没发生。正如您所看到的,我已经尝试了autocmd和au type命令的一个变体,以使其正常工作,但实际上什么也没有发生。我做错了什么吗?集合标签*行中的路径是正确的...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-27 14:40:03

这一行应该是导致问题的那一行:

代码语言:javascript
复制
autocmd FileType cpp set omnifunc=cppcomplete#CompleteCPP

您可以看到,您有以下命令:

代码语言:javascript
复制
au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main
autocmd FileType cpp set omnifunc=cppcomplete#CompleteCPP

问题是,第一个自动命令是在进入扩展名为"cpp“或"hpp”的缓冲区时执行的。第二个是在filetype设置为cpp时执行的,总是在打开缓冲区之后执行。即使你如何排序也无关紧要,第二个总是在第一个之后执行,所以omnifunc总是被设置为cppcomplete#completeCPP,这是你不想要的。您应该将这两行替换为以下一行:

代码语言:javascript
复制
autocmd FileType cpp set omnifunc=omni#cpp#complete#Main

以防万一,如果它仍然不起作用,只尝试这样做:

代码语言:javascript
复制
au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main

对于将来的调试问题,有一个小技巧:您可以通过执行set omnifunc来检查omnifunc的值。这样,您就可以检查完成函数是否真的是您想要的函数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7548405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档