给定一个emacs命令名称,你将如何find键绑定? (反之亦然)

如果我知道一个emacs命令名称,说:“goto-line”; 如果我想查询是否有任何绑定到这个命令的键序列呢?

反之亦然,给定一个按键顺序,我怎样才能find它的命令名?

为了find一个命令的键绑定,你可以使用emacs help的“where-is”function

Ch w command-name 

如果为该命令设置了多个绑定,则将全部列出。

相反,给定一个键序列,你可以input

 Ch k key-sequence 

获取将运行的命令。

您可以通过input来获取有关命令的详细信息,也可以获得任何定义的非交互式function

 Ch f function-name 

这将给你一个关于函数的详细信息,包括它的任何键绑定。

 Ch f variable-name 

键映射保存在variables中,但是键代码以原始格式存储。 尝试一下例子中的Ch v isearch-mode-map

有关获得帮助的更多帮助,可以键入

 Ch ? 

Ch w (或F1-w ): where-is RET somecommandname RET

只是你问什么 – 列出绑定的键没有额外的信息。 🙂

要交互地获取绑定到键盘快捷键(或Emacs术语中的键序列)的命令,请参阅所选答案。

要以编程方式获取绑定到给定键序列的命令,请使用带键序列的函数key-bindinglookup-key键并返回其绑定命令。 functionkey-bindingCh k使用的。

 (key-binding (kbd "Ch m")) 

通过search所有当前的键盘映射来返回绑定到Ch m的命令。 函数lookup-key在一个keymap中search:

 (lookup-key (current-global-map) (kbd "TAB")) ; => indent-for-tab-command (lookup-key org-mode-map (kbd "TAB")) ; => org-cycle (lookup-key text-mode-map (kbd "TAB")) ; => nil (lookup-key isearch-mode-map (kbd "TAB")) ; => isearch-printing-char 

为了以编程方式获得绑定到给定命令的所有密钥序列, where-is-internal可能是要使用的函数。 以internal结尾的函数的名称似乎表明,它不是Emacs用户在他们的初始化文件中使用,但这个函数有一个文档string似乎build议不然。 任何考虑使用where-is-internal都应该首先检查重映射密钥是否能实现他们的目标。

一个古老的问题,但为了新读者的利益,还有其他一些很好的方法来查看键绑定

Mx describe-bindings

列出当前可用的所有绑定,使用isearch,发生等,以便充分利用此列表。

Mx describe-prefix-map

这显示了当前模式下可用的所有绑定,您可以像使用任何其他只读的Emacs缓冲区一样使用显示缓冲区,例如可以自由searchstring等。

Mx describe-mode

除了提供有关当前模式的一般信息,还将列出所有可用的键绑定。

Mx describe-minor-mode

系统将提示您input次要模式的名称,然后显示该次要模式的信息和键绑定。

注意 :以下示例使用附加软件包(可从MELPA获得 )

哪个关键

这表明你在需要它们之前就已经绑定了。 input前缀,例如CxCc并显示该前缀中可用绑定的列表。

您还可以使用以下命令来查看当前模式下可用的键绑定列表:

Mx which-key-show-top-level

which-key-show-top-level绑定到您select的键和弦是非常有用的,这样您就可以在任何地方查看可用的键。

例如, Csisearch-forward )有一个广泛的键盘映射,这通常是未知的。 例如, Ms o使用当前的searchstring开始,我不知道使用Emacs很多年了。 拥有which-key可以帮助我发现Emacs中的许多宝贵的gem。

https://github.com/justbur/emacs-which-key

指南键

引导键的工作方式与我推荐使用which-key来比较function的方式大致相同。

https://github.com/kai2nenobu/guide-key