Emacs重命名变量

nny*_*thm 23 ide emacs

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

dol*_*nko 19

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

  • 上下文相关的重命名是我在IDE中最常用的功能.我绝对需要它. (4认同)
  • 对于Emacs来说,这是一个很好的答案.但是我强烈不同意Java IDE提供的需要范围感知重命名变量功能的人. (2认同)
  • 永远不要只列出键绑定。包括函数名称。 (2认同)

sco*_*zer 10

您可以使用缩小仅显示缓冲区的一部分,搜索/替换将仅在缩小的区域中运行.例如,您可以使用C-x n d缩小到当前函数,或选择您想要和执行的区域C-x n n.进行搜索/替换,然后再进行扩展C-x n w.对于单个字母变量来说e,query-replace-regexp使用C-M-%和使用正则表达式一样\be\b,它只适用于个人e而不是其他单词.

编辑:想到另一件事.如果选择区域,则搜索/替换仅适用于该区域.所以你可以选择要替换的范围,然后再做query-replace-regexp.


Mor*_*kus 8

iedit就是为了这种事而做的.

  • iedit虽然一个伟大的替换工具只是哑巴替换,所以它不适合智能替换(例如,如果变量名称只是一个字母,如提问者所说) (3认同)

Ehv*_*nce 5

在 Python 中,这在 Rope 重构库中或多或少是可行的,为此我建议在 MELPA 中使用emacs- traad(安装简单且易于使用)。

安装后,我们有了M-x traad-rename重命名项目中变量的功能。

为了更简单的搜索和替换,我们有前面提到的 Iedit 和 Projectile 的projectile-replace.


Lau*_*nis 5

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