我在这里收到一个"Wrong type argument: commandp, (lambda nil (forward-line 5))"的错误提示。
(global-set-key [?\M-n] (lambda () (forward-line 5)))
错误是什么?我相当确定它很简单,但我可能错过了一些明显的东西。
(global-set-key [?\M-n] (lambda () (forward-line 5)))
错误是什么?我相当确定它很简单,但我可能错过了一些明显的东西。
global-set-key
期望一个交互式命令。(lambda () (interactive) (forward-line 5))
应该可以工作。
顺便说一下,C-h f commandp
是解决这类错误的很好的起点。
- Dangelov对‘交互’进行的“调用”实际上是一个声明而不是函数;它告诉‘call-interactively’如何读取传递给函数的参数。当实际调用时,‘interactive’只返回nil。
(commandp)
文档,具有顶层调用(interactive)
的lambda函数可以工作,但我如何定义一个使用(defun)
的函数呢? - peterhil正确的形式应该是这样的 -
(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
问题在于你忘记加上 (interactive)
(就像 brendan 提到的那样)。(kbd)
函数来指定按键绑定。该函数非常有用,因为你几乎可以将按键绑定文字直接复制进去。我也在一台新机器上遇到过这个错误,我使用了我的通常的 .emacs
文件但尚未安装我的包,并且要执行的命令在其中一个包中。(因为不能执行的命令肯定不是交互式的!)