在 Emacs - 我如何杀死匹配正则表达式的缓冲区?
编辑:
我如何y
自动回答(kill-matching-buffers
询问我是否应该杀死修改后的缓冲区)?
像这样的东西?
(defun bk-kill-buffers (bfrRgxp)
(interactive)
(kill-matching-buffers bfrRgxp)
[return])
如何自动回答 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)))
对于 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)
这样我就不会意外调用它,就在我需要它的时候。
您可以使用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)))
M-x kill-matching-buffers
这将提示输入正则表达式,请查看文档以获取详细信息。