将 lambda 绑定到键时出现“错误类型参数:commandp”错误

问题描述 投票:0回答:4

我在这里收到“错误类型参数:commandp,(lambda nil (forward-line 5))”。

(global-set-key [?\M-n] (lambda () (forward-line 5)))

错误是什么?我相当确定这很简单,而且我遗漏了一些明显的东西。

emacs command key-bindings
4个回答
150
投票

global-set-key
需要交互式命令。
(lambda () (interactive) (forward-line 5))
应该可以工作。

顺便说一句,

C-h f commandp
对于此类错误来说是一个非常好的起点。


42
投票

正确的形式应该是这样 -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

问题是你忘记放

(interactive)
(正如布兰登提到的)。

顺便说一句,您会注意到我使用

(kbd)
函数来指定键绑定。该功能非常有用,因为您几乎可以按字面意思放置键绑定。


2
投票

我也在一台新机器上看到了这个错误,我正在使用常用的

.emacs
文件,但尚未安装我的软件包,并且要执行的命令位于其中一个软件包中。 (因为无法执行的命令肯定不是交互式的!)


0
投票

提供用

defun
定义的函数应该与 lambda,只要满足相同的要求即可。

所以

(defun my-move-forward ()
 (interactive)
 (forward-line 5))

应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.