我想使用撤消树模式,并且已成功设置撤消/重做键绑定。
但是,当我尝试用我编写的注释函数覆盖默认的 C-/ 绑定时,该组合仍然绑定到 undo-tree-undo。
这是我尝试过的:
(eval-after-load 'my-functions
'(eval-after-load 'undo-tree
'(define-key global-map (kbd "C-/") 'my-commenting-function)))
我在 my-functions 之后加载它,以便可以调用我的注释函数。
尝试此操作后,在启用撤消树模式的情况下,C-/ 仍绑定到撤消树撤消而不是我的注释函数。
如何将 C-/ 的撤消树模式键绑定更改为我想要的功能?
执行此操作以定义全局绑定:
(global-set-key (kbd "C-/") 'my-commenting-function)
执行此操作以阻止次要模式覆盖它:
(define-key undo-tree-map (kbd "C-/") nil)
正如 @abo-abo 所提到的,问题是计算键绑定的顺序。如果你阅读了 Emacs 文档 (http://www.gnu.org/software/emacs/manual/html_node/elisp/Active-Keymaps.html#Active-Keymaps),你会看到按键映射是按顺序搜索的:
keymap, minor mode maps, local keymap, global keymap
有两种方法可以避免您描述的混叠类型。修改任何冲突的次要模式键映射,或者直接设置缓冲区键盘映射(例如使用钩子函数)。此外,还有一个约定,即 C-c'letter' 是为用户映射保留的,理论上不应被任何其他模式覆盖,因此您可以考虑改用这些绑定之一。