8

在 Emacs - 我如何杀死匹配正则表达式的缓冲区?

编辑

我如何y自动回答(kill-matching-buffers询问我是否应该杀死修改后的缓冲区)?

像这样的东西?

(defun bk-kill-buffers (bfrRgxp)
  (interactive)
  (kill-matching-buffers bfrRgxp)
  [return])
4

4 回答 4

14

如何自动回答 y(kill-matching-buffers 询问我是否应该杀死修改后的缓冲区)?

kill-matching-buffers呼叫kill-buffer-ask哪个呼叫yes-or-no-p。您可以暂时重新定义后者,但出于安全原因,我倾向于不这样做——杀死给定的缓冲区可能会触发其他需要询问是或否问题的功能。

重新定义kill-buffer-ask似乎是一个更安全的选择(或者只是复制和修改kill-matching-buffers函数本身)。

(require 'cl)
(defun bk-kill-buffers (regexp)
  "Kill buffers matching REGEXP without asking for confirmation."
  (interactive "sKill buffers matching this regular expression: ")
  (flet ((kill-buffer-ask (buffer) (kill-buffer buffer)))
    (kill-matching-buffers regexp)))
于 2012-06-07T11:49:04.400 回答
1

对于 Emacs 版本 >=24,ELPA存储库中的 kmb.el 库完全可以使用命令kmb-kill-matching-buffers-no-ask.

它还提供了命令kmb-delete-process-and-kill-buffer-no-ask,该命令会杀死当前缓冲区(无需确认)。

我将后一个命令绑定如下:

(global-set-key (kbd "H-M-<delete>") 'kmb-delete-process-and-kill-buffer-no-ask)

这样我就不会意外调用它,就在我需要它的时候。

于 2017-06-02T04:51:52.853 回答
0

您可以使用kill-matching-buffers. 下面的代码实际上表现得好像kill-buffer(在杀死之前不询问)被调用而不是kill-buffer-ask

(defun kill-matching-buffers-just-do-it ()
  "Kill buffers whose names match REGEXP, without asking."
  (interactive)
  (cl-letf (((symbol-function 'kill-buffer-ask) #'kill-buffer))
    (call-interactively #'kill-matching-buffers)))
于 2017-05-22T18:20:11.713 回答
-1
M-x kill-matching-buffers

这将提示输入正则表达式,请查看文档以获取详细信息。

于 2012-06-07T10:32:29.763 回答