使用Emacs进行编辑JavaScript时重构

4

你好,我正在编写大量的服务器端JavaScript代码,希望在使用emacs编辑时能够进行重构。这可行吗?谢谢!

所谓重构,比如在eclipse编辑Java时,您可以将一个名为"variableOne"的变量重构为"variable1",现在您15次编写的所有"variableOne"都变成了"variable1"。


1
如果你所说的“重构”是指“改变代码结构”,那当然可以做到。这就是编辑器的作用,创建和修改文本(而代码只是文本)。或者你具体指的是什么? - Felix Kling
你是在说自动重构吗,就像一些集成开发环境(IDE)允许的那样 - 例如,选择一个函数调用然后点击“内联”,这类操作? - nnnnnn
我的意思是,就像在Eclipse中编辑Java时,您可以将一个名为“variableOne”的变量重构为“variable1”,现在您写的其他15个“variableOne”都变成了“variable1”。 - letter Q
2
还可以参考Emacs重命名变量获取更多通用选项。虽然它们没有编辑器理解语言的优势,但在大多数情况下都能完成工作。 - phils
3个回答

3

可能是Emacs中最复杂的JavaScript重构库是Magnar Sveen的js2-refactor。它的支持的重构列表包括:

rvrename-var:重命名指针上的变量及其词法范围内的所有出现。

这听起来很像你要找的东西。它还支持许多其他非常有用的常见重构操作。

假设您使用的是Emacs 24,我建议使用MELPA存储库进行安装。如果您仍在使用Emacs 23,则必须升级或手动安装package.el才能使用MELPA。


2
如果您只是想重命名变量,您可能还想看看Tern。它与我使用的js2-refactor相比有一个项目概念,因此您可以在项目中跨多个文件重命名某个变量。它还提供其他功能,如jump-to-definitionauto-completions(这些功能非常准确)。
以下是一些重命名变量的通用选项:
1)Multiple cursors - 它有一个有用的命令mc/mark-all-like-this-dwim,可以标记当前上下文中所选文本的所有出现次数,然后同时编辑所有出现次数。
2)Wgrep - 此软件包使您可以将在grep缓冲区中进行的更改应用于相应的文件。当我必须在许多文件中替换单词时,这很有用,在这种情况下,使用rgrep在多个文件中搜索该单词。然后在结果的grep缓冲区中启用wgrep,使用multiple-cursors标记要替换的单词(也可以使用query-replace),进行更改,然后执行wgrep-save-all-buffers,所有更改都将保存!

2

你的问题似乎更多是关于变量重命名而不是通常的重构问题。有两个地方提供使用Emacs重命名代码部分信息:

  • Emacs Wiki 搜索和替换 分类页面。其中包括跨多个文件的搜索和替换(例如您的项目)。
  • Emacs手册:使用C-h r从Emacs进入手册。

    然后使用按键i在索引中查找某个内容(带补全):

    i 搜索和替换命令将带您到替换命令的相应部分。

    i 搜索和替换多个文件将带您到“使用标记表进行搜索和替换”的相关章节。

关于Emacs项目支持,请参见Emacs Wiki的项目分类页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接