2

我正在尝试映射c-u m-x indent-pp-sexp到单个键,例如 F5,以便使用 Emacs 不会侵蚀我的指纹。

我使用(global-set-key (kbd "C-u M-x indent-pp-sexp") "<f5>")但我收到以下错误:

global-set-key: Key sequence C-u M-x i n d e n t - p p - s e x p starts with non-prefix key C-u

编辑

有了这个 lambda 函数(global-set-key (kbd "<f5>") (lambda (interactive) (universal-argument) (indent-pp-sexp t)))

得到错误:

recursive-edit: Wrong type argument: commandp, (lambda (interactive) (universal-argument) (indent-pp-sexp t))

很奇怪,因为univeral-argument不带参数,并且indent-pp-sexp带布尔值

4

3 回答 3

2

您有错误的参数,并且您将键绑定到函数,而不是其他键序列。也许你真的在寻找一个命名宏;或者您可以编写一些实际的 Lisp 并将其绑定到 F5:

(global-set-key (kbd "<f5>")
                (function (lambda () (interactive) (indent-pp-sexp t) )) )

调用表单中存在的参数似乎足以选择前缀参数功能。

于 2013-05-16T16:06:05.493 回答
1

您缺少 lambda 的参数列表。此外,我认为传递tindent-pp-sexp否定调用的需要universal-argument

(global-set-key (kbd "<f5>") #'(lambda ()
                                 (interactive)
                                 (indent-pp-sexp t)))
于 2013-05-16T16:28:53.717 回答
0

我和你一样是菜鸟,但我已经碰巧想到了制作宏之类的基本东西。我真的不知道你的代码有什么问题,但这里是我如何在家做事的演练。您首先需要做的是按F3。然后键入您的击键,完成后,按F4。恭喜,您已经定义了一个匿名宏。F4您可以通过再次按来多次重播它。当你玩够了,输入M-x name-last-keybord-macro,并命名它,例如。foobar. 转到您的~/.emacs.d/macros/目录(如果没有,请创建)并访问您将命名的文件foobar.el。在其缓冲区中,M-x insert-kbd-macro. 当被问及名字时,说foobar。您将看到 emacs 已将您刚刚录制的宏的内容输入到文件中。保存。打开你的.emacs文件,并添加行:

 (load (expand-file-name "~/.emacs.d/macros/foobar.el"))
 (global-set-key (kbd "M-<f5>") 'foobar)

重新启动后,事情开始为我工作,M-F5作为foobar.el宏的绑定。

于 2013-05-16T16:28:55.760 回答