Wie schließe ich alle außer dem aktuellen Puffer in Emacs? Ähnlich wie bei der Funktion "Andere Registerkarten schließen" in modernen Webbrowsern?
91
Für einen manuelleren Ansatz können Sie alle Puffer mit auflisten C-x C-b, Puffer in der Liste zum Löschen mit markieren dund sie dann xzum Entfernen verwenden.
Ich empfehle außerdem, Listenpuffer durch den erweiterten ibuffer zu ersetzen : (global-set-key (kbd "C-x C-b") 'ibuffer)
. Das Obige funktioniert mit ibuffer, aber Sie können dies auch tun:
m(Markieren Sie den Puffer, den Sie behalten möchten.)
t(Markierungen umschalten.)
D(Alle markierten Puffer löschen.)
Ich verwende auch diesen Ausschnitt aus dem Emacs-Wiki, der diesen manuellen Ansatz weiter rationalisieren würde:
;; Ensure ibuffer opens with point at the current buffer's entry.
(defadvice ibuffer
(around ibuffer-point-to-most-recent) ()
"Open ibuffer with cursor pointed to most recent buffer name."
(let ((recent-buffer-name (buffer-name)))
ad-do-it
(ibuffer-jump-to-buffer recent-buffer-name)))
(ad-activate 'ibuffer)
ibuffer
? @philsq
? Verwenden SieC-h m
diese Option, um wie bei jedem anderen Modus Tastenkombinationen zu lernen.Aus EmacsWiki: Puffer töten :
Bearbeiten : aktualisiert mit Feedback von Gilles
quelle
buffer-file-name
und daher werden beim Aufrufremove-if-not
im obigen Beispiel Dired-Puffer beibehalten (sowie Scratch-Puffer, Term-Puffer, Hilfepuffer usw., alles, was eine Datei nicht besucht). Ich kann mir keinen einfachen Test vorstellen, der sowohl Dateipuffer als auch Dired-Puffer schließt. Sie benötigen im Grunde einen zweiten Aufruf von mapc mit einem anderen Test für Dired-Puffer.(defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (remove-if-not '(lambda (x) (or (buffer-file-name x) (eq 'dired-mode (buffer-local-value 'major-mode x)))) (buffer-list)))))
cl-remove-if-not
mitremove-if-not
Werken aber nicht tötet*helm..
PufferEs gibt keine Möglichkeit direkt in Emacs, dies zu tun.
Sie könnten dazu eine Funktion schreiben. Folgendes schließt alle Puffer:
quelle
Es gibt einen eingebauten Befehl m - x
kill-some-buffers
(ich verwende 24.3.50) In meiner Nextstep-GUI (nicht in einem Terminal ausprobiert, aber sicher, dass es ähnlich ist) können Sie dann genehmigen, welche Puffer getötet werden sollen.quelle
Es funktioniert wie erwartet.
Und nachdem ich die Antwort von @ Starkey gelesen habe, denke ich, dass dies besser sein wird:
(Pufferliste (aktueller Puffer)) gibt eine Liste zurück, die alle vorhandenen Puffer enthält, wobei der aktuelle Puffer am Anfang der Liste steht.
Dies ist meine erste Antwort auf StackOverflow. Ich hoffe es hilft :)
quelle
Ich fand diese Lösung die einfachste. Dadurch wird jeder Puffer außer dem aktuellen gelöscht. Sie müssen diesen Code zu Ihrer
.emacs
Datei hinzufügenNatürlich verwenden Sie es dann mit M-x
kill-other-buffers
RET oder fügen den folgenden Code ebenfalls in die.emacs
Datei ein und drücken dann einfachC-xC-bquelle
Ich benutze seit einigen Monaten Crux-Kill-Other-Puffer .
Aber ich möchte, dass verschmutzte Puffer auch gelöscht werden. Die Antworten von @ Euge und @ wenjun.yan lösen dieses Problem. Es werden jedoch spezielle Puffer gelöscht (z. B. * git-credential-cache - Daemon *, * Scratch *, Helmoperation usw.). Also habe ich mir diese (aktuelle) Lösung ausgedacht.
Inspiriert von Kill-Matching-Puffern . Sie können weitere hinzufügen
condition
weitere Puffernamen , um sie auszuschließen, wenn Sie möchten.Ich hoffe es hilft :)
quelle
Sie können diesen auch mögen - töten Sie alle Puffer außer dem aktuellen, * Nachrichten * und * Kratzer * (die praktisch sind, ich nenne sie "Toolkit"), schließen Sie auch redundante Fenster und leben Sie, welches Fenster welches aktuell ist Puffer.
quelle
(string-equal (buffer-name) (buffer-name x))
ist das gleiche wie(eq x (current-buffer))
, nur weniger effizient. Der Restor
kann vereinfacht werden(member (buffer-name x) '("*Messages*" "*scratch*"))
Das ist, was du willst:
Quelle: https://blasphemousbits.wordpress.com/2007/05/04/learning-emacs-part-4-buffers-windows-and-frames/
quelle