错误的类型参数:keymapp,emacs-lisp-mode-map

时间:2014-11-23 02:32:12

标签: emacs elisp

我的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))

但结果是一样的。

1 个答案:

答案 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:符号不是键映射。