我在init.el
中定义了一个函数:
(defun bind-key (keymap)
(evil-define-key '(normal insert) keymap (kbd "C-=") 'some-function))
(bind-key 'c++-mode-map)
但是evil-define-key
不会将C-=
绑定到keymap
中的某些功能。
但是,可以直接调用evil-define-key
:
(evil-define-key '(normal insert) c++-mode-map (kbd "C-=") 'some-function)
我尝试过:
(bind-key 'c++-mode-map)
(bind-key c++-mode-map)
都不行。
我已经通过谷歌搜索将键映射传递给函数,但是没有找到解决方案。然后,我注意到evil-define-key
是一个宏。但是在这种情况下我找不到解决方法。
如何让bind-key
工作?通过向其传递键盘映射,该函数是否将C-=
绑定到键盘映射中的某些功能?
答案 0 :(得分:1)
正如您所注意到的,这比看起来要复杂,因为evil-define-key
是一个宏(定义为here)。它使用一个符号来命名一个keymap变量,并在定义该变量后绑定该键。但是,在这种情况下,它得到符号keymap
而不是c++-mode-map
,因为宏调用将调用中的文字值作为参数。
您可以通过将自己的函数更改为宏来解决此问题。这意味着它不仅需要运行一些代码,还需要返回一些代码然后进行评估。像这样:
(defmacro bind-key (keymap)
`(evil-define-key '(normal insert) ,keymap (kbd "C-=") 'some-function))
反引号引入了一种形式,该形式逐字返回,但其中的值前面带有逗号。
用(bind-key c++-mode-map)
调用它,它应该等效于您对evil-define-key
的显式调用。