Emacs重命名变量

时间:2012-03-29 07:28:16

标签: emacs ide

如何在emacs中重命名变量? Eclipse有一个简洁的“重命名”重构操作,它允许您以一种范围感知方式重命名变量,这比使用本地化替换字符串更容易使用,特别是如果变量名称是像e这样的字符。 emacs是否内置了类似的功能?

10 个答案:

答案 0 :(得分:15)

新的Emacs有M-s .选择光标下的符号,然后你可以C-M-%它将使用当前选择的符号来执行替换。注意这只是简单的字符串替换,而不像IDE'重命名变量'功能。

答案 1 :(得分:9)

您可以使用narrowing仅显示缓冲区的一部分,而搜索/替换只能在缩小的区域中运行。例如,您可以使用 C-x n d 缩小到当前函数,或选择所需的区域并执行 C-x n n 。进行搜索/替换,然后使用 C-x n w 进行扩展。对于像e这样的单个字母变量,请使用 CM - %执行query-replace-regexp并使用像\be\b这样的正则表达式,这样它才能在单个{{1}上运行而不是其他词里面的那些。

编辑:想到另一件事。如果选择区域,则搜索/替换仅适用于该区域。因此,您只需选择要替换的范围,然后执行e操作。

答案 2 :(得分:8)

iedit是为了这种事情而做的。

答案 3 :(得分:5)

随着Emacs中LSP支持的出现,取决于基础语言服务器支持的内容,除了缩小/ iedit / multicursor等选项之外,实际的“重命名”重构终于变得可行。

  • emacs-lsp软件包提供了lsp-rename
  • eglot软件包提供了eglot-rename

答案 4 :(得分:3)

在Python中,这或多或少可以使用Rope重构库,我建议在MELPA中使用emacs-traad(简单易用且易于使用)。

安装完成后,我们将使用函数M-x traad-rename重命名项目中的变量。

为了更简单的搜索和替换,我们有上述的Iedit和Projectile的projectile-replace

答案 5 :(得分:2)

我不确定您的源代码语言是什么。因为你提到过Eclipse,我认为它是Java。一种选择是使用tags-query-replace功能。使用Excuberant Ctags-e开关生成etgas样式标记并调用tags-query-replace

答案 6 :(得分:1)

除了考虑已经建议的iedit之外,您还可以考虑multiple-cursors包。查看有关它的article,以及动态版的动画。

答案 7 :(得分:0)

由于你要求Eclipse功能,Iedit不会削减它。它不那么聪明,如果你在不同的范围内有两个同名的变量怎么办?它会改变它们。这不会发生在日食上! 如果你期望这种意识,你将需要特定于语言的工具。

使用打字稿,您可以使用tide。 使用golang,您可以使用go-doctor。 特别是使用Java,我找不到任何东西,但我使用meghanada,这很棒。但重构在其TODO名单上!您还可以使用emacs作为eclipse的eclipse客户端。

答案 8 :(得分:0)

对这种现代IDE功能的支持正逐渐被Emacs等中生代编辑所吸收。对于Scala,你可以通过Ensime获得这个。

http://ensime.github.io/editors/emacs/userguide/#rename

答案 9 :(得分:0)

(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)