我主要对C++和方法/类名称/签名的自动更改感兴趣。
在最近的Emacs版本(24)中,Semantic可以做到这一点。
我经常这样做,所以我也非常期待其他人的回复。
我知道的唯一诀窍都很基本。在重构代码时,以下是我的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中定义宏的方法。每当你需要对一堆代码执行相同的操作(而且这个操作太复杂了,无法使用query-replace来完成),这就是一个救命稻草。如果出现错误,你可以按下C-g
来停止宏定义,然后撤销(C-_
),直到回到开始的位置。调用该宏的键是C-x e
。如果你想多次执行它,可以先按Esc
再输入数字。例如:Esc 100 C-x e
将尝试调用你的宏100次。自从Emacs 22版本以来,您可以在替换文本中嵌入任意elisp表达式,这使得您能够进行非常强大的文本操作,介于重构工具和简单正则表达式之间。 Steve Yegge曾经写过一个很好的文章(在此)。
我的一个朋友在使用xrefactory,并表示它的效果很好。但它的价格不便宜。
生成cscope符号。
查找要重构的符号。
进入cscope窗口,在第一次出现光标后开始宏录制
现在只需执行c-x c-e即可。
我完全同意查找和替换的功能是有效的。然而,CEDT还有一个非常好用的功能——“semantic-symref-list”。只需将光标放在方法上,运行此命令,您将会看到一个缓冲区,其中列出了代码中引用此标签的所有位置。
您仍然可以使用查找和替换技巧,并确认您已更改所有引用。
lsp-rename
函数。作为一个自动补全系统,顺便说一下,cquery非常可靠和快速,强烈推荐。lsp-rename
C-c , g
,而不是你所得到的内容。 - lfxgrooveC-c , g
后会出现 "semantic-symref-tool-grep: Searching for program: no such file or directory, sh" 的错误提示。 - Jakub Narębski