2012-06-07 15 views
6

W Emacs - jak mogę zabić bufory pasujące do wyrażeń regularnych?Jak odpowiedzieć y automatycznie (zabicia pasujące bufory pyta, czy mam zabić zmodyfikowany bufor)?

Edit:

Jak mogę automatycznie odpowiedzieć y (kill-matching-buffers pyta, czy należy zabić zmodyfikowanego bufora)?

Coś takiego?

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

Dlaczego używać SO, gdy wystarczy google? –

+0

Nie oczekiwałem wbudowanego rozwiązania. – Adobe

+0

@ LucaMartini: teraz edycja jest mniej trywialna. – Adobe

Odpowiedz

10

Jak odpowiedzieć y automatycznie (bufory "kill-matching" pytają, czy powinienem zabić zmodyfikowany bufor)?

kill-matching-buffers dzwoni kill-buffer-ask, która dzwoni pod numer yes-or-no-p. Możesz tymczasowo przedefiniować to ostatnie, ale ze względów bezpieczeństwa jestem skłonny tego nie robić - zabicie danego bufora może spowodować inną funkcjonalność, która musi zadać pytanie "tak" lub "nie".

Przedefiniowanie kill-buffer-ask wydaje się bezpieczniejszym zakładem (lub po prostu kopiowaniem i modyfikowaniem samej funkcji 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 

ten poprosi o regex, sprawdź dokumentację dla szczegółów.

+0

OP zna już tę funkcję. Muszą wiedzieć, jak pominąć prompt tak/nie po wywołaniu tego fn. –

0

Można użyć kill-matching-buffers. Poniższy kod skutecznie zachowuje się tak, jakby kill-buffer (co nie pytać przed zabiciem) nazwano zamiast 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

Dla Emacs wersji> = 24, kmb.el biblioteka z ELPA repozytorium robi dokładnie to, że z polecenie kmb-kill-matching-buffers-no-ask.

Udostępnia także polecenie kmb-delete-process-and-kill-buffer-no-ask, , które zabija bieżący bufor (bez potwierdzenia).

wiążę tego ostatniego polecenia w następujący sposób:

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

tak, że ja nie nazywam go przypadkowo, kiedy tylko jest to potrzebne.