2

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

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

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

没有匹配任何东西。

Regexp Syntax Summary声明它在 GNU Emacs/Elisp 中不可用。

我怎么解决这个问题?

4

1 回答 1

2

这很容易使用Icicles

  • C-x b,它选择缓冲区,让您还可以通过与您的输入模式(可以是正则表达式)匹配的内容进行选择。它是一个多命令,这意味着您可以通过一次使用来选择任意数量的缓冲区C-x b

  • 渐进式完成允许您使用任意数量的模式(例如正则表达式),将它们组合起来以获得它们的交集(anding)。您可以减去其他模式的匹配项(补充)。

  • 您可以“标记”或“保存”选定的缓冲区,作为一组已保存的完成候选。(您甚至可以持久保存这样的集合。)

这意味着您可以轻松选择与x和匹配的所有缓冲区yx或者,如果您想要所有匹配y项,只需将匹配项添加y到您标记为匹配的缓冲区中即可x

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

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

于 2014-01-01T16:32:08.317 回答