如何进行复杂的多缓冲搜索?

时间:2014-01-01 12:11:32

标签: regex emacs elisp icicles

在Python的正则表达方言(正确的术语?)中,我们有(?<=...),可以用来缩小搜索范围与给定模式之前的内容。

在Emacs上尝试执行一些复杂的多缓冲区搜索,例如仅搜索内容包含"x"和/或"y"的缓冲区,然后搜索"foo"的匹配缓冲区的内容,列出结果,因为:

(multi-occur-in-matching-buffers "." "\\(?<=:x\\|y\\)foo")

与任何事都不匹配。

Regexp Syntax Summary表示它不可用GNU Emacs / Elisp。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

使用Icicles很容易。

    选择缓冲区的
  • C-x b允许您通过他们的contents matching输入模式(可以是正则表达式)进行选择。它是multi-command,这意味着只需使用C-x b即可选择任意数量的缓冲区。

  • Progressive completion允许您使用任意数量的模式(例如regexps),将它们组合起来以获得它们的交集(anding)。你可以减去其他模式的匹配(补充)。

  • 您可以将所选缓冲区“标记”或“保存”为一组saved completion candidates。 (你甚至可以保存这样的一组persistently。)

这意味着您可以轻松选择与xy匹配的所有缓冲区。或者,如果您希望所有匹配xy,只需将符合y的匹配项添加到您标记为匹配x的缓冲区。

鉴于已标记或“已保存”的缓冲区集,您可以使用Icicles search或vanilla Isearch在其中搜索foo

另一方面,如果您要做的只是找到与foo以及xy匹配的缓冲区,那么只需使用C-x b即可。另请注意,用于查找缓冲区的最后一个内容匹配模式(例如foo)会自动保存为最后一个Isearch正则表达式。因此,当您访问缓冲区时,您可以立即使用C-M-s搜索单个事件。