2012-06-07 11 views
6

En Emacs, ¿cómo elimino los búferes que coinciden con la expresión regular?¿Cómo contesto y automáticamente? (Kill-matching-buffers pregunta si debo matar un buffer modificado)?

Editar:

¿Cómo se contestan automáticamente y (kill-matching-buffers pregunta si debería matar a un buffer modificado)?

¿Algo como esto?

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

¿Por qué usar SO cuando google es suficiente? –

+0

No esperaba solución incorporada. – Adobe

+0

@LucaMartini: ahora con Edit es menos trivial. – Adobe

Respuesta

10

¿Cómo respondo y automáticamente (kill-matching-buffers pregunta si debo matar un buffer modificado)?

kill-matching-buffers llama kill-buffer-ask que exige yes-or-no-p. Podrías redefinir temporalmente lo último, pero por razones de seguridad no me inclino a hacerlo: matar un buffer dado podría desencadenar otra funcionalidad que necesita hacer una pregunta sí o no.

La redefinición kill-buffer-ask parece una apuesta más segura (o simplemente copia y modifica la función 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))) 
3
M-x kill-matching-buffers 

Esto hará que para una expresión regular, consulte la documentación para más detalles.

+0

El OP ya conoce esa función. Necesitan saber cómo omitir el aviso de sí/no después de llamar a ese fn. –

0

Puede usar kill-matching-buffers. A continuación código se comporta efectivamente como si kill-buffer (que no pregunta antes de matar) fue llamado en lugar de 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))) 
0

para Emacs versión> = 24, el kmb.el biblioteca del repositorio ELPA hace exactamente eso con el comando kmb-kill-matching-buffers-no-ask.

También proporciona el comando kmb-delete-process-and-kill-buffer-no-ask, que elimina el búfer en uso (sin confirmación).

Ato este último comando de la siguiente manera:

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

para que yo no lo llamo accidentalmente, justo cuando lo necesito.

Cuestiones relacionadas