如何在Emacs中从次要模式密钥映射中删除密钥?

如何在Emacs中从次要模式密钥映射中删除密钥?,emacs,keyboard-shortcuts,elisp,Emacs,Keyboard Shortcuts,Elisp,我已将C-C/全局分配给ace跳转模式,但reftex模式(与AucTeX一起使用的引用的次要模式)使用一些我从未使用过的功能覆盖该键 我尝试了localunset key,但它只从当前主模式的映射中解除键的绑定 如何从reftex模式映射中删除C-C/,而不更改reftex.el?您可以使用定义键更改现有键映射。通过将nil作为要调用的函数传递,该键将被解除绑定。我想你应该能够做一些事情,比如: (define-key reftex-mode-map "\C-c/" nil) 当然,您应该在

我已将
C-C/
全局分配给ace跳转模式,但reftex模式(与AucTeX一起使用的引用的次要模式)使用一些我从未使用过的功能覆盖该键

我尝试了
localunset key
,但它只从当前主模式的映射中解除键的绑定


如何从
reftex模式映射
中删除
C-C/
,而不更改reftex.el?

您可以使用
定义键
更改现有键映射。通过将
nil
作为要调用的函数传递,该键将被解除绑定。我想你应该能够做一些事情,比如:

(define-key reftex-mode-map "\C-c/" nil)
当然,您应该在某种钩子中执行此操作,例如:

(defun my-reftex-hook ()
  (define-key reftex-mode-map "\C-c/" nil))
(add-hook 'reftex-mode-hook 'my-reftex-hook)

您可以使用以下命令:

(define-key reftex-mode-map "\C-c/" nil)

要从
C-C/
取消映射此函数,请执行以下操作。。。但是应该加载
reftex模式
,因此
reftex模式映射
将可用于修改

我就是这样做的。不过,它还可以改进

 (defun get-key-combo (key)
  "Just return the key combo entered by the user"
  (interactive "kKey combo: ")
  key)

(defun keymap-unset-key (key keymap)
    "Remove binding of KEY in a keymap
    KEY is a string or vector representing a sequence of keystrokes."
    (interactive
     (list (call-interactively #'get-key-combo)
           (completing-read "Which map: " minor-mode-map-alist nil t)))
    (let ((map (rest (assoc (intern keymap) minor-mode-map-alist))))
      (when map
        (define-key map key nil)
        (message  "%s unbound for %s" key keymap))))
;;
;; Then use it interativly
;; Or like this:

(keymap-unset-key  '[C-M-left]   "paredit-mode")
..
..

不可以。不要从钩子中调用define键,除非非常特定的模式积极地强制执行它自己的绑定。实际上我想不出任何例子。每个次要/主要模式只有一个键映射,因此每次进入该模式时重复修改它没有意义。改为使用加载后评估。多亏了这两种方法。我没有想到用nil来取消键的定义。加载后评估提示完成回答。我将接受答案和+1注释。要清楚的是,@event\u jr建议类似于
(加载'reftex'(define key reftex mode map“\C-C/“nil”)后求值)
。加载后评估的第一个参数是模式“提供”的名称。作为对事件的响应,这里有一个积极实施模式自身绑定的示例:flyspell模式。有时它会覆盖我的键绑定,即使我在加载后使用eval将其设置为null,然后在我的模式下将其设置为我想要的值。
(define key reftex mode map“\C-C/”nil:append t)
如果绑定本身是在钩子中定义的,则追加。这对于交互使用非常有用。我通常这样做是为了找出要从哪个映射中删除密钥,以及密钥的名称。然后在源代码中查找地图,并知道要解除绑定的键的名称,就更容易了。例如,Ctrl-|是键[67108988]。然后我使用repeat complex命令将其剪切并粘贴到.emacs中。