-1

在学习了一些教程之后,我尝试使用丰富的 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 文件时,它会使用函数参数自动完成。我可能在这里遗漏了一些重要信息。

4

2 回答 2

2

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

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

于 2012-09-12T18:50:20.707 回答
0

在您的 .vimrc 文件中,在添加标记文件之前,添加目录。因此,如果您在 $HOME/.vim/tags 目录中添加了标签,则需要添加以下行 set 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
于 2016-03-13T11:38:40.440 回答