如何将键盘映射添加到仿真模式映射列表? Emacs

How can I add a keymap to the emulation-mode-map-alists? Emacs

我制作了一个键盘映射并将其添加到次要模式:

(defvar my-keymap (make-sparse-keymap))
(progn
    (define-key my-keymap (kbd "C-c s") '(lambda() (interactive) (message "Hello World")))
)

(define-minor-mode my-keybindings-mode
    nil
    :global t
    :lighter " keys"
    :keymap my-keymap)

(add-to-list emulation-mode-map-alists '(my-keybindings-mode . my-keymap))

但是,每当我尝试通过以下方式将其添加到 emulation-mode-map-alists 时:

(add-to-list emulation-mode-map-alists '(my-keybindings-mode . my-keymap))

我最终得到这个错误:

eval-region: Wrong type argument: symbolp, (evil-mode-map-alist)

However, whenever I try to add it to the emulation-mode-map-alists by writing:

(add-to-list emulation-mode-map-alists '(my-keybindings-mode . my-keymap))

I end up getting this error:

Wrong type argument: symbolp, (evil-mode-map-alist)

那是因为 add-to-list 的第一个参数应该是一个符号(带引号),像这样:

(add-to-list 'emulation-mode-map-alists ...)

如果没有 引用,您将传递 emulation-mode-map-alists 变量的评估值。

注意 C-hf add-to-list 告诉你这是一个 function ,特别要注意的是,当任何函数被调用时,它的所有参数都会被求值。这反过来告诉您,为了将符号作为参数传递,您需要引用它。

(宏和特殊形式更棘手——它们的参数不会自动求值,但它们可能选择显式地求值其中的一些,所以你总是需要支付注意文档以确定您应该传递给它们的内容。但是,函数在这方面很好且一致。)