我刚刚在我的Vim(或者更确切地说是gVim)中安装了Ctags(以帮助c++开发),并希望找到您最喜欢的命令,宏,快捷方式,提示……

分享你最好的武器库。对于Vim开发中的c++,您还推荐哪些Vim附加组件?

编辑你还会用什么附加组件来配合Ctags?

你用什么版本的gVim和标签?有区别吗?

你如何提高你的编程经验,无论是大项目还是小项目?


当前回答

另一个对C开发有用的插件是cscope 正如Ctags允许跳转到定义一样,Cscope也可以跳转到调用函数。

如果您的~/bin/目录中有cscope,请将以下内容添加到.vimrc中,并使用g^]转到调用函数(参见:help cscope)。

if has("cscope")
    set csprg=~/bin/cscope
    set csto=0
    set cst
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
        " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif
endif

差点忘了……就像ctags一样,您必须生成(并定期更新)数据库。我使用以下脚本

select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files

其中'select_files'是另一个从Makefile中提取C文件和头文件列表的脚本。这样我只索引项目实际使用的文件。

其他回答

另一个对C开发有用的插件是cscope 正如Ctags允许跳转到定义一样,Cscope也可以跳转到调用函数。

如果您的~/bin/目录中有cscope,请将以下内容添加到.vimrc中,并使用g^]转到调用函数(参见:help cscope)。

if has("cscope")
    set csprg=~/bin/cscope
    set csto=0
    set cst
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
        " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif
endif

差点忘了……就像ctags一样,您必须生成(并定期更新)数据库。我使用以下脚本

select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files

其中'select_files'是另一个从Makefile中提取C文件和头文件列表的脚本。这样我只索引项目实际使用的文件。

我在自己的一个实验插件中封装了标签操作。

关于在vim中进行c++开发,我已经回答过了:我使用自己的套件和一些其他插件。

我在macos中使用vim,原来的ctags不能很好地工作,所以我下载了latest并配置make make install它。 我在/usr/local/bin/ctags中安装ctgas(以保留原始的ctags)

"taglist
let Tlist_Ctags_Cmd = "/usr/local/bin/ctags"
let Tlist_WinWidth = 50
map <leader>ta :TlistToggle<cr>
map <leader>bta :!/usr/local/bin/ctags -R .<CR>
set tags=tags;/
map <M-j> <C-]>
map <M-k> <C-T>

在我的。vimrc中总是有一行:

set tags=./tags;/

这将在当前目录中查找“标签”,并沿着树的根向上查找,直到找到一个。IOW,你可以在源树的任何位置而不仅仅是根结点。

同一名称的多个定义

<C-w>g<C-]>以拆分方式打开定义,但也可以执行:tjump,它可以进入定义,如果有几个定义,则为您提供一个定义列表供您选择。