Wie lade ich meine .emacs-Datei am schnellsten neu, wenn ich Änderungen vornehme, damit alle betroffenen Puffer diese Änderungen übernehmen?

27

Mir ist bewusst, C-x C-ewelches ist eval-last-sexpund M-x eval-buffer, aber diese reichen nicht immer aus, um alle Änderungen aufzugreifen. Manchmal müssen Sie Puffer schließen, die sich in den Modi befinden, deren Konfiguration geändert wurde, und manchmal müssen Sie Emacs vollständig neu starten. Gibt es eine allgemeinere Möglichkeit, mit diesem Problem umzugehen? Gibt es eine Möglichkeit, Emacs neu zu starten, ohne die vorhandenen geöffneten Puffer und den interaktiven Verlauf zu verlieren?

b4hand
quelle
Wie @ b4hand ursprünglich feststellte, ist dies im Wesentlichen eine Frage, die auf einer der Fragen des Vorschlags basiert: area51.stackexchange.com/proposals/76571/emacs/76588#76588
tarsius

Antworten:

16

Nein, es ist nicht möglich, die geänderte Konfiguration neu zu laden, und Emacs verhält sich so, als wären diese Änderungen bereits vorhanden, als Emacs geladen wurde. Kurz gesagt, Emacs-Pakete haben zu viel Freiheit, als dass dies möglich wäre.

Sie erwähnen, dass einige Hauptmodi Konfigurationsänderungen nicht übernehmen. Ein wahrscheinlicher Grund dafür ist, dass beim Aktivieren des Modus einige pufferlokale Variablen basierend auf den aktuellen Werten bestimmter Optionen festgelegt werden. Ohne die erneute Aktivierung eines solchen Modus in jedem Puffer, der ihn verwendet, werden nicht alle Änderungen übernommen. Und selbst dann ist es durchaus möglich, dass einige Dinge unverändert bleiben. Die Wahrscheinlichkeit, dass dies funktioniert, ist höher, wenn die Optionen mithilfe eines custom-set-variablesFormulars angepasst werden. Dies muss jedoch explizit für jede einzelne Option implementiert werden. Und bis jetzt haben wir nur über Hauptmodi und ihre Optionen gesprochen ...

Sie könnten versuchen, einen Befehl zu implementieren, um den Hauptmodus jedes Puffers wieder zu aktivieren. Es ist jedoch unwahrscheinlich, dass alle Änderungen vollständig aktiviert werden. Schlimmer noch, dass alle von Ihnen manuell aktivierten Nebenmodi deaktiviert werden und alle anderen Zustände verloren gehen.

Aus diesem Grund würde ich sogar empfehlen, eval-bufferIhre Init-Datei überhaupt nicht zu verwenden, um so viele Änderungen wie möglich zu übernehmen. Werten Sie die geänderten Einstellungen einzeln mit aus. eval-last-sexpWenn dies nicht funktioniert, müssen Sie Emacs neu starten.

Wie der Zustand beim Schließen von Emacs erhalten bleiben kann, ist eine andere Frage, die separat gestellt werden sollte.

Tarsius
quelle
Ich habe die Neustartfrage hier gestellt: emacs.stackexchange.com/questions/639/…
b4hand
3

Manchmal müssen Sie Puffer schließen, die sich in den Modi befinden, deren Konfiguration geändert wurde

Das Aufrufen normal-modeist eine nützliche Methode, um alle Modi für einen bestimmten Puffer erneut auszulösen, wenn Sie Änderungen an diesen oder den zugeordneten Hooks vorgenommen haben.

Sie können auch revert-buffer(welche Aufrufe normal-mode) verwenden. Dies entspricht dem erneuten Laden der Datei, ohne den Rückgängig-Verlauf zu verwerfen.

(Sie können eine Datei auch mit neu laden C-xC-v, der Rückgängig-Verlauf wird jedoch gelöscht.)

In der M-x ibufferEingabe Großbuchstaben Vkehrt alle Puffer markiert, während Groß- Eund Wermöglichen es Ihnen , beliebige elisp für alle markierten Puffer zu bewerten.

Phils
quelle