In Emacs - how do I kill buffers matching regexp?
Edit:
How do I answer y
automatically (kill-matching-buffers
ask
M-x kill-matching-buffers
This will prompt for a regex, check the documentation for details.
You can use kill-matching-buffers
. Below code effectively behaves as if kill-buffer
(which does not ask before killing) was called instead of 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)))
For Emacs version >=24, the kmb.el library from ELPA repository
does exactly that with the command kmb-kill-matching-buffers-no-ask
.
It also provides the command kmb-delete-process-and-kill-buffer-no-ask
,
which kills the current buffer (without confirmation).
I bind the latter command as follows:
(global-set-key (kbd "H-M-<delete>") 'kmb-delete-process-and-kill-buffer-no-ask)
so that i don't call it accidentaly, just when i need it.
How do I answer y automatically (kill-matching-buffers asks if I should kill a modified buffer)?
kill-matching-buffers
calls kill-buffer-ask
which calls yes-or-no-p
. You could temporarily redefine the latter, but for safety reasons I am inclined not to do that -- killing a given buffer could trigger other functionality which needs to ask a yes-or-no question.
Redefining kill-buffer-ask
seems a safer bet (or simply copying and modifying the kill-matching-buffers
function itself).
(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)))