【问题标题】:Getting omnicppcomplete and ctags to work in VIM让omnicppcomplete和ctags在VIM中工作
【发布时间】:2014-03-25 17:01:44
【问题描述】:

这是我的 .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

我已按照this 指南让它工作,但实际上什么也没发生。如您所见,我已经尝试了 autocmd 和 au type 命令的变体以使其正常工作,但实际上没有任何反应。难道我做错了什么?设置的标签*行中的路径是正确的...

【问题讨论】:

    标签: c++ vim ctags omnicomplete


    【解决方案1】:

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

    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
    

    对于以后的调试问题,一个小提示:可以通过执行set omnifunc来检查omnifunc的值。这样,您可以检查完成功能是否真的是您想要的。

    【讨论】:

    • 谢谢,我回家后一定会尝试一下。
    • 更新:我试过这个(两种解决方案),当我输入 Ctrl-X; Ctrl-O,它说那个特定的omnifunc是未知的。这是否意味着omnicppcomplete安装不正确?
    • 大概就是这样。你知道你把它放在哪里了吗?你在用病原体插件,一个vimball...?
    • 我正在使用一个 .vim 文件,我将它放在 usr/share/vim/plugin 中。
    • 对于这个插件来说,这还不够,不仅仅是一个插件文件。您可以在此处阅读说明:vim.org/scripts/script.php?script_id=1520。您需要下载一个 zip 文件并将整个内容解压缩到您的 ~/.vim 目录中。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多