2012-06-07 8 views
6

In Emacs: come faccio a eliminare i buffer corrispondenti a regexp?Come posso rispondere automaticamente (kill-matching-buffer chiede se dovrei uccidere un buffer modificato)?

Edit:

Come posso rispondere y automaticamente (kill-matching-buffers chiede se devo uccidere un buffer modificato)?

Qualcosa di simile?

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

Perché utilizzare SO quando google è sufficiente? –

+0

Non mi aspettavo una soluzione integrata. – Adobe

+0

@LucaMartini: ora con la modifica è meno banale. – Adobe

risposta

10

Come rispondere automaticamente (i buffer di corrispondenza dell'uccisione chiedono se devo eliminare un buffer modificato)?

kill-matching-buffers chiamate kill-buffer-ask che chiama yes-or-no-p. Potresti ridefinire temporaneamente quest'ultimo, ma per ragioni di sicurezza sono incline a non farlo - uccidere un determinato buffer potrebbe innescare altre funzionalità che richiedono una domanda sì o no.

La ridefinizione di kill-buffer-ask sembra una scelta più sicura (o semplicemente copia e modifica della funzione 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 

Questo richiederà una regex, controllare la documentazione per i dettagli.

+0

L'OP conosce già questa funzione. Devono sapere come saltare il prompt sì/no dopo aver chiamato quel fn. –

0

È possibile utilizzare kill-matching-buffers. Qui di seguito il codice si comporta in modo efficace come se kill-buffer (che non chiede prima di uccidere) è stato chiamato al posto di 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

Per Emacs versione> = 24, il kmb.el libreria dal repository ELPA fa esattamente quello con il comando kmb-kill-matching-buffers-no-ask.

Fornisce anche il comando kmb-delete-process-and-kill-buffer-no-ask, che uccide il buffer corrente (senza conferma).

Mi legano il secondo comando come segue:

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

in modo che io non chiamo accidentalmente, proprio quando ne ho bisogno.