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

Łuk*_*Lew 43 c++ emacs refactoring

我主要对C++和方法/类名/签名自动更改感兴趣.

小智 29

在最近的Emacs版本(24)中,Semantic能够做到这一点.

  1. 可能激活语义模式M-x semantic-mode RET.
  2. C-c , g.启动Symref缓冲区.
  3. C-c C-e打开所有参考.
  4. 重命名R.

  • 我相信它是`Cc,g`而不是你所拥有的. (6认同)

Ale*_*Ott 25

如果你可以在elisp中编程,你可以看看来自CEDET库的cedet + srecode的组合- 它为这个任务提供所有工具 - 找到函数的调用者,获得签名等等.但你需要自己创建refactory工具,使用这些工具

  • 只看一下CEDET页面,这似乎是一个比选择的更好的答案...... (2认同)
  • (编辑添加CEDET页面链接).我不确定我是否同意贾里德,但我必须尝试一下."你需要自己创建重构工具"有点看起来有点奇怪...... (2认同)

T.E*_*.D. 13

我做了很多,所以我也在等待其他回复.

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

M-x query-replace
Run Code Online (Sandbox Code Playgroud)

这允许您进行全局搜索和替换.当您将方法和常用数据移动到其他类或名称空间时,您将会做到这一点.

C-x 3
Run Code Online (Sandbox Code Playgroud)

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

C-x (
(type any amount of stuff and/or emacs commands here)
C-x )
Run Code Online (Sandbox Code Playgroud)

这是您在emacs中定义宏的方法.任何时候你发现自己需要反复对一堆代码做同样的事情(而且它对于查询替换来说太复杂了),这是一个救星.如果你陷入困境,你可以点击C-g停止宏定义,然后撤消(C-_)直到你回到你开始的地方.调用宏的关键是C-x e.如果你想多次这样做,你可以先点击Esc并输入一个数字.例如:Esc 100 C-x e将尝试调用您的宏100次.

(注意:在Windows上,您可以通过按Esc键或按住Alt键获得"Meta".

  • 但这不是重构.这是手动完成并编辑整个程序. (28认同)
  • @ vy32 - "重构"是一个人为源代码所做的事情.工具当然有帮助,但无论工具有多大帮助,都是重构的人,而不是工具. (7认同)
  • 还有很多其他好工具.看到提到CEDET的答案.此外,我经常使用TAGS和Mx标签查询替换将所有匹配重命名为标签搜索,这可以跨越源文件.另请参阅Mx grep-find,它可以轻松找到要替换的符号的所有出现. (2认同)
  • 重构与手动编辑程序不同.重构告诉编辑"无论你在哪里看到变量FOO将其改为BAR." 这将改变变量FOO而不是方法调用FOO. (2认同)

jam*_*nvc 8

对于重构工具和简单正则表达式之间的某处,从Emacs 22开始,您可以在替换文本中嵌入任意elisp表达式,这样您就可以进行非常强大的文本操作.Steve Yegge 不久前写了一篇很好的文章.

  • 是的,但这不是重构. (6认同)

The*_*eJJ 7

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

很棒的演示:https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org

用得到它M-x package-install从MELPA或 https://github.com/tuhdo/semantic-refactor/.


Gre*_*ers 6

我的一个朋友正在玩xrefactory并说它工作得很好.虽然它并不便宜.

  • 这不是免费的,也不是免费的.:( (10认同)