emacs将几个击键和命令映射到一个键

时间:2013-05-16 15:56:16

标签: emacs

我正在尝试将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采用布尔

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

你错过了lambda的参数列表。另外,我认为将t传递给indent-pp-sexp无需拨打universal-argument

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

答案 2 :(得分: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宏的绑定。