使用正则表达式在 Emacs 中杀死多个缓冲区

3
我想杀掉所有以info开头的缓冲区,我输入了C-x-k info*<*>,但它显示“没有匹配项”。所以我知道我不能使用*来代表所有字符。正确的表达式应该是什么?任何帮助都将不胜感激。这是我的屏幕截图,请看一下。emacs buffer list window

我已经做了多年(实际上是几十年)的事情是:C-x C-b,然后创建一个宏来(正则表达式)搜索下一个匹配的文件并标记它以进行删除。我重复执行该宏,直到所有匹配的缓冲区都被标记,然后执行。当您移动目录并且缓冲区不再指向正确位置时,这很有效。希望Emacs在缓冲区列表中有一个“出现”函数,可以标记匹配项以进行删除/处理。 - GLRoman
2个回答

7

M-x kill-matching-buffers是一个标准命令,可以用来实现此功能。

如何自动回答y(kill-matching-buffers会询问是否要删除已修改的缓冲区)可能也会引起您的兴趣(尽管我实际上不建议一般情况下这样做)。

所以我知道我不能使用*代表所有字符。

.*将匹配零个或多个非换行符字符,但在这里您不需要使用它,因为kill-matching-buffers命令不需要在整个名称上进行匹配。^info将匹配您(所述的)要求。

我鼓励您阅读C-hig (emacs) Regexps,以了解Emacs中正则表达式的语法。


0
  1. 你的缓冲区有名称*info**info*<N>,其中N = 3..16。 C-x k *info TAB TAB会显示你想要删除的缓冲区的所有匹配项。但是C-x k只能一次删除一个。

  2. 如果你使用Icicles库,那么C-x k就是一个多命令,这意味着它可以单独或同时删除多个缓冲区。(而且Icicles允许你使用正则表达式进行模式匹配。但在这里你不需要。)

    在这种情况下,你只需执行C-x k *info TAB C-!,即可删除所有*info缓冲区。

    C-!将操作应用于与当前输入模式匹配的所有对象。


我理解你的意思,即使我使用正则表达式,也不能一次性杀死所有缓冲区,因为C-x k自然只支持逐个杀死。而Icicles库可以帮助我通过使用C-!而不是使用正则表达式来杀死多个缓冲区? - bearer1024
是的。对于一个Icicles多命令,C-!将基本命令的操作应用于每个当前的补全候选项。无论您使用何种模式来匹配补全候选项(正则表达式还是其他方式),无论这些匹配的候选项是什么,它们都会被执行相同的操作。在这种情况下,C-x k是多命令icicle-kill-buffer(当启用Icicle模式时),其操作是关闭一个候选缓冲区。C-!将关闭所有这些缓冲区。 - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接