2012-03-29 193 views
17

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

+1

你的意思是哪种编程语言? Java的? – Tom 2012-03-29 09:13:47

+0

现在我正在看php,但最好是任何语言。 – nnythm 2012-03-30 14:41:47

+0

就像我喜欢emacs一样,我发现缺乏这个功能真的很烦人。也许有一些新的答案呢? – Mankka 2016-11-10 07:42:59

回答

7

iedit是为这种事情制作的。

+2

iedit,而一个伟大的替代工具只能代替愚笨,所以它不适合智能替换(例如,如果变量名称只是一个字符,如提问者所说) – Tom 2012-03-29 07:59:12

+0

其实iedit与expand-region一起允许我替换有趣的词汇范围非常快。这是我用来重命名所有语言变量的首选工具。符号的长度并不相关。 – 2012-03-29 15:44:27

2

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

7

您可以使用narrowing仅显示缓冲区的一部分,搜索/替换只能在缩小的区域内运行。例如,您可以使用C-x n缩小到当前功能,或者选择您想要的区域并执行C-x n。做你的搜索/替换,然后用C-x n w加宽。对于像e这样的单个字母变量,请执行query-replace-regexpC-M-%,并使用像\be\b这样的正则表达式,因此它只能在个人e中使用,而不是在其他字中使用。

编辑:只是想到另一件事。如果您选择一个区域,搜索/替换只能在该区域中运行。所以你可以选择你想替换的范围,然后做query-replace-regexp的事情。

13

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

+2

这是Emacs的一个很好的答案。但我强烈反对任何人都不需要Java IDE提供的范围感知的重命名变量功能。 – ntc2 2017-01-26 00:04:41

+2

上下文敏感的重命名是我在IDE中最常用的功能。我绝对需要它。 – byxor 2017-03-23 17:18:22

2

在Python中,这或多或少可以用Rope重构库来实现,为此我建议在MELPA中使用emacs-traad(直接安装并且易于使用)。

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

对于比较简单的搜索&取代,我们有上述IEDIT也弹的projectile-replace

0

由于您要求提供Eclipse功能,因此Iedit不会剪切它。它不那么聪明,如果你在不同的范围上有两个同名的变量呢?它会改变他们两个。这在eclipse上不会发生! 如果您期望这种意识,您将需要语言特定的工具。可以使用tide。 使用golang,你可以使用go-doctor。 专门用Java,我找不到任何东西,但我使用meghanada,这很棒。但重构是在它的TODO列表中!您也可以使用emacs作为eclipse的eclipse客户端。