在Vim中重构C / C ++(例如Eclipse中的方法提取)

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

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

不,尽管Vim是一个很好的编辑环境,并且可以通过很多方式进行自定义(代码折叠,语法着色,宏扩展等),但大多数都是在语法级别而不是语义级别上完成的。 即使代码折叠也只是匹配相反的括号。

要进行适当的重构,您必须具有很多关于AST的语义知识,在哪个范围内声明哪些变量,等等。 像Eclipse这样的IDE构建了每个词法范围中定义的变量的缓存,以便他们可以快速返回到确定重命名的位置和位置。

这并不是说你不能在句法上做一些事情; 毕竟,人们可以拿出一段代码并将其放入一个单独的function中。 您甚至可以猜测一些参数(例如,查找变量列表,找出哪些变量具有局部声明,删除它们以及剩下的是您的参数。但Eclipse也会做其他事情 – 比如确定是否有任何变量在函数中修改,并确保它们被返回值传回。它还检查任何抛出的exception,并将它们添加到列表中。

实际效果是,虽然你可能能够在Vim中对其中的一些进行近似,但你真的无法在仅限Vim的环境中使用它。 您可以在Eclipse中使用类似Vim的键绑定,或者查看eclim 。 从主页:

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

Eclim不是一个应用程序,而是更多的两个伟大项目的集成。 第一个,Vim,可以说是现存最好的文本编辑之一。 第二个是Eclipse,它提供了许多用于各种语言开发的出色工具。 每个都提供了许多可以提高开发人员生产力的function,但两者仍然有待改进。 Vim缺乏本机Java支持和Eclipse中提供的许多高级function。 另一方面,Eclipse仍需要使用鼠标进行许多操作,与Vim相比,它提供了一个不太理想的编辑文本界面。

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

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

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

对于C ++,该插件能够(感谢ctags)推断出进出提取函数的变量的大部分(但不幸的是并非总是全部 – 多亏了ctags …)。 我仍然需要编写一个小对话框来选择输入/输出变量的交换方式(const ref,rvalue ref,copy,pointer,tuples,struct等) (BTW,欢迎使用,因为GUI不是我的事^^’)

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

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

这是我在C ++开发,调试和重构中发现的最佳组合。 让我至少快3倍 – 5倍。 希望它也能帮到你。