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.
C-x s
"file no longer exists"
.. aha! Meine Version behebt das :) Wird es in Kürze veröffentlichen.
B2
Puffers in Ihrem Beispiel. Ich benutze eine sehr ähnliche Funktion (höchstwahrscheinlich abgeleitet von diesem Snippet) und sie hat gut funktioniert.