【问题标题】:ctags for autocompleting c++ library functions in vimctags 用于在 vim 中自动完成 c++ 库函数
【发布时间】:2019-09-18 13:44:23
【问题描述】:

在学习了一些教程之后,我尝试使用 exuberant ctags 来自动完成,例如openGL 函数。我用了命令

ctags -R --languages=C,C++ --c++-kinds=+p --fields=+iaS --extra=+q ./

在 freeglut.h、glew.h 等文件所在的目录中。然后将其复制到 .vimrc 文件中指向的目录(在我的 .vimrc 中使用 'set tags+=./myTag/tags') 当我尝试自动完成一些 glut 函数时,我没有列出函数参数,只有函数本身完成,但没有参数。

另一方面,当我将上面的 ctags 命令应用于主文件所在目录中的 .cpp 文件时,它会使用函数参数自动完成。 我可能在这里遗漏了一些重要信息。

【问题讨论】:

标签: ctags omnicomplete


【解决方案1】:

首先,我厌倦了手动管理 ctags,为此我编写了插件 Indexer。它提供了无痛的自动标签生成,并使标签保持最新。详细请看文章:Vim: convenient code navigation for your projects,对Indexer + Vimprj的用法进行了详尽的解释。

其次,对于代码自动补全,我建议您使用clang_complete。它提供了真正的,来自真正编译器的完美C/C++/Objective-C完成,而不是通过标签的丑陋方法。

【讨论】:

    【解决方案2】:

    在您的 .vimrc 文件中,在添加标记文件之前,添加目录。因此,如果您在 $HOME/.vim/tags 目录中添加了标签,则需要添加以下行 设置标签=~/.vim/tags

    引用 OmniCppComplete 的部分(在您的 .vimrc 中)可能是这样的:

    " configure tags - add additional tags here or comment out not-used ones
        " Setting the directory...
        set tags=~/.vim/tags 
            " Adding the tag files
            set tags+=~/.vim/tags/cpp
            set tags+=~/.vim/tags/gl
            set tags+=~/.vim/tags/sdl
            set tags+=~/.vim/tags/qt4
    " set tags+=/home/yonatan/.vim/tags/standard 
    " 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
    

    【讨论】:

      最近更新 更多