A volte il mio elenco di buffer ha più di 10 finestre indirizzate e finisco per buffer-menuusarle per contrassegnarle manualmente e ucciderle tutte. C'è un modo più veloce per chiudere tutte le finestre aperte?
A volte il mio elenco di buffer ha più di 10 finestre indirizzate e finisco per buffer-menuusarle per contrassegnarle manualmente e ucciderle tutte. C'è un modo più veloce per chiudere tutte le finestre aperte?
Risposte:
Puoi fare quanto segue:
M-x ibuffer
* / per contrassegnare i buffer in modalità diretta.
D per eliminarli.
C-x C-bsu ibuffer.
t( dired-toggle-marks) per contrassegnare tutto (se nessuno era precedentemente contrassegnato).
dired-toggle-marksè il nome del comando diretto . La pressione tinoltre commuta tutti i segni in ibuffer, ma i buffer non diretti solitamente superano quelli dei buffer diretti, quindi la commutazione spesso non ha senso in questo contesto.
Invece di aggiungere un'altra funzione per eliminare tutti i diredbuffer, ti suggerisco di sfruttare i gruppi di filtri in ibuffer, ti consente di raggruppare il buffer in base a molte condizioni.
Ecco un esempio per impostare i gruppi di filtri:
(setq-default ibuffer-saved-filter-groups
`(("Default"
;; I create a group call Dired, which contains all buffer in dired-mode
("Dired" (mode . dired-mode))
("Temporary" (name . "\*.*\*"))
)))
Quindi C-x C-bapri la ibufferfinestra, puoi vedere qualcosa del genere:

Spostare il cursore su [ Dired ](con M-p, M-n), quindi premere dper contrassegnare come Elimina

quindi premere xper eseguire.
Preferisco così perché non ho bisogno di pensare a come associare la mia chiave alla nuova funzione e i miei buffer sono meglio organizzati.
ibufferdopo aver valutato il codice. Ho dovuto colpire / R(vincolato ibuffer-switch-to-saved-filter-groups) per ottenere i gruppi.
(ibuffer-switch-to-saved-filter-groups "Default")È possibile aggiungere questa riga di codice in ibuffer hook, il nome dei gruppi di filtri deve essere modificato in caso contrarioDefault
Hai molti buffer Dired perché li volevi tutti ad un certo punto? IOW, volevi crearli ciascuno come buffer separati?
In caso contrario, la soluzione è semplice: dire a Dired di riutilizzare un buffer Dired esistente quando si premeRET un nome di directory per aprirlo in Dired.
Ecco come farlo:
Carica libreria Dired + ( dired+.el):
(require 'dired+)
Di 'a Dired di riutilizzare i buffer di Dired:
(diredp-toggle-find-file-reuse-dir 1)
L'effetto è che quando si RETpreme (o si fa clic con il mouse) su una directory in Dired, find-alternate-fileviene utilizzato, quindi il buffer Dired originale viene sostituito (eliminato) da quello nuovo.
Puoi attivare questo comportamento in qualsiasi momento, usando C-M-R(aka C-M-S-r) in Dired.
Qualcosa del genere (scorrere un po ')?
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
Puoi anche usare helm-mini:
M-x helm-mini.*Di(parola parziale per Dired, non è necessario immetterne altri). Durante la digitazione, i buffer vengono ridotti in modo incrementale. Ora, è Diredrimasto solo il buffer. Premere M-aper contrassegnare tutto.TABper passare al menu azioni e premere Kper selezionare l'azione Kill buffer(s).RETper eseguire l'azione.La cosa buona helm-miniè che può sostituire i normali Emacs C-x b, quindi non dovrai usare due combinazioni di tasti, una per cambiare buffer e una per un gestore buffer reale. helm-miniè tutto in uno. Maggiori informazioni nella mia guida helm-mini .
helm-minipuò anche fuzzy match buffer e consentire di aprire più buffer marcando con C-SPCo M-a(sta per M ark a ll). Puoi anche restringere il buffer per contenere una determinata stringa aggiungendo @prima di un modello, ad esempio, @testsignifica che solo i buffer contengono la stringa "test".
Vorrei provare qualcosa del genere:
(require 'dash)
(defun my-kill-dired-buffers ()
(interactive)
(kill-some-buffers
(-filter (lambda (buffer)
(save-excursion
(set-buffer buffer)
(eq major-mode 'dired-mode)))
(buffer-list))))
-filterrichieda il dash.elMELPA. Probabilmente dovresti elencarlo come requisito.
Quello che potresti effettivamente cercare è un modo per ripulire automaticamente i buffer indesiderati, nel qual caso dovresti dare un'occhiata midnight.el, che fa parte di Emacs.
Ma in generale, ibufferrende molto facile operare su buffer alla rinfusa, come ha suggerito Francisco.
Se usi Icicles , puoi usarlo C-x kper uccidere tutti i buffer Dired o tutti i buffer in una determinata modalità.
Dopo aver colpito C-x k, utilizzare C-x M +per mantenere solo i buffer con una determinata modalità. Premi TABper vedere le modalità e scegli dired-mode. Quindi utilizzare C-!per uccidere tutti i buffer con quella modalità.
C-x k C-x M + dired-mode C-!