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

我的问题是另一种方式呢?当我的光标位于函数的定义上时,如何转到调用该函数的行?

当我查看由ctags生成的文件时,我仅看到与位置相关的信息。定义而不是调用,是否意味着我不能做到这一点,Vim是一个聪明的解决方法,还是我需要使用exuberant-ctags以外的其他东西?

评论

Ack或Ag也可以使用,您可以轻松找到这些命令行工具的插件包装。例如。 github.com/mileszs/ack.vim和github.com/rking/ag.vim

#1 楼

您不能使用ctags跳转到函数调用。对于C / C ++和Java,有cscope,它与Vim很好地集成了(请参阅:help cscope)。对于其他语言,您也许可以找到生成/导出与cscope兼容的数据库的工具(对于Haskell,f.i。hscope;对于Ruby,Go和JavaScript,starscope)。您还可以通过将cscope指向cscopeprg来将gtags-cscope与GNU全局数据库一起使用。使用通用标签而不是exuberant-ctags。后者多年未更新。前者是主动维护的叉子。

评论


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

–edi9999
2015年10月2日,10:42

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

–佐藤桂
2015年10月2日在16:36



#2 楼

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

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

评论


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

–edi9999
2015年10月2日,10:42

是的,至少是PHP和JavaScript。

– romainl
2015年10月2日,11:20

@romainl不,cscope本身不支持PHP,也不支持JavaScript。但是,您可以使用GNU全局索引PHP和JavaScript文件,然后运行gtags-cscope以将生成的gtags文件用于cscope。

–佐藤桂
2015年10月2日在16:40



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

– romainl
2015年10月2日,18:43

@romainl您应该考虑查看cscope的来源,而不是根据快速实验进行推测。 cscope具有相当轻松的C解析器。这就是它的全部,以及它的全部。使用该解析器,它“支持”许多语言,以获取“ support”的适当值。只要它们看起来或多或少都像C,就可以识别它们。这就是为什么f.i.无法识别Java类和较新的PHP构造。比较f.i.使用starscope,实际上可以添加新语言。

–佐藤桂
2015年10月3日在20:36



#3 楼

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

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


将其放在键盘中: />
当我探索一个陌生的大型代码库时,发现整个项目一键式搜索非常有用。

\<\>是正则表达式序列,它们指示单词的开头和结尾,这样您就不会出现部分匹配。 (grep的-w选项可能是实现此目的的另一种方法。)但是,这是一个非智能的搜索,因此,如果在无关的上下文中出现相同的单词,则会产生假阳性。说真的,我改用了我自己的grep.vim插件的修改版本。这样使用起来稍微友好一些:


它可以让您编辑搜索模式以及grep命令行(以便您可以定位特定的文件夹,例如src/ lib/而不是.)并记住更改。
我增加了对Google搜索的支持。这可能比grep快得多,因为它可以建立单词索引,而不是每次都扫描每个文件。值得注意的是,csearch使用的正则表达式标准略有不同,因此必须使用\b代替\<\>。访问,我创建了两个键绑定。 F3让我编辑命令行,F4使用先前配置的命令行,而无需任何额外的击键。该机制非常难看,可以使用一些清理功能,但对我来说很好。