重命名局部变量重构


10

是否有一个elisp重构工具可以重命名局部变量和函数参数?我希望能够转向:

(defun my-func (s r)
  ...
  (use s .. r))

变成:

(defun my-func (string replacement)
  ...
  (use string .. replacement))

使用知道如何查找变量引用的方法。如果不是超级卫生,我还可以。


4
多个光标可以编辑当前定义中符号的所有实例。
马拉巴巴

另请参阅iedit。
InHarmsWay,2015年


4
并非所有代码都是我们的。一些代码是旧的。
Gracjan Polak 2015年

2
我通常在区域\ bSYM \ b内进行正则表达式替换
BRPocock

Answers:


2

TL; DR: erefactor-rename-symbol-in-buffer

您正在寻找一种词法智能的重命名功能-可以通过变量的范围重命名变量,而不仅仅是愚蠢的查找和替换功能。像这样的软件包适用于多种语言,但截至编写时(2019年4月),Emacs Lisp实际上没有太多选择。这个erefactor包裹是我所知道的唯一一个。

erefactor-rename-symbol-in-buffer是您想要的功能。这是一个智能的查找和替换命令,它将替换当前作用域中的符号(包括文档字符串)。该命令的局限性在于它不会在当前缓冲区之外搜索。这很聪明,但并不完美。它将要求您确认每次发生的情况,以确保最终结果是卫生的。

另一个重命名功能是erefactor-rename-symbol-in-package。这不是以相同的方式工作-仅适用于全局符号。它依赖于您的软件包的正确设置,分组系统和前缀,并且它需要变量来匹配软件包的前缀。它不是很健壮-如果您没有按照此函数的预期进行设置,它将失败。我认为,如果要重命名全局符号,则最好使用天真的查找和替换方法,因为Elisp中的全局符号没有名称空间。词汇理解的好处微乎其微。此命令太脆弱,无法进行权衡。我建议只使用projectile-replace

Erefactor还有许多其他的Elisp命令,您可能会觉得有用。自述文件中提供了一个(不完整的)列表。

在GitHub页面上没有描述,但是erefactor在MELPA(M-x package-install RET erefactor)上可用。MELPA页面可以在这里找到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.