Vim和Ctags提示和技巧

485 vim ctags vim-macros

我刚刚使用我的Vim(或者更确切地说是gVim)安装了Ctags(以帮助进行C++开发),并希望找到您最喜欢的命令,宏,快捷方式,以及随之而来的提示......

分享你最好的武器库.在Vim开发中你会推荐哪些其他Vim附加组件用于C++?

编辑您将与Ctags一起使用的其他附加组件?

EDIT2您使用哪个版本的gVim标签?这有什么不同吗?

EDIT3如何增强大型和小型项目的编程体验?

Amj*_*ith 394

Ctrl+ ]- 转到定义
Ctrl+ T- 从定义中跳回来.
Ctrl+ W Ctrl+ ]- 以水平分割打开定义

在vimrc中添加这些行
map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>

Ctrl+ \- 在新选项卡中打开定义
Alt+ ]- 以垂直拆分打开定义

生成标记后.您可以使用以下键标记和标记功能:

Ctrl+ Left MouseClick- 转到定义
Ctrl+ Right MouseClick- 从定义中跳回

  • `g C-]`非常有用.它会打开一个快速对话框,在多个定义之间选择一个. (17认同)
  • C - ] =>(控制键)和]键C - T =>(控制键)和T键仅适用于新手到ctags.感谢您的新标签 (8认同)
  • 类似地,在使用`Ctrl-w C-]分割窗口后,您可以执行`Cw T`(又名Shift-t)将该分割更改为新选项卡. (6认同)
  • `g]`也很有用.您可以将光标放在标签名称上,然后按"g]"获取匹配标签列表. (3认同)

uzi*_*uzi 176

一行总是在我的.vimrc中:

set tags=./tags;/
Run Code Online (Sandbox Code Playgroud)

这将在当前目录中查找"tags",并将树向上处理,直到找到一个.IOW,你可以在源代码树的任何地方而不仅仅是它的根目录.

  • 走向root是过分的.我建议只改为回家:标签+ =标签; $ HOME (37认同)
  • 我工作的源代码树并不总是在我的主目录中...并且$ HOME往往是远离root的两个目录...好吧,我可以再提供两个目录查找.:) (37认同)
  • 我同意w/uzi.如果我的cwd是/ home/me/programming/foo/bar/baz/bang/bam那只有8个目录查找.我想这取决于你对速度的容忍度,但查找1目录的时间与我机器上的8没有明显不同. (6认同)

nim*_*odm 45

另一个用于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
Run Code Online (Sandbox Code Playgroud)

几乎忘了......就像ctags一样 - 你必须生成(并定期更新)数据库.我使用以下脚本

select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files
Run Code Online (Sandbox Code Playgroud)

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

  • 它们相互补充.Ctags找到符号或函数的定义.Cscope可以找到所有调用函数的地方.使用它们都可以很容易地在大型源代码树中导航. (4认同)
  • @Whaledawg是的,当我按下CTRL +]我的声卡在输出中发送"clap.wav":) (2认同)

str*_*ger 27

您可以将目录添加到ctags查找中.例如,我有一个为Qt4构建的ctags索引,并在我的.vimrc中有这个:

set tags+=/usr/local/share/ctags/qt4
Run Code Online (Sandbox Code Playgroud)


Joh*_*han 23

所有以上和......

code_complete:函数参数完整,代码片段等等.

taglist.vim:源代码浏览器(支持C/C++,java,perl,python,tcl,sql,php等)

  • 我认为添加taglist.vim是最下载的vim插件会很好. (5认同)

str*_*ger 16

我使用ALT-left和ALT-right来弹出/推送/到标签栈.

" Alt-right/left to navigate forward/backward in the tags stack
map <M-Left> <C-T>
map <M-Right> <C-]>
Run Code Online (Sandbox Code Playgroud)

如果您使用hjkl移动,则可以映射<M-h><M-l>不是.

  • 我认为这比默认更直观,更清晰. (2认同)

Hei*_*ski 10

几个同名的定义

<C-w>g<C-]>在拆分中打开定义,但也:tjump可以转到定义,或者,如果有多个定义,则为您提供可供选择的定义列表.

  • 与第一个命令类似,vim有一个`:ptag`命令可以在预览窗口中打开定义. (2认同)

rai*_*mue 8

我最常使用的命令是C-],它跳转到光标下函数的定义.您可以更频繁地使用它来跟随更多呼叫.在那之后,Co将带你回到一个级别,Ci再次深入.

  • Ct返回C-]堆栈中的一个级别,而Co在移动后返回到前一个光标位置.因此,如果你C-]到一个函数然后向下翻页,Ct将立即返回,而Co将返回到函数的开头,*然后*回到调用. (16认同)

Wal*_*ter 6

我发现taglist插件是必备的.它在单独的窗口中列出了它所知道的所有标签(您已打开的文件),并且可以非常轻松地导航较大的文件.

我主要用它来进行Python开发,但它只能更好地用于C/C++.


Luc*_*tte 5

我已经在我的实验插件中封装了标签操作.

关于vim的C++开发,我已经回答了那里:我用我自己的套房,和其他几个插件.


Myk*_*yev 5

我已经调整我的vim插件两年来支持足够大的c ++项目.你可以看一下它们.

他们使用ctags和cscsope.

http://www.vim.org/scripts/script.php?script_id=1638
http://www.vim.org/scripts/script.php?script_id=2507