【问题标题】:Vim and ctags - select appropriate tagVim 和 ctags - 选择合适的标签
【发布时间】:2017-09-12 16:01:01
【问题描述】:

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

更可笑的是——这些标签中的大多数甚至与签名甚至类都不匹配!

怎么会这么傻?它怎么会不知道我想跳转到符号定义:具有相同的类和相同的签名。

如果没有插件可以做到这一点,我如何在比较签名和类时更改 vim(最好使用脚本)选择成员?还是我必须深入研究 vim 代码本身才能做到这一点?

我会放一张截图,这样人们就会明白我在说什么

太可笑了,它把所有成员名字为“run”的标签都贴上了,而且它甚至不关心检查相同的类和签名,因为它会完全消除这个问题!

【问题讨论】:

    标签: vim ctags


    【解决方案1】:

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

    no 内置方法可以让 Vim 仅列出“相关”标签,因为:

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

    不过,您可能可以编写一个函数来代替 :tjump 和朋友使用,它们可以实现您所要求的魔法,但我认为这不是一件容易的事。

    不过,有many "better" alternatives to ctagsthen some. 你应该试试看。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        对于所有悲观的答案 - 有一个解决方案。一个 Vim 插件,可以解决我遇到的确切问题 - SmartTag 插件。

        https://github.com/MarcWeber/SmartTag

        但是,它不能开箱即用,因为您需要修补 vim 以便您可以替换 tagfunc(负责标签跳转和改变 vim 标签机制行为的函数)

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

        Discussion board -> 补丁号四(Download patch

        我已经修补了 vim 7.4 源代码,编译它,安装它并在 .vimrc 中添加了一行

        设置 tagfunc=SmartTag#SmartTagFunc

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

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

        Source

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-03
          • 2011-05-27
          相关资源
          最近更新 更多