【发布时间】:2010-10-14 23:38:53
【问题描述】:
我主要对 C++ 和方法/类名/签名自动更改感兴趣。
【问题讨论】:
标签: c++ emacs refactoring
我主要对 C++ 和方法/类名/签名自动更改感兴趣。
【问题讨论】:
标签: c++ emacs refactoring
我一直在使用 cquery 来完成我的 C++ 完成,它使用 Microsoft LSP 进行 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
您可能应该检查所有修改过的缓冲区,并检查使用任何工具/语言重构后所做的工作。
【讨论】:
在最近的 Emacs 版本 (24) 中,Semantic 能够做到这一点。
【讨论】:
C-c , g 而不是你所拥有的。
C-c , g 后,我得到“semantic-symref-tool-grep: Searching for program: no such file or directory, sh”
构建 cscope 符号。
查找要重构的符号。
进入 cscope 窗口,将光标放在第一次出现后启动宏
你现在只需要 c-x c-e
【讨论】:
我完全同意查找和替换工作正常。然而,cedet 的一个非常好的特性是'semantic-symref-list'。
将光标放在方法上,运行此命令,您将看到一个缓冲区,其中列出了代码中引用此标记的所有位置。
您仍然可以使用查找和替换技巧,这将确认您已更改所有引用。
【讨论】:
对于介于重构工具和简单正则表达式之间的某个地方,从 Emacs 22 开始,您可以在替换文本中嵌入任意 elisp 表达式,这使您可以进行非常强大的文本操作。 Steve Yegge 不久前为此写了good article。
【讨论】:
如果您可以在 elisp 中编程,您可以从CEDET libraries 中寻找 cedet + srecode 的组合 - 它提供了完成此任务的所有工具 - 查找函数的调用者,获取签名等。但是您需要自己创建重构工具,使用这些工具
【讨论】:
我经常这样做,所以我也在焦急地等待其他回复。
我知道的唯一技巧是非常基本的。以下是我在重构代码时在 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”)。
【讨论】:
我的一个朋友正在和xrefactory 玩,并说它工作得很好。不过也不便宜。
【讨论】: