在Python的正则表达方言(正确的术语?)中,我们有(?<=...)
,可以用来缩小搜索范围与给定模式之前的内容。
在Emacs上尝试执行一些复杂的多缓冲区搜索,例如仅搜索内容包含"x"
和/或"y"
的缓冲区,然后搜索"foo"
的匹配缓冲区的内容,列出结果,因为:
(multi-occur-in-matching-buffers "." "\\(?<=:x\\|y\\)foo")
与任何事都不匹配。
Regexp Syntax Summary表示它不可用GNU Emacs / Elisp。
我该如何解决这个问题?
答案 0 :(得分:2)
使用Icicles很容易。
C-x b
允许您通过他们的contents matching输入模式(可以是正则表达式)进行选择。它是multi-command,这意味着只需使用C-x b
即可选择任意数量的缓冲区。
Progressive completion允许您使用任意数量的模式(例如regexps),将它们组合起来以获得它们的交集(anding)。你可以减去其他模式的匹配(补充)。
您可以将所选缓冲区“标记”或“保存”为一组saved completion candidates。 (你甚至可以保存这样的一组persistently。)
这意味着您可以轻松选择与x
和y
匹配的所有缓冲区。或者,如果您希望所有匹配x
或y
,只需将符合y
的匹配项添加到您标记为匹配x
的缓冲区。
鉴于已标记或“已保存”的缓冲区集,您可以使用Icicles search或vanilla Isearch在其中搜索foo
。
另一方面,如果您要做的只是找到与foo
以及x
或y
匹配的缓冲区,那么只需使用C-x b
即可。另请注意,用于查找缓冲区的最后一个内容匹配模式(例如foo
)会自动保存为最后一个Isearch正则表达式。因此,当您访问缓冲区时,您可以立即使用C-M-s
搜索单个事件。