Debuggen von Elisp - "Dateiende während Parsing-Fehler" in init.el.

9

Nach einem langen Debugging meiner init.el-Datei sieht es so aus, als würde die erste Zeile des folgenden Elisp-Codes (custom-set-variableseinen Fehler "Dateiende beim Parsen" hervorrufen, den ich absolut nicht verstehe. Wenn ich diese Zeile kommentiere, ist alles in Ordnung. Ich habe diesen Code nicht einmal selbst eingegeben, da er automatisch in init.el aus dem customizeMenü hinzugefügt wurde .

(custom-set-variables
'(global-hl-line-mode t)
'(ido-mode (quote buffer) nil (ido))
'(menu-bar-mode nil)
 (when (display-graphic-p)
 (tool-bar-mode -1)
 (scroll-bar-mode -1))

Hier ist die vollständige Fehlermeldung:

Warnung (Initialisierung): Beim Laden von `/Users/me/.emacs.d/init.el 'ist ein Fehler aufgetreten:

Dateiende beim Parsen: /Users/me/.emacs.d/init.el

Jede Hilfe wäre dankbar! Vielen Dank

Loukios
quelle
Wenn die Datei groß ist, können Sie M-x check-parenszum betreffenden Abschnitt springen. Wenn die Datei kurz ist oder Sie einen kurzen Codeabschnitt betrachten, gibt es Methoden, um übereinstimmende Klammern hervorzuheben, um visuell zu sehen, wo eine Klammer falsch platziert ist oder fehlt. Hier ist ein Link zu meiner eigenen Variante von highlight-parentheses-mode: stackoverflow.com/a/23998965/2112489
lawlist
Bitte nicht custom-set-variablesin Ihrem eigenen Elisp-Code verwenden. Dies soll automatisch generiert werden nur . Kopieren Sie es nicht und fügen Sie es nicht ein. Suchen Sie nach gleichwertigem Code mit setqoder ähnlichem.
Stefan

Antworten:

19

Der Fehler "Dateiende beim Parsen" bedeutet, dass Sie keinen Paren geschlossen haben.

Um dies zu debuggen, sollten Sie

  1. Tun Sie dies M-x check-parens RET, um den Ort des aktuellen Fehlers zu bestimmen.
  2. Aktivieren Sie, show-paren-modeum zu sehen , welche paren Ihre aktuellen Spiele - das Ihnen mit der laufenden Code Wartung helfen.
  3. Verwenden Sie C-M-f/C-M-b , um durch ausgeglichene Eltern zu navigieren. Wenn Sie eine Fehlermeldung erhalten, befindet sich hier Ihr offenes Elternteil, das nicht geschlossen wurde.
  4. Verwenden Sie TABdiese Option, um jede Zeile einzurücken und festzustellen, ob die neue Einrückung Ihren Erwartungen entspricht.

Die andere Antwort erklärt richtig, was der tatsächliche Fehler in Ihrem Fall ist.

sds
quelle
5

Im obigen Beispiel fehlt eine schließende Klammer. Die whenAussage ist nicht Teil der custom-set-variables. Der korrigierte Code lautet wie folgt:

(custom-set-variables
  '(global-hl-line-mode t)
  '(ido-mode (quote buffer) nil (ido))
  '(menu-bar-mode nil))

(when (display-graphic-p)
  (tool-bar-mode -1)
  (scroll-bar-mode -1))
Gesetzesliste
quelle