如何在搜索/替换中预览正则表达式?

时间:2012-11-20 23:38:55

标签: emacs elisp replace

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

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

2 个答案:

答案 0 :(得分:5)

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

enter image description here

答案 1 :(得分:4)

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

要查看整个缓冲区中的匹配项(而不仅仅是可见部分),可以在输入isearch regexp时键入 Ms o 以运行{{1} }。迷你缓冲区保持选中状态,因此您可以继续编辑正则表达式。

我不确定'预览'替换品。我怀疑大多数人只是做替换,如果是错误就再次撤消它? (而且我不确定它和预览功能之间有很大的不同。)

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

Emacs 24在发生的缓冲区中有一个相当有用的occur:类型 e ,您可以将匹配项编辑为文本(这样您就可以在该缓冲区中执行搜索和替换) 。编辑发生缓冲区后,键入 C-c C-c 将更改写回原始缓冲区;但直到你这样做,更改只存在于发生缓冲区本身,作为预测,如果你确认它们会发生什么。

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

编辑2:哦,好吧,我以前的编辑是骗人的。或者至少对我写的东西不够远。我认为发生编辑模式没有立即对原始缓冲区进行更改,而有时这是真的,但大多数情况下它会在发生缓冲区的同时更新原始缓冲区。我不确定为什么它不一致,但显然你不能像我建议的那样把它当作预览。