使用ESS/R重构R代码

6

我想知道是否可以在ESS中重构R代码。使用Emacs中的搜索和替换似乎不是一个好的替代方法。


你想要实现什么?能提供一个例子吗? - David LeBauer
1
变量重命名。这在Eclipse的statet插件中可以轻松完成,但在ess中不行。 - ggg
@Ken,只是出于好奇,为什么Emacs对你如此吸引? - VitoshKa
@KenWilliams。现在是08/2015,根据我使用Eclipse和IntelliJ进行Java/Scala开发的经验,我非常喜欢它们的代码导航和重构功能。我仍然没有看到ESS中出现这种情况。也许只是因为我没有看到。有人对此有更新吗?另一方面,由于Java项目的特性(即通常具有复杂的代码库),Eclipse/IntelliJ可以提供这些功能。 - biocyberman
1
在 ESS 中进行搜索和替换不是问题,我指的是一些“真正”的重构,例如提取变量、函数以及向现有函数添加更多参数等。目前有 Emacs-refactor,但还不支持 R - biocyberman
显示剩余2条评论
2个回答

6
ESS本身不提供任何重构工具。相反,您可以使用emacs的功能。
以下是一个示例,演示如何在项目目录中打开的所有R文件中用"zzzzzz"替换以"xxx"开头并以"yyy"结尾的所有单词。
- C-x d(进入dired模式) - % m r$(标记所有以.R或.r结尾的文件) - Q(进行dired-to-query-replace-regexp操作) - 输入 xxx.*zzz 和 zzzzzz 作为替换模式 - 接受、跳过请用 y/n
这里有一份完整的教程,介绍了如何在多个文件中进行搜索和替换,并使用ibuffer保存所有修改后的缓冲区。 点击这里查看。

1
在一个好的IDE中进行重构比文本查找和替换要复杂得多。例如,您可以将类Foo中的方法从value重命名为getValue,它会找到所有调用Foo.value的实例(正确处理Foo的子类),将它们重命名为Foo.getValue,而不会触及无关地方的value字符串。IDE需要完全理解代码才能实现这一点。 - Ken Williams

2
在Emacs中,您可以使用进行搜索替换,然后<!>将替换当前缓冲区中的每个实例。如果这不是您想要的,请解释一下Statet的作用以及您在Emacs + ESS中想要做什么。

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