我是emacs的新手,并且有一个菜鸟问题。我可以通过(global-set-key (kbd "C-c a b c") 'some-command)
将密钥绑定到特定功能,其中some-command
是一个函数。如何用一个键绑定调用两个函数(说some-command
和some-other-command
)?非常感谢!多个命令的Emacs键绑定
回答
您可以定义自己的调用两个函数的函数,并将该函数绑定到您自己的函数中。或者使用一个简单的λ:
(global-set-key (kbd "C-c a b c") (lambda() (interactive) (some-command) (some-other-command)))
您可以定义另一个functon与defun
在你调用别人用funcall
或apply
所以,当你调用这个第三个功能(你也可以绑定),它会调用其他人。
定义一个命令,可以有条件地调用所需的每个函数(命令)。使用前缀arg来区分要调用的内容。因此,如果新的调度命令被绑定到C-o
,那么C-u C-o
将调用其中一个功能,C-o
(不带前缀arg)会调用另一个功能。
你会想要做C-h f interactive
,看看如何定义一个识别前缀参数的命令等。另请参阅Elisp手册 - 使用i interactive
找到它在哪里教这个。
这是一个简单而有趣的练习。学习定义自己的简单命令是开始以自己的语言与Emacs交谈的好方法。
我建议lambda表达式从未结合键,原因很简单,当你问的Emacs该键做什么,它最终会告诉你这样的事情(使用接受码,当字节编译,作为一个例子):
C-c a b c runs the command #[nil "\300 \210\301 \207" [some-command
some-other-command] 1 nil nil], which is an interactive compiled Lisp
function.
It is bound to C-c a b c.
(anonymous)
Not documented.
如果你从来没有字节编译代码,它不太神秘,但仍然未格式化:
C-c a b c runs the command (lambda nil (interactive) (some-command)
(some-other-command)), which is an interactive Lisp function.
其中,同时仍然可读在这样的小功能的情况下,快速获得对于较大的功能是不可理解的。
则为:
C-c a b c runs the command my-run-some-commands, which is an
interactive compiled Lisp function in `foo.el'.
It is bound to C-c a b c.
(my-run-some-commands)
Run `some-command' and `some-other-command' in sequence.
,你得到,如果你名的功能(这鼓励您记录它比一个匿名函数)。
(defun my-run-some-commands()
"Run `some-command' and `some-other-command' in sequence."
(interactive)
(some-command)
(some-other-command))
(global-set-key (kbd "C-c a b c") 'my-run-some-commands)
最后,ABO血型ABO指出,这也意味着你可以很容易地访问在任何时候该函数的定义,查看或编辑/重新评估的代码,或者通过下面的链接(在我的例子foo.el
)在帮助缓冲区提供,或者通过使用的Mxfind-function
(输入函数的名称),或的Mxfind-function-on-key
(键入它绑定到按键序列)。
非常重要的是,您可以使用这种方法跳转到定义。 – 2014-12-03 09:45:02
- 1. 将多个Emacs键绑定分配给单个命令?
- 2. 多个键绑定到单个命令
- 3. 的emacs:分配单键绑定到多个命令,使用通用的说法
- 4. 多个命令绑定
- 5. Emacs的:一个命令打印键结合或列出所有键绑定
- 6. 将关键字绑定到emacs中的负面参数+命令
- 7. 定义的键绑定多个命令在VS代码
- 8. Emacs Meta中的命令键
- 9. 将多个命令绑定到屏幕中的单个键?
- 10. Silverlight MVVM中的多个命令绑定
- 11. “\ C-”的Emacs键绑定“
- 12. 简单的Emacs键绑定
- 13. sublimetext - 多重绑定命令
- 14. 非命令的Eclipse键绑定
- 15. WPF命令键绑定的问题
- 16. Emacs键绑定回退
- 17. Emacs在TTY +键盘绑定
- 18. Emacs键绑定运行make
- 19. 键绑定或在Emacs 23.2
- 20. 如何获得给定键盘快捷键的emacs命令?
- 21. 如何获取给定emacs命令的键盘快捷键?
- 22. Emacs上的键绑定列表中的“前缀命令”是什么意思?
- 23. emacs将几个按键和命令映射到一个按键
- 24. C#/ WPF:键绑定不触发命令
- 25. 绑定emacs的邪恶窗口命令,G字头
- 26. 将命令绑定到Emacs中的C-RET
- 27. Mac上的Emacs:将命令-v绑定到C-u M-! pbpaste
- 28. 在emacs上自定义键绑定
- 29. Emacs eshell'ulimit'命令
- 30. tmux:使用预定义的命令打开命令提示符的绑定键
@Stefan请问你解释为什么不引用lambdas? – songyuanyao 2014-12-03 03:27:15
这很好用。谢谢!虽然我有同样的问题 - 我通常也引用lambdas,并想知道为什么不。 – 2014-12-03 03:36:06
@songyuanyao:因为''(...)'是*列表*,而不是*函数*。请参阅http://stackoverflow.com/questions/16801396/when-should-emacs-function-syntax-be-used/16802304#16802304 – Stefan 2014-12-03 04:20:52