depurando alguns elisp - “fim do arquivo durante o erro de análise” no init.el

9

Após uma longa depuração do meu arquivo init.el, parece a primeira linha do código elisp a seguir, ou seja, (custom-set-variablesestá provocando um erro 'Fim do arquivo durante a análise') que eu absolutamente não entendo. Se eu comentar esta linha, está tudo bem. Eu nem mesmo inseri esse código, pois ele foi adicionado automaticamente no init.el no customizemenu.

(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))

Aqui está a mensagem de erro completa:

Aviso (inicialização): ocorreu um erro ao carregar `/Users/me/.emacs.d/init.el ':

Fim do arquivo durante a análise: /Users/me/.emacs.d/init.el

Qualquer ajuda seria apreciada ! obrigado

Loukios
fonte
Se o arquivo for grande, você pode usar M-x check-parenspara pular para a seção incorreta. Se o arquivo for curto ou você estiver visualizando uma seção curta de código, existem métodos para destacar parênteses correspondentes para ver visualmente onde um parênteses está incorreto ou ausente. Aqui está um link para minha própria variação de highlight-parentheses-mode: stackoverflow.com/a/23998965/2112489
lawlist
Por favor, não use custom-set-variablesem seu próprio código Elisp. Isso deve ser gerado apenas automaticamente . Não copie e cole. Procure código equivalente usando setqou algo parecido.
Stefan

Respostas:

19

O erro "final do arquivo durante a análise" significa que você não fechou um paren.

Para depurar isso, você deve

  1. Faça M-x check-parens RETpara identificar a localização do erro atual.
  2. Habilite show-paren-modepara ver qual parênteses corresponde à atual - isso ajudará você na manutenção contínua do código.
  3. Use C-M-f/C-M-b para navegar por parênteses equilibrados; se você receber um erro, é nesse local que seu pai aberto não foi fechado.
  4. Use TABpara recuar cada linha e ver se o novo recuo está de acordo com suas expectativas.

A outra resposta explica corretamente qual é o erro real no seu caso.

sds
fonte
5

Um parênteses de fechamento está ausente no exemplo acima. A whendeclaração não faz parte do custom-set-variables. O código corrigido é o seguinte:

(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))
lista de leis
fonte