2013-05-16 112 views
2

我试图将c-u m-x indent-pp-sexp映射到单个按键,如F5,,以便使用Emacs不会侵蚀我的指纹。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需要布尔

回答

2

你有争论围绕走错了路,你绑定键的功能,而不是其他的键序列。也许你真的在寻找一个named macro;或者你可以写一些实际的Lisp和绑定,为F5:

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

在调用形式参数的存在似乎是足够的选择前缀参数的功能。

1

你错过了lambda的参数列表。此外,我认为通过tindent-pp-sexp否定需要调用universal-argument

(global-set-key (kbd "<f5>") #'(lambda() 
           (interactive) 
           (indent-pp-sexp t))) 
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-F5foobar.el宏观的结合。