是否有任何emacs键组合被保留用于自定义命令?

16

如果我想创建一个自定义键组合来运行命令,有没有预留给此功能的键盘快捷方式?我常常觉得很难决定要覆盖哪个快捷键,因为我不确定哪些命令是不能被覆盖的,以及我将来可能安装的插件会尝试设置哪些命令。

4个回答

26

我建议使用unbound,它就是为这种情况而制作的。

在将其包含到您的Emacs配置中后,键入以下内容将列出可能未绑定的按键以供自定义:

M-x describe-unbound-keys

它要求一个复杂度级别(我通常只使用5)的关键组合,取决于您感兴趣的按键绑定是多么方便(较少选项)或外奇(更多选项)。


2
describe-unbound-keys 函数似乎不是标准 Emacs 发行版的一部分,但可以在此处下载:http://www.emacswiki.org/emacs/unbound.el。 - Teemu Leisti

23

你可以重新定义任何东西,但惯例是使用C-c l(其中l是任何字母)。

作为用户,您可以重新定义任何键; 但通常最好坚持由C-c后跟一个字母(���写或小写)组成的键序列。这些键已“保留给用户”,因此它们不会与任何正确设计的Emacs扩展冲突。功能键F5F9也保留给用户。 如果您重新定义其他键,则您的定义可能会被某些扩展或主模式覆盖,这些扩展或主模式会重新定义相同的键。

就个人而言,我尝试在绑定键中找到空缺以滑入我的自定义内容,通常有足够的空缺供我找到合理的内容。另外,我通常将自定义键绑定限定在次要模式或主模式键映射中,并尽可能避免使用global-set-key。这有助于保持键映射中的空隙。

例如,我在minibuffer-local-map中覆盖了C-r,以更改minibuffer中的路径为“已解析”路径名。 因此,虽然C-r在全局范围内被绑定到'isearch-reverse,但我在minibuffer中不会错过该绑定(如果我开始在minibuffer中向前搜索,则可用)。

另一个例子是我写了something,它会杀死所有文件名与当前缓冲区相匹配的其他缓冲区。 C-x k'kill-buffer',而幸运的是,C-x K 对我的'kill-other-buffers-of-this-file-name'来说是空闲的,我喜欢它因为它是原始键绑定的轻微变化。这是一个全局设置,但我确实希望这个功能在全局范围内可用。


此外,C-x C-k 0 到 C-x C-k 9 和 C-x C-k A 到 C-x C-k Z 保留用于键盘宏,如果需要的话可以使用它们。(http://www.gnu.org/software/emacs/manual/html_node/emacs/Keymaps.html#Keymaps) - James Sulak
在参考文献中我没有看到任何关于 C-c 或者 C-c C-k 前缀约定的提及:http://www.gnu.org/software/emacs/manual/html_node/emacs/Keymaps.html#Keymaps。 - ntc2

3
请记住,所有保留的序列都可以轻松地用作前缀绑定,如果您想将相关任务分组在一起,或者仅想充分利用特定易于键入的C-c<letter>序列。例如,我使用C-cm作为我想要快速访问的某些 magit(和相关)功能的前缀,例如:
(global-set-key (kbd "C-c m m") 'magit-status)
(global-set-key (kbd "C-c m l") 'magit-key-mode-popup-logging
(global-set-key (kbd "C-c m b") 'mo-git-blame-current)

当然了,C-cmC-h会显示我在该前缀下的所有绑定。

-4

不,如果是你的配置,你可以将任何命令映射到任何你想要的键上。

如果你正在创建自己的模式或库,请选择尚未被占用的按键绑定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接