如何在Emacs中重命名变量?Eclipse有一个不错的"重命名"重构操作,可以以作用域感知的方式重命名变量,这比做本地化的替换字符串更容易使用,特别是如果变量名是一个字符,比如e。Emacs是否内置了类似的功能?
如何在Emacs中重命名变量?Eclipse有一个不错的"重命名"重构操作,可以以作用域感知的方式重命名变量,这比做本地化的替换字符串更容易使用,特别是如果变量名是一个字符,比如e。Emacs是否内置了类似的功能?
M-s .
命令,它可以选择光标下的符号,然后你可以使用C-M-%
命令来用当前选定的符号执行替换。注意,这只是纯字符串替换,不像IDE的“重命名变量”功能。n
重命名为更有意义的名称。它会在格式字符串的\n
处停止并提示,但仍然比直接查询替换要好得多,后者会在所有的printf
中停止。 - Liamisearch-forward-symbol-at-point
(绑定到 M-s .
)。在“Symbol isearch”提示符下,按 C-h ?
获取更多帮助。我必须先删除以前绑定到 M-s 的自定义设置。 - alls0rtsIedit 是为了处理这种情况而开发的。
e
这样的单个字母变量,使用C-M-%进行query-replace-regexp
,并使用类似于\be\b
的正则表达式,以便仅适用于单个e
而不是其他单词中的e
。
编辑:刚想到另一件事。如果选择一个区域,则搜索/替换仅在该区域中工作。因此,您可以只选择要替换的范围,然后执行query-replace-regexp
。M-x traad-rename
来重命名项目中的变量。projectile-replace
。我不确定你的源代码语言是什么。因为你提到了Eclipse,所以我认为它是Java。一种选项是使用tags-query-replace
功能。使用Excuberant Ctags和-e
开关生成etgas风格的标签,并调用tags-query-replace
。
(defun replace-var (new)
"Replace the variable on the cursor"
(interactive (list
(read-string (format "Rename %s to: " (thing-at-point 'symbol)))))
(let ((old (thing-at-point 'symbol)))
(mark-defun)
(replace-string old new)))
(defun replace-old-var (old new)
"Input the old and new name"
(interactive "sFrom: \nsTo: ")
(mark-defun)
(replace-string old new))
(global-set-key (kbd "C-c r o") 'replace-old-var)
(global-set-key (kbd "C-c r v") 'replace-var)