在 elisp 中传递函数参数
passing function arguments in elisp
我在 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-=
绑定到键盘映射中的某个函数?
如您所见,这比看起来要复杂,因为 evil-define-key
是一个宏(定义为 here)。它采用命名键映射变量的符号,并在定义该变量后绑定键。但是,在这种情况下,它获得符号 keymap
而不是 c++-mode-map
,因为宏调用接收调用中的文字值作为参数。
您可以通过将您自己的函数更改为宏来解决此问题。这意味着它不仅需要 运行 一些代码,还需要 return 一些代码然后进行评估。像这样:
(defmacro bind-key (keymap)
`(evil-define-key '(normal insert) ,keymap (kbd "C-=") 'some-function))
反引号引入了一种形式,可以逐字 returned,除了其中的值前面有逗号。
用(bind-key c++-mode-map)
调用它,它应该等同于你显式调用evil-define-key
。
我在 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-=
绑定到键盘映射中的某个函数?
如您所见,这比看起来要复杂,因为 evil-define-key
是一个宏(定义为 here)。它采用命名键映射变量的符号,并在定义该变量后绑定键。但是,在这种情况下,它获得符号 keymap
而不是 c++-mode-map
,因为宏调用接收调用中的文字值作为参数。
您可以通过将您自己的函数更改为宏来解决此问题。这意味着它不仅需要 运行 一些代码,还需要 return 一些代码然后进行评估。像这样:
(defmacro bind-key (keymap)
`(evil-define-key '(normal insert) ,keymap (kbd "C-=") 'some-function))
反引号引入了一种形式,可以逐字 returned,除了其中的值前面有逗号。
用(bind-key c++-mode-map)
调用它,它应该等同于你显式调用evil-define-key
。