20

假设你有一些文本,里面有这样的词:

"foo" ... "bar" ... "file" ... "emacs"

而你想要做的就是用''替换“。我知道它只能要求以下替换:

" -> ''

但是假设您想以交互方式并使用正则表达式进行操作,对于更复杂的情况,如何完成?

我更好地解释自己:我希望我能有一个命令,或一系列命令,以这种方式工作:

  • 编写一个类似的正则表达式"\\(.*?\\)"并以交互方式查看结果(即,当前可见的匹配在您编辑正则表达式时突出显示,并且突出显示始终在您进行更改时更新)。
  • 一旦对正则表达式感到满意,请指定一个替换,例如' '\1' '
  • 交互式替换所有匹配项
4

3 回答 3

24

终于知道了!!!!!这些是要遵循的步骤:

  • M-x isearch-forward-regexp

  • 以交互方式插入您的正则表达式。如果您犯了错误,您可以使用 DEL 或 Me 并浏览您的正则表达式来更正它。

  • 然后在你找到你想要的东西后立即按 M-% 和你喜欢的替换并开始替换。

因此,您可以以完全交互式和增量的方式搜索和替换正则表达式。

于 2012-06-21T11:21:53.577 回答
8
  • 运行M-x isearch-forward-regexpC-M-s

  • 当您开始输入正则表达式时,第一次出现将立即突出显示。尝试使用光标向后移动正则表达式将取消搜索,因此如果您犯了错误,您应该使用M-e允许编辑进行更改,然后按 Enter 继续搜索。

  • 当您对正则表达式感到满意时,按M-%,键入替换字符串(或使用向上键访问以前使用的替换字符串),然后按RET开始交互式替换。

  • 对于每次出现,按y替换一次、n跳过、!全部替换、RET退出或?查看更多选项。

  • 要重复上一次正则表达式搜索,请输入C-M-sthen C-s

完整的详细信息在手册页中。

于 2013-10-17T11:45:46.657 回答
7

该命令是否query-replace-regexp满足您的要求?在大多数 Emacs 安装中,它将绑定到C-M-%.

由于这不满足 OP 的要求,因此建议同时查看re-builder. 此功能没有记录在 Emacs 手册或帮助系统中,它只是记录在Emacs Lisp 手册中。

于 2012-06-21T08:43:48.487 回答