Wie kann ich alle Puffer in Emacs schließen?

2054
Schwern

Ich lasse oft Emacs (eigentlich Aquamacs) offen und ende mit vielen Puffern, die meine automatische Vervollständigung stören. Ich möchte sie alle schließen und neu anfangen können. Im Moment habe ich Emacs gekündigt und wieder geöffnet, aber das fühlt sich falsch an.

Gibt es eine Möglichkeit, alle Puffer in Emacs zu schließen?

Dies ist Emacs 24.4 / Aquamacs 3.2.

1
`(defun close-all-puffer () (interaktiv) (mapc 'kill-buffer (Pufferliste)))) - http://stackoverflow.com/a/3417472/2112489 lawlist vor 9 Jahren 0
@lawlist Danke! Sie sollten dies als Antwort hier posten, so dass es unter dem richtigen Fragetitel verfügbar ist, der von anderen gefunden werden kann. Schwern vor 9 Jahren 0
Sie können auch die "Bereinigungspufferliste" markieren, wodurch alle Puffer geschlossen werden, die seit einiger Zeit nicht verwendet wurden. Juancho vor 9 Jahren 1

2 Antworten auf die Frage

3
lawlist

Die folgende Funktion wurde von Benutzername Starkey auf stackoverflow in einer verwandten Frage geschrieben: https://stackoverflow.com/a/3417472/2112489

(defun close-all-buffers () (interactive) (mapc 'kill-buffer (buffer-list))) 

BEARBEITEN : Wie von @Drew im nachstehenden Kommentar vorgeschlagen, ist es im Allgemeinen eine gute Idee, interne Puffer mit einem führenden Leerzeichen im Namen zu behalten. Die doc-Zeichenfolge erläutert, wie diese Funktion funktioniert. Die Tastenkombination der F5Taste ist nur ein Beispiel, um die Funktion in Verbindung mit einem universellen Argument zu testen.

(defun custom-kill-buffer-fn (&optional arg) "When called with a prefix argument -- i.e., C-u -- kill all interesting buffers -- i.e., all buffers without a leading space in the buffer-name. When called without a prefix argument, kill just the current buffer -- i.e., interesting or uninteresting." (interactive "P") (cond ((and (consp arg) (equal arg '(4))) (mapc (lambda (x) (let ((name (buffer-name x))) (unless (eq ?\s (aref name 0)) (kill-buffer x)))) (buffer-list))) (t (kill-buffer (current-buffer)))))  (global-set-key [f5] 'custom-kill-buffer-fn) 
Wenn Sie das tun, können Sie Emacs genauso gut schließen und neu starten. ;-) Es ist wirklich unwahrscheinlich, dass Sie alle *** Puffer töten wollen. Dazu gehören "interne" Puffer, die Emacs so ziemlich erwartet. Sie können es schaffen, aber ich bezweifle, dass Sie es wirklich wollen. Ich würde vorschlagen, vielleicht alle Puffer zu töten, deren Namen nicht mit einem Leerzeichen beginnen, für den Anfang. Drew vor 9 Jahren 0
@Drew - Das ist eine ausgezeichnete Idee und würde mir eine Entschuldigung dafür geben, eine eigene Idee einzufügen, nämlich eine Kill-Puffer-Funktion, die ein universelles Argument akzeptiert, dh Standard-Kill den aktuellen Puffer oder alle anderen das hat keinen führenden Raum. Ich füge die neue Funktion meiner To-Do-Liste hinzu. lawlist vor 9 Jahren 0
2
Christian Herenz

Es scheint mir, dass Ihr Hauptproblem zu viele alte Puffer sind, die Sie wahrscheinlich schon längere Zeit nicht besucht haben.

In Emacs gibt es einen Befehl clean-buffer-list. Standardmäßig werden Puffer gelöscht, auf die seit 3 ​​Tagen (oder bei speziellen Puffern 1 Stunde) nicht zugegriffen wurde. Natürlich können Sie die Uhrzeit anpassen. Schauen Sie sich auch an midnight-mode, was dies zu einem bestimmten Zeitpunkt automatisch tut.

Wenn Sie nicht alle Puffer töten möchten, mit Ausnahme des aktuell verwendeten Puffers:

(defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (buffer-list))))