2013-02-25 8 views
7

Quando lavoro con il mio file init di .emacs, a volte commetto un errore. Quando eseguo il eval-buffer, visualizzo il messaggio "fine del file durante l'analisi".Come individuare l'errore in un file Lisp in Emacs?

Come posso chiedere a Emacs di indicarmi l'esatta posizione dell'errore?

+5

Per * questo * tipo di errore, la posizione esatta è la fine del file, ma non è molto utile :) Prova a reindirizzare il file e vedere dove il rientro diventa errato. –

+2

Anton ha ragione, quelli sono davvero dolorosi, ma di solito li puoi evitare usando una buona modalità di editing e chiamando "indent-region' sul buffer. Puoi vedere dove le cose vanno male quando il rientro non è come previsto. – pmr

+0

Questo errore indica che ci sono parentesi errate. – Barmar

risposta

4

Questi errori sono molto difficili da individuare.

Meglio cercare di evitare una parentesi errata. Ci sono diverse built-in e 3rd-party modalità secondarie che ti aiutano in questo:

  • electric-pair-mode: Inserire corrispondenza parentesi chiusa automaticamente (built-in)
  • show-paren-mode: quando il punto è finita una parentesi, evidenziare la corrispondenti uno (built-in)
  • rainbow-delimiters-mode: Evidenziare ogni livello di parentesi in un volto diverso
  • paredit-mode: Mantenere parentesi equilibrato in tutti i tempi. Generalmente, si concentra la modifica su Sexps anziché su caratteri e parole.

Si consiglia di abilitare tutti questi. Una configurazione ragionevole per sconfiggere parentesi non corrispondenti è quindi:

(add-hook 'emacs-lisp-mode-hook 'paredit-mode) 
(add-hook 'emacs-lisp-mode-hook 'rainbow-delimiters-mode) 
(show-paren-mode 1) 
(electric-pair-mode 1) 

Paredit e Rainbow delimitatori sono disponibili da Melpa.

17

La prima cosa è controllare il bilanciamento tra parentesi e virgolette.

Per Emacs Lisp In GNU Emacs utilizzare M-x check-parens.

Altri editor di Emacs hanno comandi simili. Ad esempio, in LispWorks è possibile utilizzare M-x Find Unbalanced Parentheses.

+0

Da molto tempo ormai utilizzo Emacs e non si è mai persa questa funzione. Questo ovviamente è cambiato poiché ora so che esiste. – PascalVKooten

+0

sei un risparmiatore di vita :) – Veera