Was kann ich tun, um das Problem zu beheben, wenn sich Emacs nicht wie gewünscht verhält? Welche Schritte kann ich unternehmen, um das Problem selbst zu finden und zu beheben?
Oder, falls dies nicht der Fall ist, wie kann ich nützliche Informationen sammeln, damit die Leute hier (oder auf der Mailingliste oder in anderen Foren) mir bei meinem Problem helfen können?
Mein Emacs enthält viele Pakete, eine Sammlung von Snippets, die aus dem ganzen Internet kopiert und eingefügt (oder getötet und gezogen) wurden, und mein eigenes Elisp, von dem ich mich teilweise nicht mehr an das Schreiben erinnere oder es nicht mehr verstehe. Gibt es eine Möglichkeit, all diese Komplikationen zu verstehen?
emacs -Q
als ersten Schritt beantwortet / kommentiert werden müssen . Ich habe dies geschrieben, um diese Fragen mit einer allgemeinen Hilfe für neue Benutzer zu verknüpfen.Antworten:
Schritt 1: Laufen
emacs -Q
Als Erstes müssen Sie Emacs ohne Anpassungen ausführen. Wenn Sie das Problem in Vanille-Emacs reproduzieren können, kann es sich tatsächlich um einen Fehler in Emacs handeln. Das ist selten, aber wir schließen es als ersten Schritt aus.
Wenn Sie Emacs von der Kommandozeile aus mit dem
-Q
Flag startenemacs -Q
, erhalten Sie einen nackten oder 'Vanille'-Emacs, ohne dass Ihre lokalen Anpassungen geladen sind. Tritt Ihr Problem immer noch auf? Wenn ja, fahren Sie mit "Bereitstellen eines Fehlerrezepts" fort.Schritt 1b: Was ist, wenn das Problem bei einem Paket liegt?
Wenn Ihr Problem für ein bestimmtes Paket spezifisch ist, können Sie es offensichtlich nicht reproduzieren, ohne dieses Paket zu laden. Sie möchten jedoch nur das betreffende Paket laden, nicht Ihre gesamte Konfiguration. Führen Sie dazu das Programm
emacs -Q
erneut aus und bereiten Sie ein kurzes Skript wie das folgende vor:Ersetzen Sie
package1
durch den Namen des Pakets, das Sie laden möchten. Wenn Sie mehrere Pakete laden müssen, ändern Sie das Skript entsprechend:Um diesen Code zu laden, können Sie ihn in den
*scratch*
Puffer einfügen und aufrufenM-x eval-buffer
. (oder ein beliebiger Puffer, solange er keinen anderen Code enthält!)Zu diesem Zeitpunkt haben Sie die Pakete geladen und nur die Pakete, die Sie testen. Wenn Sie das Problem jetzt reproduzieren können, fahren Sie mit "Bereitstellen eines Fehlerrezepts" fort.
Schritt 2: Finden eines Fehlers in Ihrem
.emacs
Sie haben nun bestätigt, dass das Problem von einer Stelle in Ihrer Konfiguration ausgeht ("Der Anruf kommt aus dem Haus!"). Ihre Konfiguration kann viele tausend Zeilen lang sein und viele verschiedene Dateien laden. Um das Problem zu finden, führen Sie eine binäre Suche durch, wobei Sie jeweils die Hälfte des Codes auskommentieren, um die Suche einzugrenzen. 1
emacs
, ohne die-Q
Option.~/.emacs
oder.emacs.d/init.el
wenn du sie nicht findest, versuche esC-h v user-init-file
)C-space
Um die Markierung zu setzen, scrollen Sie zur Hälfte nach unten, um den Bereich zu erweiternM-;
und speichern Sie die Dateiemacs
(Ihren Test-Emacs ) und lassen Sie den ersten Emacs laufen. Test Emacs liest die reduzierte Version Ihrer Konfiguration.undo
den Kommentar mitC-/
und kommentieren Sie die Hälfte des verbleibenden Codes aus. Öffne einen neuen Test-Emacs und versuche es erneut.Wenn Ihr Problem bei einem bestimmten Paket liegt, müssen Sie den Code, der dieses Paket lädt, natürlich unkommentiert lassen.
Wenn Ihre Konfigurationsdatei andere Dateien lädt, können Sie Ihre Suche auch auf diese Dateien ausweiten.
Zu diesem Zeitpunkt haben Sie möglicherweise festgestellt, dass das Problem nur auf eine oder zwei Codezeilen zurückzuführen ist. Möglicherweise können Sie das Problem sogar selbst beheben. Wenn ja, herzlichen Glückwunsch, Sie haben etwas gelernt! Fahren Sie andernfalls mit Schritt 3 fort.
Schritt 3: Bereitstellen eines Fehlerrezepts
Zu diesem Zeitpunkt sollten Sie in der Lage sein, ein detailliertes Fehlerrezept bereitzustellen, das Sie hier veröffentlichen können. Es sollte enthalten:
M-x emacs-version
Zum Beispiel könnte ich eine Frage wie diese posten:
1 Das Bug Hunter- Paket kann Ihnen dabei helfen, Ihre Init-Datei (halb-) automatisch zu halbieren.
quelle