我在vim中使用ctags插件。我有一个恼人的问题 - 当我想跳转到成员函数定义时,一些具有重复名称的函数/方法列在我可以跳转的标签列表中。
更荒谬的是 - 这些标签中的大多数甚至都不匹配签名甚至是类!
这怎么会这么愚蠢?怎么能弄清楚我想要跳转到符号定义:使用相同的类和相同的签名。
如果没有插件可以执行此操作,我如何更改vim(最好使用脚本)在比较签名和类时选择成员?或者我是否必须深入研究vim代码呢?
我会张贴屏幕截图,以便人们了解我在说什么
这很荒谬,它提出了所有成员名称为“run”的标签,它甚至不关心检查同一个类和签名,因为它会完全消除这个问题!
答案 0 :(得分:5)
你的期望太高和被误导,因为 Vim和ctags都不像IDE那样理解你的代码。
没有内置方式使Vim列表只有“相关”标签,因为:
tags
文件中出现顺序的所有匹配标记,从当前文件开始。 你可能会写一个函数来代替:tjump
以及那些能够做你想要的魔法的朋友,但是我认为这不会是一件微不足道的事。
然而,many "better" alternatives to ctags和then 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不再跳到愚蠢的标签!现在它根据类别和范围进行区分。
我不知道为什么这个插件如此不受欢迎 - 这是一个生命!