Schließen Sie alle dired-Puffer

23

Manchmal hat meine Pufferliste mehr als 10 dired Fenster, und ich benutze buffer-menuam Ende, um alle manuell zu markieren und zu töten. Gibt es eine schnellere Möglichkeit, alle geöffneten Fenster zu schließen?

Nispio
quelle
Ich habe die Antwort akzeptiert, die die Frage am direktesten beantwortet. Seitdem habe
nispio

Antworten:

32

Sie könnten Folgendes tun:

M-x ibuffer

* / um Puffer im dired-Modus zu markieren.

D um sie zu löschen.

Francisco Dibar
quelle
1
Ich hatte noch nie von ibuffer gehört. Ich werde auf jeden Fall Mapping C-x C-bzu ibuffer.
Nispio
Sie können auch t( dired-toggle-marks) drücken , um alle zu markieren (falls noch keiner markiert war).
Caisah
@caisah dired-toggle-marksist der Name des Befehls dired . Durch Drücken von twerden auch alle Markierungen in ibuffer umgeschaltet, jedoch sind die nicht gerichteten Puffer in der Regel zahlreicher als die gerichteten Puffer, sodass das Umschalten in diesem Kontext häufig keinen Sinn ergibt.
Nispio
@nispio Du hast recht. Ich weiß nicht warum, aber ich dachte, dass alle Puffer dired ...
Caisah
1
Hinweis: Dies funktioniert nicht ordnungsgemäß, wenn keine dired-Puffer vorhanden sind, da das D nicht für die dired-Puffer gilt, sondern für den ersten Puffer in der Liste.
Daniel Kullmann
10

Anstatt eine weitere Funktion zum Löschen aller diredPuffer hinzuzufügen , sollten Sie die Filtergruppen in nutzen ibuffer, um den Puffer nach vielen Bedingungen zu gruppieren.

Hier ist ein Beispiel zum Festlegen von Filtergruppen:

(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 . "\*.*\*"))
                 )))

Dann C-x C-böffne das ibufferFenster und du siehst so etwas:

Beispiel 1

Bewegen Sie den Cursor auf [ Dired ](mit M-p, M-n) und drücken Sie d, um als Löschen zu markieren

example2

dann drücken, xum auszuführen.

Ich bevorzuge diesen Weg, weil ich nicht darüber nachdenken muss, wie ich meinen Schlüssel an die neue Funktion binden soll, und meine Puffer besser organisiert sind.

Rangi Lin
quelle
Filtergruppen wurden bei mir nicht angezeigt, als ich sie ibuffernach der Auswertung Ihres Codes zum ersten Mal startete . Ich musste / Rzuschlagen ibuffer-switch-to-saved-filter-groups, um die Gruppen zu bekommen.
itsjeyd
(ibuffer-switch-to-saved-filter-groups "Default")Sie können diese Codezeile in einen Puffer-Hook einfügen. Der Name der Filtergruppe sollte geändert werden, wenn dies nicht der Fall istDefault
Rangi Lin
1
Ja, das habe ich letztendlich getan.
Ich
10

Haben Sie viele Dired-Puffer, weil Sie alle an einem Punkt haben wollten ? IOW, haben Sie wollen jeden von ihnen als separate Puffer schaffen?

Andernfalls ist die Lösung einfach: Weisen Sie Dired an, einen vorhandenen Dired-Puffer wiederzuverwenden, wenn Sie auf RETeinen Verzeichnisnamen klicken, um ihn in Dired zu öffnen.

So geht's:

  1. Bibliothek laden Dired + ( dired+.el):

    (require 'dired+)
    
  2. Weisen Sie Dired an, Dired-Puffer wiederzuverwenden:

    (diredp-toggle-find-file-reuse-dir 1)
    

RETDies hat find-alternate-filezur Folge, dass beim Klicken (oder Klicken mit der Maus) auf ein Verzeichnis in Dired der ursprüngliche Dired-Puffer durch den neuen ersetzt (gelöscht) wird.

Sie können dieses Verhalten jederzeit mit C-M-R(aka C-M-S-r) in Dired umschalten.

Drew
quelle
Dies ist die Lösung, auf die ich mich jetzt geeinigt habe. Ich wollte nie 20 offene Dired-Puffer. Vielen Dank für den Vorschlag (und die Erstellung.)
Nispio
Die Links sind tot und bekommen eine 404: (
Zelphir Kaltstahl
1
@ Zelphir: Danke für das Heads-up. Sollte jetzt OK sein. (Emacs Wiki änderte seine URLs im Allgemeinen, so dass alte Beiträge wie dieser kaputte Links bekamen.)
Drew
8

So etwas (ein bisschen scrollen)?

(defun kill-dired-buffers ()
     (interactive)
     (mapc (lambda (buffer) 
           (when (eq 'dired-mode (buffer-local-value 'major-mode buffer)) 
             (kill-buffer buffer))) 
         (buffer-list)))
nicael
quelle
5

Sie können auch verwenden helm-mini:

  • Rennen M-x helm-mini.
  • Geben Sie in die Eingabeaufforderung Folgendes ein: *Di(Teilwort für Dired, keine weitere Eingabe erforderlich). Während der Eingabe werden die Puffer schrittweise verkleinert. Jetzt ist nur noch DiredPuffer übrig. Drücken Sie M-a, um alle zu markieren.
  • Drücken Sie TABzum Umschalten auf Aktionsmenü und drücken Sie KAktion auszuwählen Kill buffer(s).
  • Drücken Sie RET, um die Aktion auszuführen.

Das Gute daran helm-miniist, dass es normale Emacs ersetzen kann C-x b, sodass Sie nicht zwei Tastenzuordnungen verwenden müssen, eine zum Wechseln des Puffers und eine für einen tatsächlichen Puffermanager. helm-miniist alles in einem. Lesen Sie mehr in meinem Helm-Mini-Guide .

helm-minikann auch Fuzzy-Match-Buffer und das Öffnen mehrerer Buffer durch Markieren mit C-SPCoder M-a(stehen für M ark a ll). Sie können auch eingrenzen, um bestimmte Zeichenfolgen zu puffern, indem Sie sie @vor einem Muster anhängen. Dies @testbedeutet beispielsweise, dass Sie nur Puffer auswählen, die die Zeichenfolge "test" enthalten.

Tu Do
quelle
1

Ich würde so etwas versuchen:

(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))))
Shosti
quelle
1
Ich glaube -filtererfordert dash.elvon MELPA. Sie sollten dies wahrscheinlich als Voraussetzung angeben.
Vamsi
1

Was Sie tatsächlich suchen, ist eine Möglichkeit, unerwünschte Puffer automatisch zu bereinigen. In diesem Fall sollten Sie überprüfen midnight.el, welcher Teil von Emacs ist.

Im Allgemeinen ibufferist es jedoch sehr einfach, Puffer in großen Mengen zu bearbeiten, wie Francisco vorgeschlagen hat.

sanityinc
quelle
1

Wenn Sie Eiszapfen verwenden , können Sie damit C-x kalle Dired-Puffer - oder alle Puffer in einem bestimmten Modus - töten.

C-x kVerwenden Sie C-x M +nach dem Schlagen , um nur die Puffer mit einem bestimmten Modus beizubehalten. Drücken Sie TAB, um die Modi anzuzeigen, und wählen Sie dired-mode. Verwenden Sie dann C-!, um alle Puffer in diesem Modus zu löschen.

C-x k C-x M + dired-mode C-!
Drew
quelle