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

Pau*_*han 78 emacs elisp

我在这里得到一个"错误的类型参数:commandp,(lambda nil(forward-line 5))".

(global-set-key [?\M-n] (lambda () (forward-line 5)))
Run Code Online (Sandbox Code Playgroud)

错误是什么?我很确定这很简单,我错过了一些明显的东西.

bre*_*dan 118

global-set-key期待一个交互式命令.(lambda () (interactive) (forward-line 5))应该工作.

顺便说一句,C-h f commandp对于像这样的错误来说,这是一个非常好的起点.

  • 因此,根据 `(commandp)` 文档,顶级调用 `(interactive)` 的 lambda 函数可以工作,但是如何使用 `(defun)` 定义一个可以工作的函数呢? (2认同)

Bai*_*ose 34

正确的形式应该是这样的 -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
Run Code Online (Sandbox Code Playgroud)

问题是你忘记了(interactive)(正如brendan所说).

顺便说一句,您会注意到我使用该(kbd)函数来指定键绑定.这个函数非常有用,因为你几乎可以直接放置键绑定.