Подтвердить что ты не робот

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)
4b9b3361

Ответ 1

Это означает, что в момент, когда вы вызываете define-key, c-mode-base-map еще не определено ничем.

Обычное исправление заключается в том, чтобы определить, где это определено и требуется этот модуль. В этом случае:

(require 'cc-mode)

Однако возможны и другие возможные исправления, например установка привязки ключа в режиме hook или использование eval-after-load. Какой из них вы используете, зависит от вас; Я, как правило, придерживаюсь подхода KISS, так как я вообще не забочусь о времени запуска; но если вы это сделаете, вам может понадобиться что-то более ленивое.