我如何使用emacs重构C ++源代码?

我主要感兴趣的是C ++和方法/类名/签名自动更改。

我做了很多,所以我也在等待其他答复。

我知道的唯一技巧是非常基本的。 在重构代码时,以下是Emacs中最好的朋友:

Mx query-replace 

这使您可以执行全局search和replace。 当您将方法和常用数据移动到其他类或名称空间时,您将会完成这一工作。

 Cx 3 

这给你一个显示与两个缓冲区并排。 然后,您可以继续在其中加载不同的文件,并使用Cx o将光标从一个光标移动到另一个文件。 这是非常基本的东西,但我提到它,因为它使下一个有多强大…

 Cx ( (type any amount of stuff and/or emacs commands here) Cx ) 

这是你如何在emacs中定义一个macros。 每当你发现自己需要一遍又一遍地做同样的事情到一堆代码(这对查询replace来说太复杂了),这是一个救星。 如果你搞砸了,你可以点击Cg来停止macros定义,然后撤销( C-_ )直到你回到你开始的地方。 调用macros的键是Cx e 。 如果你想做很多次,你可以打Esc键入数字。 例如: Esc 100 Cx e将尝试调用您的macros100次。

(注意:在Windows上,您可以通过按Esc键或按住Alt键来获得“Meta”)。

在最近的Emacs版本(24)中,语义能够做到这一点。

  1. 可能激活语义模式Mx语义模式RET
  2. Cc调出Symref缓冲区,g
  3. Cc Ce打开所有参考。
  4. R重命名。

如果你可以在elisp中编程,你可以看看CEDET库中cedet + srecode的组合 – 它提供了完成这个任务的所有工具 – 查找函数的调用者,获得签名等等。但是你需要自己创buildrefactory工具,使用这些工具

对于重构工具和简单正则expression式之间的某个地方,因为Emacs 22可以在replace文本中embedded任意的elispexpression式,这使得您可以执行令人难以置信的强大的文本操作。 Steve Yegge不久前写了一篇很好的文章 。

我的一个朋友正在玩xrefactory ,说它工作得很好。 这并不便宜。

有一个使用emacs语义模式框架的新工具:

令人敬畏的演示: https : //github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org

通过MELPA的Mx包安装https://github.com/tuhdo/semantic-refactor/获取; 。

构buildcscope符号

查找要重构的符号。

进入cscope窗口,并在第一次出现光标后启动macros

  • RET
  • 比较你的符号开始
  • 导航到您的符号的开始
  • 修改这个词
  • cx o(回到cscope)
  • n(用于下一个cscope符号)

你现在只需要cx ce

我完全同意查找和replace工作正常。 但是,cedet的一个非常好的function是“semantic-symref-list”。

将光标放在一个方法上,运行这个命令,你将看到一个缓冲区,列出你的代码中引用这个标记的所有地方。

你仍然可以使用查找和replace的技巧,这将确认你已经改变了所有的引用。