How do I answer y automatically (kill-matching-buf

2019-02-16 18:57发布

问题:

In Emacs - how do I kill buffers matching regexp?

Edit:

How do I answer y automatically (kill-matching-buffers asks if I should kill a modified buffer)?

Something like this?

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

回答1:

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)))


回答2:

M-x kill-matching-buffers

This will prompt for a regex, check the documentation for details.



回答3:

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)))


回答4:

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.



标签: emacs buffer