如果我知道emacs命令名称,说“goto-line”;如果我想查询是否有任何键序列绑定到此命令,该怎么办?
反之亦然,给定一个关键序列,我该如何找到它的命令名?
答案 0 :(得分:143)
要查找命令的键绑定,您可以使用emacs帮助的“where-is”功能
C-h w command-name
如果为命令设置了多个绑定,则将全部列出。
对于反向,给定键序列,您可以键入
C-h k key-sequence
获取将运行的命令。
您可以通过键入
获取有关命令的详细信息,以及定义的任何非交互式功能C-h f function-name
它将为您提供有关函数的详细信息,包括其中的任何键绑定。
C-h f variable-name
键映射保存在变量中,但键码以原始格式存储。请尝试C-h v isearch-mode-map
作为示例。
有关获取帮助的更多帮助,您可以输入
C-h ?
答案 1 :(得分:12)
要以交互方式获取绑定到键盘快捷键的命令(或Emacs术语中的键序列),请参阅所选答案。
要以编程方式获取绑定到给定键序列的命令,请使用带有键序列的函数key-binding
或lookup-key
并返回其绑定命令。函数key-binding
是C-h k
使用的函数。
(key-binding (kbd "C-h m"))
通过搜索所有当前键盘映射返回绑定到C-h m
的命令。函数lookup-key
在单个键映射中搜索:
(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用户在其init文件中使用的,但是具有docstring的这个函数似乎另有建议。任何考虑使用where-is-internal
的人都应首先检查remapping keys是否可以实现目标。
查找绑定到特定命令(例如forward-char
)的键的替代方法是substitute-command-keys
(例如,(substitute-command-keys "\\[forward-char]")
)。
这在较大的文本中特别有用。
答案 2 :(得分:12)
C-h w
(或F1-w
):where-is
RET somecommandname RET
只是你要问的是 - 列出没有附加信息的绑定密钥。 :)
答案 3 :(得分:3)
一个老问题,但为了新读者的利益,还有一些其他好方法可以看到键绑定
M-x describe-bindings
列出当前可用的所有绑定,使用isearch,occurrence等,以充分利用此列表。
M-x describe-prefix-map
这显示了当前模式下可用的所有绑定,您可以像使用任何其他只读Emacs缓冲区一样使用显示缓冲区,例如,您可以自由搜索字符串等。
M-x describe-mode
除了提供有关当前模式的一般信息外,它还会列出所有可用的键绑定。
M-x describe-minor-mode
系统将提示您输入次要模式的名称,然后显示该次要模式的信息和键绑定。
注意:以下示例使用其他软件包(可从MELPA获取)
这会在您需要之前显示绑定。输入前缀,例如C-x
或C-c
,将显示该前缀中可用的绑定列表。
您还可以使用以下方法查看当前模式下可用的键绑定列表:
M-x which-key-show-top-level
将which-key-show-top-level
绑定到您选择的键和弦很有用,这样您就可以在任何地方查看可用的键。
例如,C-s
(isearch-forward
)有一个广泛的密钥映射,通常是未知的。例如M-s o
使用当前搜索字符串启动occur
,在使用Emacs多年后我不知道这一点。 which-key
周围帮助我在Emacs中发现了许多稀有宝石。
https://github.com/justbur/emacs-which-key
指南键的工作方式与which-key
的工作方式大致相同。我建议您查看它以比较功能。