Emacs:符号作为变量的值为空

31
这是我的~/.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 为了确保正常运作,您应该调查并删除初始化文件中错误的原因。使用--debug-init选项启动Emacs以查看完整的错误回溯。
我运行了--debug-init命令,并返回了以下内容。我不知道它的含义:

Debugger entered--Lisp error: (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个回答

36

这意味着,在您调用define-key时,c-mode-base-map 还未被定义。

通常的解决方法是找出此定义的位置并要求该模块。在这种情况下:

(require 'cc-mode)

然而,还有其他可能的解决方法,例如在模式钩子中设置键绑定或使用eval-after-load。你可以自行选择使用哪种方法;我倾向于采用KISS方法,因为我通常不关心启动时间;但如果你关心,你可能需要一些更慢的东西。


谢谢。对于achead:include-directories我也遇到了同样的问题。有什么想法吗? - user2030677
3
不清楚那个。听起来像是一个扩展功能,不是 Emacs 自带的。 - Tom Tromey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接