【问题标题】:How to understand code with vim?如何用 vim 理解代码?
【发布时间】:2014-01-07 13:54:33
【问题描述】:

Vim 是一个不错的编辑器,我将它用于许多任务。

但是,当涉及到开始处理一个新的(可能是巨大的)代码库时,我觉得使用它来绕过代码以了解事情是如何工作的。

例如,如果我想查看 C++ 函数的使用位置,我可以在每个 **/*.cpp 文件和 :copen 快​​速修复窗口中为该函数:vimgrep 跳转到每个出现... .

如果我做同样的事情,例如Eclipse(C++ 方法的调用层次结构),它不仅仅是一个字符串,而是一个定义在对象中的 C++ 方法,因此我将获得该函数(而不是同名函数)用法的精确指示在另一个类中定义)。

那么问题来了,如何让vim成为分析代码的强大工具?

子问题:

  • 是否有为此设计的 vim 插件?
  • 使用 vim 只分析代码有意义吗?可能外部工具(例如:OpenGrok)可以完成这项工作?

【问题讨论】:

    标签: vim code-analysis


    【解决方案1】:

    Vim 是一个文本编辑器。你想要的几乎与编辑文本完全正交,完全超出了 Vim 自身的能力。

    然而,Vim 非常擅长使用外部工具,例如 ctagscscope 在项目中导航。假设你创建了一个tags 文件和/或cscope.out 数据库,Vim 有一堆命令可以用来“跳转到定义”、“跳转到使用”等::ts[elect] foo<C-]>函数名等等……你可以在:h ctags:h cscope找到你需要的所有信息。

    如果您好奇,GNU GLOBAL 是另一种选择。 cscope 的另一个优点是它带有自己的 TUI,你可以在你的 shell 中使用它。

    我知道的唯一提供cscope(+ctags)接口的插件是CCTree,它似乎仅限于C。

    有很多面向ctags 的插件,例如TagBarTagList,您可以尝试但请注意,虽然ctags 仅限于定义,但cscope 也可以进行使用和调用。

    您应该记住,这些工具是代码索引器:您不应该期望它们能够“理解”您的代码,甚至不能像 IDE 工具一样精确。不过我喜欢 Vim,我建议您使用比文本编辑器更适合该任务的工具。

    【讨论】:

      【解决方案2】:

      当我从 Netbeans 切换到 Vim 时,我的感觉和你一样。我错过了通过右键单击查看任何函数定义的 Netbeans 功能。 免责声明:我主要使用 Ruby、Javascript 和 PHP

      我尝试了 ctags,但发现它不是那么准确,也不是那么干净。我还尝试了与 ctags 一起使用的插件 Tagbar 和 Taglist。我认为标签栏有点重,在处理标签时会占用大量 CPU 和内存。 taglist 更好,但最好的用例是浏览长文件而不是标签。

      最后我放弃了使用 ctags。

      后来我发现针对语言有更好的解决方案。例如,对于 Ruby,有一个插件可以显示已安装 gems(libs) 中任何函数的 ri doc,只有一个键。

      但我仍然不经常使用,因为我的习惯已经改变了。我喜欢精简的东西,在正确的地方,而且速度很快。

      现在我感觉很舒服:

      1. 将 tmux 与 Vim 一起使用。需要时在控制台中检查文档并验证代码。
      2. 使用sn-p插件(Neosn-p)存储常用的代码、方法。 Vim 中的 sn-ps 管理比我见过的任何 IDE 都要好和灵活。
      3. 用大脑存储更多,减少鼠标接触。

      希望这些帮助。

      【讨论】:

        【解决方案3】:

        有一个名为 fly.vim 的插件非常棒,可以浏览源代码。它利用 cscope 数据库并提供简单的导航机制。将它与自动标记插件相结合,在中心位置为项目生成和维护 cscope 和 ctags,您可以轻松地在不同的代码库之间切换。 我正在使用 Source Insight 浏览 Linux Kernel 源代码,当我切换到这个组合时,我没有什么可抱怨的。不过,可能需要一些时间和/或努力才能加快速度。如果您知道 ctags 和 cscope 的工作原理,那么您可能会在不到一个小时的时间内掌握它。但优点是:cscope 索引代码快,vim 使用 cscope 快,fly.vim 通过 cscope 查询并显示它快,并且格式可用。此外,它还保留跳转历史记录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-22
          • 2016-04-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多