web-dev-qa-db-fra.com

Emacs: la valeur du symbole en tant que variable est nulle

C'est mon ~/.emacs fichier:

(setq-default c-basic-offset 4 c-default-style "linux")
(setq-default tab-width 4 indent-tabs-mode t)
(define-key c-mode-base-map (kbd "RET") 'newline-and-indent)

Je reçois un avertissement lorsque j'ouvre emacs:

Avertissement (initialisation): une erreur s'est produite lors du chargement de c:/home/.emacs:

La valeur du symbole en tant que variable est nulle: c-mode-base-map

Pour garantir un fonctionnement normal, vous devez rechercher et supprimer la cause de l'erreur dans votre fichier d'initialisation. Démarrez Emacs avec le --debug-init option pour afficher une trace d'erreur complète.

J'ai couru --debug-init et c'est ce qu'il a retourné. Je ne sais pas ce que je veux dire:

Débogueur entré - Erreur LISP: (void-variable c-mode-base-map)

(define-key c-mode-base-map (kbd "RET") (quote newline-and-indent)) 

eval-buffer(#<buffer *load*> nil "c:/home/.emacs" nil t)

; Reading at buffer position 311
load-with-code-conversion("c:/home/.emacs" "c:/home/.emacs" t t)

load("~/.emacs" t t)
20
user2030677

Cela signifie que, au moment où vous invoquez define-key, c-mode-base-map n'est encore défini par rien.

La solution habituelle consiste à savoir où cela est défini et à exiger ce module. Dans ce cas:

(require 'cc-mode)

Cependant, il existe également d'autres correctifs possibles, par exemple en définissant le raccourci clavier dans un hook de mode, ou en utilisant eval-after-load. Lequel vous utilisez dépend de vous; J'ai tendance à faire l'approche KISS car je ne me soucie généralement pas du temps de démarrage; mais si vous le faites, vous voudrez peut-être quelque chose de plus paresseux.

24
Tom Tromey