Emacs: значение символа как переменной недействительно
Это мой файл ~/.emacs
:
(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)
Я получаю предупреждение, когда я открываю emacs:
Предупреждение (инициализация): при загрузке произошла ошибка c:/home/.emacs
:
Значение символа как переменной недействительно: c-mode-base-map
Чтобы обеспечить нормальную работу, вы должны изучить и удалить причина ошибки в файле инициализации. Запустите Emacs с помощью --debug-init
возможность просмотра полной ошибки backtrace.
Я побежал --debug-init
, и это то, что оно вернуло. Я не знаю, что я имею в виду:
Введен отладчик - 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)
Ответы
Ответ 1
Это означает, что в момент, когда вы вызываете define-key
, c-mode-base-map
еще не определено ничем.
Обычное исправление заключается в том, чтобы определить, где это определено и требуется этот модуль. В этом случае:
(require 'cc-mode)
Однако возможны и другие возможные исправления, например установка привязки ключа в режиме hook или использование eval-after-load
. Какой из них вы используете, зависит от вас; Я, как правило, придерживаюсь подхода KISS, так как я вообще не забочусь о времени запуска; но если вы это сделаете, вам может понадобиться что-то более ленивое.