如何在emacs中的整个项目中重构(在各处更改方法名称)?


15

我想重写一个开源项目的一部分。这包括重命名方法。如何在整个项目的emacs中有效地做到这一点?

我宁愿不要在每个缓冲区中使用诸如搜索和替换之类的技巧。


1
哪种语言?
phils 2015年

您是否看过ag / grep + wgrep +搜索/替换?您不会在其中单独打开缓冲区。相关:emacs.stackexchange.com/a/243/115
Kaushal Modi,

蟒蛇。我知道我的问题不是最好的,抱歉。
Unfun Cat 2015年

由于这个问题已经被推到了顶部(以防万一有人从Google偶然发现),有一个专用的Python库用于重构,称为Rope。考虑到上下文,它比其他提供的解决方案更智能。它在Emacs中的名为的软件包中实现ropemacs
jcaw

@TheUnfunCat您可以为问题添加更多上下文吗?到目前为止,它还很模糊,并且添加您想在python项目中执行的操作将清除很多事情。
DoMiNeLa10

Answers:


14

现在helm-ag,我用于查找函数名称的所有实例(在所有文件中搜索,包括子目录,而不仅仅是在打开的缓冲区中搜索),然后C-c C-e用于输入列出所有匹配项的缓冲区,然后在其中更改函数名称。完成后,按C-c C-c (helm-ag--edit-commit)将更改存储到所有打开的文件。

这听起来可能令人困惑,但请参阅https://github.com/ShingoFukuyama/helm-swoop

当您使用它时,您会哭泣着喜悦的眼泪,因为它具有如此出色的功能。


1
它的确撕了我的脸。
mihai

1
第一次执行此工作流程时,我的眼角几乎没有泪水,别开玩笑
Paul

很好的解决方案!
fraxture

6

由于您未指定语言,因此很难给出比“搜索并替换”更好的答案。

使用wgrep

如果您只想(交互式)用另一个符号替换所有实例,则wgrep是最好的选择。它使您可以交互式地编辑grep结果缓冲区。

  1. M-x package-install RET wgrep
  2. 运行M-x rgrep。它会问您几个简单的问题,然后递归搜索您所指定目录中的搜索词。
  3. 切换到结果缓冲区并执行M-x wgrep-change-to-wgrep-mode。现在可以编辑该缓冲区。您在此处所做的任何更改都会反映在文件本身中。
  4. 在此缓冲区中运行a replace-regexp或a query-replace-regexp进行重构。
  5. 使用M-x wgrep-save-all-buffers和完成编辑M-x wgrep-finish-edit


3

您可以使用counsel-rg后面的C-c C-o来获取缓冲区中所有候选项的列表。按w进行编辑wgrep。我建议iedit使用符号重命名。按C-c C-c提交。

依存关系:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.