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

时间:2014-02-09 19:37:09

标签: emacs elisp loading key-bindings

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

但是,当我尝试使用我编写的注释函数覆盖默认的 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之后加载它,因此可以调用my-commenting-function。

尝试此操作后,启用了撤消树模式后, C - / 仍然绑定到undo-tree-undo而不是my-commenting-function。

如何将 C - / 的撤消树模式键绑定更改为我想要的功能?

2 个答案:

答案 0 :(得分:4)

执行此操作以定义全局绑定:

(global-set-key (kbd "C-/") 'my-commenting-function)

这样做是为了阻止次要模式覆盖它:

(define-key undo-tree-map (kbd "C-/") nil) 

答案 1 :(得分:1)

正如@ 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'字母'是为用户映射保留的,理论上不应该被任何其他模式覆盖,所以你可以考虑使用其中一个绑定。