4

是否有一个包(或自由浮动的 elisp)可以动态预览 Emacs 中正则表达式搜索/替换的匹配和效果?我相信一些专门的模式可以提供类似的东西,但我一直无法找到通用的解决方案。

我应该注意,我熟悉 regexp-builder,但它只预览匹配项并要求我在缓冲区之间复制字符串——这不是一个完美的解决方案。

4

2 回答 2

6

visual-regexp允许内联预览替换:

在此处输入图像描述

于 2016-06-29T21:36:29.510 回答
4

“预览匹配”的一种方法是通过isearch-forward-regexp( C-M-s) 输入正则表达式,它会在您编写正则表达式时以交互方式突出显示匹配项,然后调用isearch-query-replace-regexpwith C-M-%(即正常query-replace-regexp绑定)。

要查看整个缓冲区的匹配项(而不仅仅是可见部分),您可以M-so在输入 isearch 正则表达式以运行时键入isearch-occur。minibuffer 保持选中状态,因此您可以继续编辑正则表达式。

我不确定“预览”替代品。我怀疑大多数人只是简单地进行替换,如果是错误的再次撤消它?(我不确定这与预览功能之间是否有很大不同)。

编辑: 我猜occur缓冲区确实有助于各种“替换预览”选项。它仅限于发生缓冲区,但也许这已经足够了。

Emacs 24 有一个相当有用的功能occur-edit-modee输入发生缓冲区,您可以将匹配项编辑为文本(因此您可以在该缓冲区中执行搜索和替换)。编辑发生缓冲区后,键入C-cC-c将更改写回原始缓冲区;但您这样做之前,更改仅存在于发生缓冲区本身中,作为您确认它们时会发生什么的预览。

按原样,这并没有像你想要的那样顺利地与这个答案的原始部分结合起来,但它似乎确实值得一提。

编辑2:哦,好吧,我之前的编辑是个谎言。或者至少对于我所写的内容不够一致。我认为发生编辑模式不会立即对原始缓冲区进行更改,有时确实如此,但大多数情况下它会与发生缓冲区同时更新原始缓冲区。我不确定为什么它不一致,但显然你不能像我建议的那样将它视为预览。

于 2012-11-21T02:13:52.927 回答