如何跳转到函数调用?


14

用生成一个标记文件后,exuberant-ctags我可以从函数调用跳转到其声明,<C-]>这非常方便。

我的问题是如何以其他方式做到这一点?当我的光标位于函数的定义上时,如何转到调用该函数的行?

当我查看由ctags生成的文件时,我只会看到与定义位置有关的信息,而与调用无关的信息,是否意味着我不能做到这一点,Vim是一个聪明的解决方法,或者我需要使用某些东西除了exuberant-ctags


Ack或Ag也可以使用,您可以很容易地找到这些命令行工具的插件包装。例如github.com/mileszs/ack.vimgithub.com/rking/ag.vim
dash-tom-bang

Answers:


11

您不能使用跳转到函数调用ctags。对于C / C ++和Java,有cscope,并且与Vim很好地集成了(请参阅参考资料:help cscope)。对于其他语言,您也许可以找到生成/导出cscope兼容数据库的工具(hscope对于Haskell,以及starscope对于Ruby,Go和JavaScript ,则为fi )。您还可以使用cscopeGNU的全球数据库,通过指向cscopeprggtags-cscope

附带说明一下:如果您不因偶尔使用Engrish(;)而感到困惑,那么您可能还想使用通用标签而不是exuberant-ctags。后者多年未更新。前者是一个主动维护的叉子。


cscope是否支持C / C ++和Java以外的其他语言?
edi9999

@ edi9999 cscope本身支持C / C ++,Lex和Yacc。对Java的支持微不足道。您可以global通过gtags-cscope实用程序从GNU获得对(旧式)PHP和JavaScript的支持。而且,正如我上面所说,还有其他索引器可以导出cscope兼容的数据库。
佐藤桂2015年

8

您不能使用ctags做到这一点。

尝试使用更强大的替代方案,例如cscope(甚至还有自己的帮助部分:):help cscopeglobal


cscope是否支持C / C ++和Java以外的其他语言?
edi9999

是的,至少是PHP和JavaScript。
romainl

1
@romainl Nope cscope本身不支持PHP或JavaScript。但是,您可以使用GNU为PHP和JavaScript文件建立索引global,然后gtags-cscope使用来运行生成的gtags文件cscope
佐藤桂2015年

@SatoKatsura,是的,cscope 支持JavaScript(显然还有CSS)。
romainl

2
@romainl您应该考虑查看cscope来源,而不是根据快速实验进行推测。 cscope有一个相当轻松的C解析器。这就是它的全部,以及它的全部。使用该解析器,它“支持”许多语言,以获取“ support”的适当值。只要它们看起来或多或少类似于C,就可以识别它们。这就是为什么不能识别fi Java类和较新的PHP结构的原因。将fi与starscope进行比较,实际上可以添加新语言。
佐藤桂2015年

8

您可以使用Vim的grep命令搜索项目中的所有文件:

:grep! "\<<cword>\>" . -r
:copen

让我们把它放在一个keybind中:

nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>

当我探索一个陌生的大型代码库时,我发现这种一键式的项目范围内的搜索非常有价值。

\<\>是表示单词开头和结尾的正则表达式序列,因此您不会得到部分匹配。(-wgrep选项可能是实现此目的的另一种方法。)

但是,这是一个非智能的搜索,因此,如果在无关的上下文中出现相同的单词,则可能会产生假阳性。


说实话,我改用了grep.vim插件修改版。这使用起来稍微友好一些:

  • 它使您可以编辑搜索模式以及grep命令行(以便您可以将目标文件夹指定为src/ lib/而不是.),并记住更改。
  • 我加入谷歌的支持csearch。这可能比grep快得多,因为它可以建立单词索引,而不是每次都扫描每个文件。值得注意的是,csearch使用的regexp标准略有不同,因此\b必须代替\<和使用\>

我对其进行配置,并排除了一些诸如此类的标准文件。

为了快速访问,我创建了两个keybindsF3让我编辑命令行,F4使用先前配置的命令行,而无需任何额外的击键。该机制非常丑陋,可以使用一些清理功能,但是对我来说很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.