我主要对C ++和方法/类名/签名自动更改感兴趣。
答案 0 :(得分:29)
在最近的Emacs版本(24)中,Semantic能够做到这一点。
答案 1 :(得分:25)
如果你可以在elisp中编程,你可以查看来自CEDET libraries的cedet + srecode的组合 - 它为这个任务提供所有工具 - 找到函数的调用者,获得签名等等。但是你需要创建refactory使用这些工具自己动手
答案 2 :(得分:13)
我做了很多,所以我也在等待其他回复。
我所知道的唯一技巧是非常基本的。在重构代码时,以下是我在Emacs中最好的朋友:
M-x query-replace
这使您可以进行全局搜索和替换。当您将方法和常用数据移动到其他类或名称空间时,您将会做到这一点。
C-x 3
这为您提供了一个并排显示两个缓冲区的显示器。然后,您可以继续在其中加载不同的文件,并使用C-x o
将光标从一个移动到另一个。这是非常基本的东西,但我提到它是因为它使下一个有多强大......
C-x (
(type any amount of stuff and/or emacs commands here)
C-x )
这是您在emacs中定义宏的方法。任何时候你发现自己需要反复对一堆代码做同样的事情(而且它对于查询替换来说太复杂了),这是一个救星。如果你陷入困境,你可以点击C-g
停止宏定义,然后撤消(C-_
),直到你回到你开始的地方。调用宏的关键是C-x e
。如果你想多次这样做,你可以点击Esc
并输入一个数字。例如:Esc 100 C-x e
将尝试100次调用您的宏。
(注意:在Windows上,您可以通过按Esc键或按住Alt键获得“Meta”。
答案 3 :(得分:8)
对于重构工具和简单正则表达式之间的某个地方,从Emacs 22开始,您可以在替换文本中嵌入任意elisp表达式,这样您就可以进行非常强大的文本操作。 Steve Yegge不久前写了good article。
答案 4 :(得分:7)
使用ccls
或cquery
,它们提供"语言服务器协议" (lsp),您可以使用:
M-x lsp-rename
替代方案:srefactor
使用emacs语义模式框架:
https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org
您可以使用MELPA中的 M-x package-install 或在 https://github.com/tuhdo/semantic-refactor/
答案 5 :(得分:6)
我的一个朋友正在玩xrefactory并说它运作得很好。它虽然不便宜。
答案 6 :(得分:4)
构建cscope符号。
查找要重构的符号。
进入cscope窗口,在将光标放在第一次出现后启动宏
你现在只需要c-x c-e
答案 7 :(得分:2)
我完全同意查找和替换工作正常。然而,cedet的一个非常好的功能是语义 - symref-list'。
将光标放在方法上,运行此命令,您将看到一个缓冲区,列出代码中引用此标记的所有位置。
您仍然可以使用查找和替换技巧,这将确认您已更改所有引用。
答案 8 :(得分:0)
我一直在使用 cquery 进行C ++完成,它使用Microsoft LSP for IDE< - >工具沟通。 cquery 服务器使用clang后端满足LSP协议的请求。
lsp-emacs 是位于emacs和 cquery 后端(cquery-emacs)之间的软件包,后端公开lsp-rename
函数。作为一个完成系统, cquery 一直非常可靠和快速,强烈推荐。
试一试,按照 cquery github上的入门指南进行操作: https://github.com/cquery-project/cquery/wiki/Emacs
一旦你有 cquery 设置:
lsp-rename
您可能应该浏览所有已修改的缓冲区,并检查使用任何工具/语言进行重构后所执行的操作。