Emacs交互式正则表达式替换

Lui*_*rzi 20 regex emacs replace

假设你有一些文字里面有这样的文字:

"foo" ... "bar" ... "file" ... "emacs"
Run Code Online (Sandbox Code Playgroud)

而你想要做的就是替换"with".我知道只需要进行以下替换即可:

" -> ''
Run Code Online (Sandbox Code Playgroud)

但是假设您想以交互方式和正则表达式进行,对于更复杂的情况,如何才能完成?

我更好地解释自己:我希望我可以通过这种方式获得一个命令或一系列命令:

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

Lui*_*rzi 21

终于我发现了!!!!! 以下是要遵循的步骤:

  • M-x isearch-forward-regexp

  • 以交互方式插入正则表达式.如果你犯了一个错误,你可以使用DEL或我并导航你的正则表达式来纠正它.

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

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

  • `Mx isearch-describe-bindings`(或`Cs Ch Ch b`)非常值得一读. (2认同)

Ian*_*non 8

  • M-x isearch-forward-regexpC-M-s.

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

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

  • 对于每次出现,按下y以替换一次,n跳过,!替换所有,RET退出或?查看更多选项.

  • 重复上一正则表达式搜索进入C-M-s,然后C-s.

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


Hig*_*ark 7

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

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