3

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

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

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

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

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

子问题:

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

3 回答 3

7

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

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

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

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

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

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

于 2013-04-26T22:26:33.337 回答
2

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

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

最后我放弃了使用 ctags。

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

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

现在我觉得很舒服:

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

希望这些帮助。

于 2013-04-27T02:21:24.607 回答
0

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

于 2014-01-07T05:54:33.430 回答