1

我是 emacs 的新手和 lisp 的新手

我正在尝试设置 Meta + 空格键来设置突出显示文本的标记(在当前光标位置)。在网上搜索和试验我最终得到了这个命令

(global-set-key (kbd "M-SPC") 'push-mark nil nil 1)

上面的命令对我不起作用,我得到一个“参数错误数量不正确”。

得到函数定义,

    推动标记和可选位置 nomsg 激活
来自这里的 elisp 手册

    Position: nil 表示位置应该默认为当前光标位置
    nomsg:我不在乎(我认为)
    激活:默认情况下显然不是真的,所以我需要将它设置为......某事。

我将如何格式化命令以传入三个值?

该错误肯定是由于 push-mark 函数调用,因为其他函数,如 back-char (我没有将输入传递给)正常工作

4

2 回答 2

2

正如C-hf global-set-key RET告诉你的那样,global-set-key需要两个参数:(global-set-key KEY COMMAND)

您正在传递五个参数:(global-set-key (kbd "M-SPC") 'push-mark nil nil 1)

因此“参数数量错误”。

您可以为命名函数或匿名函数/ lambda 提供符号。

例如:(global-set-key (kbd "M-SPC") (lambda () (interactive) (push-mark nil nil 1)))

于 2013-09-22T04:42:20.113 回答
2

补充一点@phils所说的:

  1. push-mark不是命令:它的定义没有interactive规范。请注意,phils 的示例包含(interactive)在匿名函数中,使其成为命令。

  2. 不像push-mark, push-mark-command,顾名思义,是一个命令。如果你想要的效果push-mark那么就绑定push-mark-command,或者更好set-mark-command

于 2013-09-22T15:54:09.320 回答