30

Vim 中是否有任何插件或内置方法可以对 C 或 C++ 代码执行重构,例如 Eclipse 中的重构工具?

我特别热衷于来自 Eclipse 的提取方法重构工具,它将确定来自新方法的参数,并且通常还会猜测一个变量以用作返回值。

4

3 回答 3

19

我写了一个通用的重构插件。C++ 是处理的主要语言之一(因为它是我工作的主要语言)。支持方法提取。

对于 C++,插件能够(感谢 ctags)推断出大部分(但不幸的是并非总是全部——感谢 ctags...)进出提取函数的变量。我仍然需要编写一个小对话框来选择如何交换输入/输出变量(const ref、rvalue ref、copy、pointer、tuples、struct 等)(顺便说一句,欢迎帮助,因为 GUI 不是我的东西^^')

于 2011-09-07T22:50:27.537 回答
19

不,尽管 Vim 是一个很好的编辑环境,并且可以通过多种方式进行定制(代码折叠、语法着色、宏扩展等),但其中大部分都是在语法级别上完成的,而不是在语义级别上。甚至代码折叠也只是匹配对立的大括号。

要进行适当的重构,您必须具备大量关于 AST 的语义知识、在哪个作用域中声明了哪些变量等等。像 Eclipse 这样的 IDE 会为每个词法作用域中定义的变量建立一个缓存,这样它们就可以在确定要重命名什么以及在哪里重命名时快速引用它们的使用位置。

这并不是说你不能在语法上做一些事情。毕竟,一个人可以很容易地取出一段代码并将其放入一个单独的函数中。您甚至可以猜测某些参数(例如,查找变量列表,找出哪些具有本地声明,删除它们,剩下的就是您的参数。但 Eclipse 还可以做其他事情——比如确定是否有任何变量是在函数中修改,并确保它们通过返回值传回。它还检查任何抛出的异常,并将它们添加到列表中。

最终的效果是,虽然您可以在 Vim 中近似其中的一些,但您真的无法在仅 Vim 的环境中使其工作。您可以在 Eclipse 中使用类似 Vim 的键绑定,或者查看eclim。从主页:

eclim 的主要目标是将 Eclipse 功能引入 Vim 编辑器。最初的目标是在 vim 中提供 Eclipse 的 java 功能,但已经添加了对各种其他语言(c/c++、php、python、ruby、css、html、xml 等)的支持,并计划增加更多。

Eclim 与其说是一个应用程序,不如说是两个伟大项目的集成。第一个是 Vim,可以说是现有最好的文本编辑器之一。第二个,Eclipse,为各种语言的开发提供了许多很棒的工具。每个都提供了许多可以提高开发人员生产力的功能,但两者都还有一些不足之处。Vim 缺乏原生 Java 支持和 Eclipse 中可用的许多高级特性。另一方面,Eclipse 在很多事情上仍然需要使用鼠标,而且与 Vim 相比,它提供的编辑文本界面不太理想。

这就是 eclim 发挥作用的地方。eclim 没有尝试在 Vim 中编写 IDE 或在 Eclipse 中编写 Vim 编辑器,而是提供了一个 Eclipse 插件,该插件通过服务器接口公开 Eclipse 功能,以及一组通过该接口与 Eclipse 通信的 Vim 插件。

这不仅提供了一个类似 Eclipse 的环境,而且Eclipse。但是您仍然可以获得 vim 的导航和文本编辑功能。听起来这可能适合您的需求,尽管有关重构支持的文档并未表明它提供了提取方法功能。

于 2010-03-20T08:33:48.823 回答
1

在为 C++ 重构搜索 vim 的高低之后,这是我想出的最佳解决方案。

  • Visual Studio 2013 及更高版本 - 用于 C++ 开发和调试的出色 IDE,但没有足够的重构或 vim
  • 安装 vsvim 插件 - 现在,您拥有所有 vim 导航、搜索、字符串替换等功能。(不支持某些高级功能)
  • 安装 Resharp C++ - 非常适合以速度为代价进行重构。它有点笨拙,但是如果您想推断自动生成方法/变量、重命名本地/全局/方法变量或函数、在解决方案中搜索用法以及更多功能,那么它非常值得。

这是我为 C++ 开发、调试和重构找到的最佳组合。让我至少快 3 到 5 倍。希望它也能帮助你。

于 2017-04-27T02:32:49.553 回答