2013-02-25 56 views
7

在處理我的.emacs init文件時,我有時會犯錯誤。當我做eval緩衝時,我得到消息「解析期間文件結束。」如何在Emacs的lisp文件中找到錯誤?

我該如何讓Emacs告訴我錯誤的確切位置?

+5

對於*這種類型的錯誤,確切的位置是文件的結尾,但它不是很有用:)嘗試重新註冊該文件並查看縮進變爲錯誤的位置。 – 2013-02-25 18:31:07

+2

Anton是正確的,這些都很痛苦,但通常可以通過使用好的lisp編輯模式並在緩衝區中調用「indent-region」來避免它們。當縮進不符合預期時,您可以查看出現問題的位置。 – pmr 2013-02-25 18:34:08

+0

此錯誤表示您有不匹配的圓括號。 – Barmar 2013-02-25 18:43:30

回答

4

這些錯誤實際上很難找到。

最好儘量避免不匹配的括號。有幾個內置和第三方次要模式,可幫助您在此:

  • electric-pair-mode:插入自動匹配右括號(內置)
  • show-paren-mode:當點在一個括號,突出匹配(內置)
  • rainbow-delimiters-mode:突出括號的每個級別在不同的面貌
  • paredit-mode:括號保持在所有時間平衡。一般來說,在Sexps上進行焦點編輯而不是字符和文字。

我建議啓用所有這些。合理配置打敗不匹配的括號是這樣的:

(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和彩虹分隔符可從MELPA。

17

首先要檢查括號和字符串引號的平衡。

對於Emacs Lisp在GNU Emacs中使用M-x check-parens

其他類似Emacs的編輯器也有類似的命令。例如在LispWorks中,可以使用M-x Find Unbalanced Parentheses

+0

現在已經使用Emacs很長一段時間了,從來沒有錯過這個功能。這當然會改變,因爲我現在知道它存在。 – PascalVKooten 2013-02-25 22:36:22

+0

你是救命恩者:) – Veera 2016-09-07 11:20:06