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


87

我在这里得到一个“错误的类型参数:commandp,(lambda nil(前行5))”。

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

有什么错误?我相当确定这很简单,而且我也缺少明显的东西。


您缺少右括号。不过可能不在您的代码中,仅在问题中。
Helder S Ribeiro

附带一提:当您引用匿名函数时,它将不会被编译。我想这对您来说没什么大不了的。
菲尔·杰克逊

Answers:


129

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

顺便说一句,这C-h f commandp是此类错误的一个很好的起点。


我认为没有缺点。从文档中:>>“交互”的“调用”实际上是声明而不是函数;它告诉“交互式调用”如何读取参数以传递给函数。实际调用时,“交互”仅返回nil。
Dangelov

因此,根据(commandp)文档,具有顶级调用功能的lambda函数可以(interactive)工作,但是我如何定义一个(defun)可以工作的函数呢?
peterhil

35

正确的格式应为:

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

问题是您忘了放东西(interactive)(如布兰丹所说)。

顺便说一句,您会注意到我使用了(kbd)用于指定键绑定的函数。该功能非常有用,因为您几乎可以按字面意义放置键绑定。


2

我还在使用常规.emacs文件但未安装软件包的新计算机上看到此错误,并且要执行的命令在这些软件包之一中。(因为绝对不能执行的命令不是交互式的!)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.