Wenn ich mit git an einem Projekt unter Versionskontrolle arbeite, möchte ich häufig einige Dinge in einer Shell tun, die sich auf viele meiner geöffneten Dateien auswirken, und dann jeden geöffneten Puffer zurücksetzen, um sicherzustellen, dass ich die neue Version nicht versehentlich überfalle mit was auch immer ich offen hatte. Ich weiß, magit
dass dies hier hilfreich sein kann, aber ich bin an meinen Workflow in der Shell gewöhnt und möchte ihn vorerst behalten. Stattdessen möchte ich alle geöffneten Puffer zurücksetzen und möglicherweise alle schließen, die nicht mehr vorhanden sind (z. B. aufgrund git checkout
eines Zweigs, in dem diese Datei nicht mehr vorhanden ist).
Ich habe den folgenden Elisp-Ausschnitt, den ich aus einer Google-Suche entnommen habe:
(defun revert-all-buffers ()
"Refreshes all open buffers from their respective files"
(interactive)
(let* ((list (buffer-list))
(buffer (car list)))
(while buffer
(when (and (buffer-file-name buffer)
(not (buffer-modified-p buffer)))
(set-buffer buffer)
(revert-buffer t t t))
(setq list (cdr list))
(setq buffer (car list))))
(message "Refreshed open files"))
Aber das bricht , wenn es trifft einen Fehler in einem meiner geöffneten Dateien, dh wenn zurückkehrt B1
, B2
, B3
, ..., Bn
während ein Fehler versucht , zurückzukehren B2
verhindert B3
- Bn
von rückgängig gemacht werden.
Wie kann ich emacs anweisen, Fehler zu ignorieren, die in diesem Fall auftreten? Ich möchte es nicht verwenden, global-auto-revert-mode
da jedes Zurücksetzen einige schwere Aufgaben auslöst, wie z. B. das automatische Vervollständigen und Syntaxprüfen der Datei, wobei Emacs etwa eine Sekunde lang aufgehängt werden.
quelle
B2
Puffers in Ihrem Beispiel. Ich benutze eine sehr ähnliche Funktion (höchstwahrscheinlich abgeleitet von diesem Snippet) und sie hat gut funktioniert.C-x s
"file no longer exists"
.. aha! Meine Version behebt das :) Wird es in Kürze veröffentlichen.Antworten:
Original
Hier ist meine leicht verbesserte Version des Snippets in der Frage. Wenn ich meinen VC-Verlauf überprüfe, bestätige ich, dass das folgende Snippet als das vom OP veröffentlichte Snippet begann. Also zahle ich dem Attribut.
Hier ist der Code, der für mich stabil war:
Aktualisieren
Hier ist eine verbesserte und besser dokumentierte Version von oben, nachdem Sie sich die Lösung von @ Drew angesehen haben .
Referenz
quelle
Ein weiterer:
quelle
dolist
Stil zu ersetzencar
undpop
. Lustig, wie Sie Ihre Konfiguration weiter verbessern können, wenn Sie mehr über Elisp erfahren :)Ich akzeptierte Kausals Antwort, da sie dem am nächsten kam, was ich wollte, aber ich griff auch nach einem Teil von Drews Lösung. Ich wickelte
revert-buffer
inwith-demoted-errors
und ließ den:preserve-modes
Parameter so , dass meine Syntaxprüfung würde alle meine offenen Dateien neu analysieren. Ich lasse es auch modifizierte und nicht modifizierte Dateien töten, da ich oft in Schwierigkeiten gerate, wenn ich versehentlichC-x s
nach demgit checkout
Öffnen einer modifizierten Datei gehe.Die endgültige Version ist:
quelle
Ich würde dies mit einem
condition-case
oder behebenignore-errors
(Dokumente hier ). Ich weiß nicht genau , was Sie wollen , es zu tun ; Wenn Sie etwas mit Fehlern tun möchten, wenn Siecondition-case
das Ergebnis angeben oderignore-errors
einfach fortfahren können. So etwas wie:quelle
Basierend auf der Antwort von @ Drew mit Ergänzungen:
quelle