Wie behebe ich Emacs-Probleme?

21

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?

Tyler
quelle
Ich bin mir nicht sicher, ob dies der beste Ort dafür ist, aber es gibt viele Fragen, die emacs -Qals 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.
Tyler
Ja, das ist der beste Ort dafür. Eigentlich wurde eine solche Frage vor (fast) 2 Jahren vorgeschlagen: meta.emacs.stackexchange.com/q/198/184 Danke!
T. Verron

Antworten:

28

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 -QFlag starten emacs -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 -Qerneut aus und bereiten Sie ein kurzes Skript wie das folgende vor:

(require 'package)
(setq package-load-list
      '((package1 t)))
(package-initialize)

Ersetzen Sie package1durch den Namen des Pakets, das Sie laden möchten. Wenn Sie mehrere Pakete laden müssen, ändern Sie das Skript entsprechend:

(require 'package)
(setq package-load-list
      '((package1 t)
        (package2 t)
        (package3 t)))
(package-initialize)

Um diesen Code zu laden, können Sie ihn in den *scratch*Puffer einfügen und aufrufen M-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

  1. Öffnen Sie Ihre regulären Emacs emacs, ohne die -QOption.
  2. Öffne deine Konfigurationsdatei (normalerweise ~/.emacsoder .emacs.d/init.elwenn du sie nicht findest, versuche es C-h v user-init-file)
  3. Wählen Sie die erste Hälfte der Datei aus: C-spaceUm die Markierung zu setzen, scrollen Sie zur Hälfte nach unten, um den Bereich zu erweitern
  4. Kommentieren Sie den ausgewählten Bereich aus: M-;und speichern Sie die Datei
  5. Öffnen Sie einen neuen emacs (Ihren Test-Emacs ) und lassen Sie den ersten Emacs laufen. Test Emacs liest die reduzierte Version Ihrer Konfiguration.
  6. Versuchen Sie, das Problem in Test-Emacs zu reproduzieren
  7. Wenn Sie es nicht reproduzieren können, schließen Sie Test-Emacs und in Ihrem Original-Emacs undoden Kommentar mit C-/und kommentieren Sie die Hälfte des verbleibenden Codes aus. Öffne einen neuen Test-Emacs und versuche es erneut.
  8. Wenn Sie das Problem reproduzieren können, kommentieren Sie die Hälfte des verbleibenden Codes aus und überprüfen Sie, ob das Problem weiterhin besteht.
  9. Wiederholen Sie diesen Vorgang, bis Sie den kleinsten Teil Ihrer Konfiguration gefunden haben, der zur Reproduktion des Problems erforderlich ist.

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:

  • Ihre Emacs - Version (Sie können diese mit von Emacs beziehen M-x emacs-version
  • Ihr Betriebssystem (Windows #, Mac, Linux-Distribution)
  • Die Version des Pakets, mit der Sie zu kämpfen haben, falls zutreffend
  • Die spezifischen Schritte, die zur Veranschaulichung des Problems erforderlich sind, einschließlich der erwarteten und tatsächlichen Ereignisse .

Zum Beispiel könnte ich eine Frage wie diese posten:

Ich habe ein Problem mit dem Supermodus. Wenn ich es benutze M-x sm-compile-code, wird es von meinem PayPal-Konto abgebucht.

Schritte zum Reproduzieren:

Super-Modus laden:

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • öffne eine neue Datei mit C-x C-f my-code
  • Codezeile eingeben:
10 goto 10
  • Anruf M-x sm-compile-code

Ich erwarte, dass dies den Super-Compiler aufruft und mein Programm kompiliert. Stattdessen wird im Minipuffer die Meldung "100 US-Dollar von Paypal an Super-Mode-Autor überwiesen" angezeigt.

GNU Emacs 25.1.50.3
Debian Linux
Super-Mode Version 3.1415


1 Das Bug Hunter- Paket kann Ihnen dabei helfen, Ihre Init-Datei (halb-) automatisch zu halbieren.

Tyler
quelle
Vielleicht könnten Sie den Bug Hunter erwähnen .
Omar