我的init.el中有以下几行:
(dolist (map '(emacs-lisp-mode-map
lisp-interaction-mode-map))
(define-key map (kbd "C-c C-e") 'eval-and-replace))
当我评估它时,我收到一个错误:
Wrong type argument: keymapp, emacs-lisp-mode-map
但如果我查看:
(keymapp emacs-lisp-mode-map)
结果是:
t
我不知道那是什么问题 我还试过了另一个版本的mapcar:
(mapcar '(lambda (map)
(define-key map (kbd "C-c C-e") 'eval-and-replace))
'(emacs-lisp-mode-map
lisp-interaction-mode-map))
但结果是一样的。
答案 0 :(得分:3)
define-key
期望实际的键映射作为其第一个参数。您传递的是符号(变量),其值是键映射。你需要使用它:
(dolist (map (list emacs-lisp-mode-map lisp-interaction-mode-map))...)
list
是一个普通函数,因此它会计算其参数。在这种情况下,它会为您提供两个键映射的列表,而不是两个键映射变量(符号)。在您使用的代码中,quote
只返回列表(emacs-lisp-mode-map lisp-interaction-mode-map)
。
您测试了(keymapp emacs-lisp-mode-map)
。但是,如果您测试了(keymapp 'emacs-lisp-mode-map)
,那么结果将是nil
:符号不是键映射。