如何从Emacs中的次模式键映射中删除键?

mal*_*ana 33 emacs elisp keyboard-shortcuts

我已全局分配C-c/到ace-jump-mode但是reftex-mode(与AucTeX一起使用的引用的次要模式)用我从未使用过的某个函数覆盖了这个键.

我试过local-unset-key但它只解除了当前主要模式地图中的键.

如何C-c/reftex-mode-map不更改reftex.el的情况下删除?

Lin*_*cer 44

您可以使用更改现有的键映射define-key.通过nil作为调用函数传递,密钥将变为未绑定.我猜你应该可以这样做:

(define-key reftex-mode-map "\C-c/" nil)
Run Code Online (Sandbox Code Playgroud)

当然,你应该在某种钩子中做到这一点,例如:

(defun my-reftex-hook ()
  (define-key reftex-mode-map "\C-c/" nil))
(add-hook 'reftex-mode-hook 'my-reftex-hook)
Run Code Online (Sandbox Code Playgroud)

  • 不.不要从钩子中调用define-key,除非是非常具体的模式,它们会积极地强制执行自己的绑定.我实际上想不出任何例子.每个次要/主要模式只有一个键映射,因此每次进入模式时都无需重复修改它.请改用"eval-after-load". (17认同)
  • 需要明确的是,@event_jr 提出了类似`(eval-after-load 'reftex '(define-key reftex-mode-map "\Cc/" nil))` 的建议。`eval-after-load` 的第一个参数——这里是 `reftex` —— 是模式“提供”的名称。 (2认同)

Ale*_*Ott 7

您可以使用以下命令:

(define-key reftex-mode-map "\C-c/" nil)
Run Code Online (Sandbox Code Playgroud)

C-c /... 取消映射此函数但是reftex-mode应该加载,因此reftex-mode-map可以进行修改