用生成一个标记文件后,exuberant-ctags
我可以从函数调用跳转到其声明,<C-]>
这非常方便。
我的问题是如何以其他方式做到这一点?当我的光标位于函数的定义上时,如何转到调用该函数的行?
当我查看由ctags生成的文件时,我只会看到与定义位置有关的信息,而与调用无关的信息,是否意味着我不能做到这一点,Vim是一个聪明的解决方法,或者我需要使用某些东西除了exuberant-ctags
?
用生成一个标记文件后,exuberant-ctags
我可以从函数调用跳转到其声明,<C-]>
这非常方便。
我的问题是如何以其他方式做到这一点?当我的光标位于函数的定义上时,如何转到调用该函数的行?
当我查看由ctags生成的文件时,我只会看到与定义位置有关的信息,而与调用无关的信息,是否意味着我不能做到这一点,Vim是一个聪明的解决方法,或者我需要使用某些东西除了exuberant-ctags
?
Answers:
您不能使用跳转到函数调用ctags
。对于C / C ++和Java,有cscope
,并且与Vim很好地集成了(请参阅参考资料:help cscope
)。对于其他语言,您也许可以找到生成/导出cscope
兼容数据库的工具(hscope
对于Haskell,以及starscope
对于Ruby,Go和JavaScript ,则为fi )。您还可以使用cscope
与GNU的全球数据库,通过指向cscopeprg
来gtags-cscope
。
附带说明一下:如果您不因偶尔使用Engrish(;)而感到困惑,那么您可能还想使用通用标签而不是exuberant-ctags
。后者多年未更新。前者是一个主动维护的叉子。
cscope
本身支持C / C ++,Lex和Yacc。对Java的支持微不足道。您可以global
通过gtags-cscope
实用程序从GNU获得对(旧式)PHP和JavaScript的支持。而且,正如我上面所说,还有其他索引器可以导出cscope
兼容的数据库。
cscope
本身不支持PHP或JavaScript。但是,您可以使用GNU为PHP和JavaScript文件建立索引global
,然后gtags-cscope
使用来运行生成的gtags
文件cscope
。
您可以使用Vim的grep命令搜索项目中的所有文件:
:grep! "\<<cword>\>" . -r
:copen
让我们把它放在一个keybind中:
nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>
当我探索一个陌生的大型代码库时,我发现这种一键式的项目范围内的搜索非常有价值。
\<
和\>
是表示单词开头和结尾的正则表达式序列,因此您不会得到部分匹配。(-w
grep选项可能是实现此目的的另一种方法。)
但是,这是一个非智能的搜索,因此,如果在无关的上下文中出现相同的单词,则可能会产生假阳性。
说实话,我改用了grep.vim插件的修改版。这使用起来稍微友好一些:
src/ lib/
而不是.
),并记住更改。\b
必须代替\<
和使用\>
。我对其进行配置,并排除了一些诸如此类的标准文件。
为了快速访问,我创建了两个keybinds。 F3让我编辑命令行,F4使用先前配置的命令行,而无需任何额外的击键。该机制非常丑陋,可以使用一些清理功能,但是对我来说很好。