Manchmal töte ich versehentlich einen Puffer und möchte ihn erneut öffnen, genau wie CSt, um einen geschlossenen Tab in Firefox rückgängig zu machen, aber in Emacs gibt es keinen eingebauten Befehl, der defun undo-kill-buffer
in http://www.emacswiki.org/RecentFiles :
(defun undo-kill-buffer (arg)
"Re-open the last buffer killed. With ARG, re-open the nth buffer."
(interactive "p")
(let ((recently-killed-list (copy-sequence recentf-list))
(buffer-files-list
(delq nil (mapcar (lambda (buf)
(when (buffer-file-name buf)
(expand-file-name (buffer-file-name buf)))) (buffer-list)))))
(mapc
(lambda (buf-file)
(setq recently-killed-list
(delq buf-file recently-killed-list)))
buffer-files-list)
(find-file
(if arg (nth arg recently-killed-list)
(car recently-killed-list)))))
funktioniert überhaupt nicht Wenn Sie elisp kennen, wie können Sie dieses Problem lösen?
Wenn eine Liste der geschlossenen Puffer angezeigt werden kann und ich einen von ihnen zum erneuten Öffnen auswählen kann, ist dies besser.
buffers
undo
kill-buffer
CodyChan
quelle
quelle
Antworten:
Hier ist eine andere, einfache Alternative, die nicht benötigt wird
recentf
. Wenn Sie die erste Funktion einbinden,kill-buffer-hook
wird der mit dem Puffer verknüpfte Dateiname in eine Liste verschoben. (Beachten Sie, dass ein Puffer, der eine Datei nicht besucht, endgültig gelöscht wird.) Die letztere Funktion entfernt diese Datei aus der Liste und ruft sie auf:Beachten Sie, dass
killed-file-list
es sich um eine Liste handelt. Sie können also beispielsweise eine komplexere Funktion schreiben, um diese Liste zu durchlaufen, anstatt die hier beschriebene einfache: Es liegt an Ihnen, wie viel Sie damit tun möchten.BEARBEITEN: Entschuldigung, ich habe die letzte Bestimmung in Ihrer Frage übersehen, wonach eine Liste von Dateien zur Auswahl stehen soll. Die folgende Funktion ist insofern etwas ausgefallener als die obige Version, als Sie
completing-read
hiermit angeben können, welche der getöteten Dateien Sie verwenden möchten. Wenn Sie so etwas verwendenido
, können Sie alle Dateien durchlaufen, die Sie in der aktuellen Sitzung getötet haben, wobei standardmäßig die neueste verwendet wird. Beachten Sie, dass vorausgesetzt wird, dass Sie bereits Folgendes benötigt habencl-lib
:quelle
Ich möchte Sie fragen: "Wollen Sie es wirklich töten?". In der Tat ist das Töten eines Puffers in der Emacs-Welt so verbreitet, aber sobald er getötet wurde, ist der Puffer verschwunden, und wie Ihre Frage zeigt, ist dies nicht immer wünschenswert.
Wir können jedoch einen anderen Weg wählen, sodass Sie niemals den getöteten Puffer wiederherstellen müssen - begraben Sie lieber als töten. Schauen Sie sich das Kill or Bury Alive- Paket an, das über MELPA erhältlich ist .
Aus der Beschreibung des Pakets:
quelle
Ich benutze diese Lösung aus diesem SO-Beitrag und es funktioniert gut.
Die Lösung ist elegant, aber nicht perfekt. Es speichert eine Liste der aktiven Puffer und gibt die erste Datei aus der Liste der zuletzt verwendeten Puffer zurück, die nicht zur Liste der aktiven Puffer gehört.
quelle
Sie müssen einschalten
recentf-mode
. Um das zu tun, renneM-x recentf-mode
. In diesem Fall funktioniert die Funktion möglicherweise erst, wenn Sie neue Puffer öffnen oder löschen. Ich glaube nicht, dass Sierecentf-list
ausgefüllt haben.Wenn Sie möchten, dass dies beim Starten von Emacs aktiviert wird, fügen Sie dies in Ihre Init-Datei ein:
Sie können dann das, was
defun
Sie dort gefunden haben, hineinlegen und es an einen Schlüssel binden, wenn Sie möchten.Ein Nachteil dieses Modus scheint darin zu liegen, dass der RecentF-Modus zum Verfolgen von
opened
Dateien erstellt wurde, nicht zum Verfolgen von getöteten Dateien. Wenn Sie die Funktion also zweimal ausführen, wird die zuletzt getötete Datei nicht erneut geöffnet.quelle
(recentf-mode 1)
mit dem expliziten Argument schreiben , damit jemand, der seine Init-Datei unter Emacs 23 erneut auswertet, den Modus nicht wieder ausschaltet.ErgoEmacs hat eine Funktion,
close-current-buffer
die insbesondere eine Liste kürzlich geschlossener Puffer führt:Wenn Sie diese also verwenden, können Sie den geschlossenen Puffer dieser Sitzung mit erneut öffnen
quelle
Nun, ich bin kein Emacs-Veteran, und möglicherweise ist dies erst in den letzten Versionen verfügbar geworden. Ich weiß, dass ich einige Jahre später komme, aber vielleicht kann es für andere hilfreich sein, da mich meine Suche hierher gebracht hat.
Ich bin auf Emacs v25.2.1, bin
recentf
bereits hier verfügbar und habe eine Ready-Funktion, die genau das tut, was Sie brauchen. Ich habe es in der Vergangenheit bereits in älteren Versionen aktiviert, daher habe.emacs
ich:Und das hat bei mir perfekt funktioniert. Ändern Sie natürlich die Verknüpfung für das, was Ihnen besser gefällt.
quelle