Vim和ctags - 选择合适的标签

时间:2014-04-13 15:29:55

标签: vim ctags

我在vim中使用ctags插件。我有一个恼人的问题 - 当我想跳转到成员函数定义时,一些具有重复名称的函数/方法列在我可以跳转的标签列表中。

更荒谬的是 - 这些标签中的大多数甚至都不匹配签名甚至是类!

这怎么会这么愚蠢?怎么能弄清楚我想要跳转到符号定义:使用相同的类和相同的签名。

如果没有插件可以执行此操作,我如何更改vim(最好使用脚本)在比较签名和类时选择成员?或者我是否必须深入研究vim代码呢?

我会张贴屏幕截图,以便人们了解我在说什么

screenshot

这很荒谬,它提出了所有成员名称为“run”的标签,它甚至不关心检查同一个类和签名,因为它会完全消除这个问题!

3 个答案:

答案 0 :(得分:5)

你的期望太高被误导,因为 Vim和ctags都不像IDE那样理解你的代码。

没有内置方式使Vim列表只有“相关”标签,因为:

  • 它不知道与你有什么“相关”,
  • 它会列出tags文件中出现顺序的所有匹配标记,从当前文件开始。

你可能会写一个函数来代替:tjump以及那些能够做你想要的魔法的朋友,但是我认为这不会是一件微不足道的事。

然而,many "better" alternatives to ctagsthen some.你应该尝试一下。

答案 1 :(得分:0)

这不是一个非常优雅的解决方案,但您可以安装Eclipse及其C / C ++开发工具,然后使用eclim(http://eclim.org)让Eclipse以Vim作为前端做大量工作。使用C代码对我来说效果很好。我也只将cscope用于C代码,但也可以提供“更智能”的标签识别。 ctags很强大但非常愚蠢。

答案 2 :(得分:0)

对于所有的悲观答案 - 有一个解决方案。一个Vim插件,负责处理我遇到的问题 - 一个SmartTag插件。

https://github.com/MarcWeber/SmartTag

然而,由于你需要修补vim所以你可以替换tagfunc(负责标记跳转和改变vim标记机制行为的函数),它不能开箱即用。

所以,我用这个补丁修补了最新的vim源:

Discussion board - >第四个补丁(Download patch

我修补了vim 7.4源码,编译了它,安装了它并添加了一行到.vimrc

set tagfunc = SmartTag #SmartTagFunc

就是这样! Vim不再跳到愚蠢的标签!现在它根据类别和范围进行区分。

我不知道为什么这个插件如此不受欢迎 - 这是一个生命!

Source