Emacs - 密钥重新绑定不起作用



我想使用撤消树模式,并且已成功设置撤消/重做键绑定。

但是,当我尝试用我编写的注释函数覆盖默认的 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' 是为用户映射保留的,理论上不应被任何其他模式覆盖,因此您可以考虑改用这些绑定之一。

最新更新