我正在尝试将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
采用布尔
答案 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
宏的绑定。