【问题标题】:Vim Omnicppcomplete - partially workingVim Omnicppcomplete - 部分工作
【发布时间】:2015-10-12 17:10:53
【问题描述】:

我刚刚安装了omnicppcomplete,它正在“kindof”工作。

这种行为真的很奇怪,Omnicppcomplete 对某些文件有效,但对其他文件无效。

例如: 如果我打开 file1.cpp,如果我按下,omnicppcomplete 正在工作。 但是,如果我打开 file2.cppomnicppcomplete 不再工作,我会收到错误: -- 未找到全方位完整 (^O^N^P) 模式。

这是我完整的.vimrc:

" -------------------------------- PLUGINS ----------------------------"
"############### ctags

" build tags of your own project
map <C-c> :!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

"############### OmniCppComplete
au BufNewFile,BufRead,BufEnter *.cpp,*.hpp set omnifunc=omni#cpp#complete#Main
filetype on

" configure tags - add additional tags here or comment out not-used ones
set tags+=~/.vim/tags/cpp
set tags+=~/.vim/tags/cuda

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

此外,我使用的是 MacVim 7.3。

非常感谢任何帮助。

【问题讨论】:

    标签: vim ctags omnicomplete omnicppcomplete


    【解决方案1】:

    第一件事:我建议你不要手动处理ctags,而是使用插件Indexer,它会自动完成所有工作。我使用 Indexer 和omnicppcomplete 很长时间了,在大多数情况下omnicppcomplete 都可以接受。

    详细信息请看我的文章:Vim: convenient code navigation for your projects,里面详细解释了Indexer + Vimprj的用法。

    第二件事:Omnicppcomplete 可以接受,但并不完美。对于 C/C++ 自动补全,我建议您不要使用omnicppcomplete,而是使用clang_complete 插件。它真的很强大,不是通过丑陋的标签方法完成的,而是通过真正的C/C++/Objective-C编译器(即clang)完成的。

    【讨论】:

    • :s/use plugin/use my plugin ;-)
    • @romainl,是的,但它本质上会改变什么吗? =)
    • 完全没有,特别是考虑到您的插件的实用性。我认为,公开这种事情是一种很好的形式。但我真的不在乎,因此是笑脸。
    • @dimtry:clang_complete 是否也适用于所有类型的库?所以在包含标题之后,例如:cuda_runtime.h?
    • @user1829358, clang_complete 只使用clang 的输出,这是真正强大的编译器。当然,clang 可以正确处理标头包含,以及编译器应该处理的所有内容。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2013-06-07
    相关资源
    最近更新 更多