用于在vim中自动完成c++库函数的ctags



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

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

在freeglut.h、glew.h等所在的目录中。然后将其复制到.virc文件中指向的目录(在my.virc中带有"set tags+=./myTag/tags")当我试图自动完成一些供过于求的函数时,我没有列出函数参数,只有函数本身完成了,但没有参数。

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

首先,我厌倦了手工管理ctag,为此我编写了插件Indexer。它提供了无痛的自动标签生成,并使标签保持最新。有关详细信息,请参阅文章:Vim:为您的项目提供方便的代码导航,它详细解释了Indexer+Vimprj的用法。

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

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

OmniCppComplete的部分(在你的.virc中)可能是这样的:

" 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/.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

相关内容

最新更新