如何用vim理解代码?

时间:2013-04-26 21:38:15

标签: vim code-analysis

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

然而,当谈到开始处理一个新的(可能是巨大的)代码库时,我觉得使用它来解决代码是不方便的,目的是了解事情的运作方式。

例如,如果我想查看使用C ++函数的位置,我可以:vimgrep在每个**/*.cpp文件中使用该函数,:copen可以在每次出现时跳转到该快捷方式窗口......那个字符串。

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

所以问题是,如何让vim成为分析代码的强大工具?

子问题:

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

3 个答案:

答案 0 :(得分:7)

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

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

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

我唯一提供cscope(+ cscope)界面的插件是CCTree,似乎仅限于C.

您可以尝试使用ctagsTagBar这些ctags定向插件但请注意,虽然ctags仅限于定义cscope也可以使用和打电话。

您应该记住,这些工具是代码索引器:您不应期望它们“理解”您的代码,或者甚至可以像IDE工具那样精确地远程执行。不过我喜欢Vim,我建议你使用一个比文本编辑器更适合这个任务的工具。

答案 1 :(得分:2)

当我从Netbeans转到Vim时,我感觉和你一样。我错过了Netbeans功能,可以在右键单击时查看任何功能定义。 免责声明:我主要使用Ruby,Javascript,有时使用PHP

我尝试过ctags,但发现它不那么准确而且不那么干净。我还尝试使用ctags与插件Tagbar和Taglist一起使用。在我看来,Tagbar有点沉重,在处理标签时需要大量的CPU和内存。 Taglist更好,但最好的用例是浏览长文件而不是标签。

最后我放弃了使用ctags。

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

但由于我的习惯已经改变,我仍然不经常使用它。我喜欢精益求精的事物,能够在适当的地方,并且要快速。

现在我感到很自在:

  1. 与Vim一起使用tmux。在需要时检查doc并在控制台中验证代码。
  2. 使用代码段插件(Neosnippet)存储常用代码和方法。 Vim中的片段管理比我见过的任何IDE都要好得多和灵活。
  3. 使用大脑存储更多,而不要接触鼠标。
  4. 希望这些帮助。

答案 2 :(得分:-1)

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