emacs未绑定的密钥绑定

时间:2013-01-14 09:51:08

标签: emacs key-bindings

如何清除绑定或编辑emacs包提供的绑定?

例如,我有一个键绑定M-c来大写一个词 在我安装了一些第三方emacs包之后,它被更改为calc-dispatch。

我想像以前一样使用M-c作为大写,并将calc-dispatch设置为其他东西。

我一般如何做到这一点?

2 个答案:

答案 0 :(得分:2)

keybind地图按订单加载。稍后加载的keybind映射将具有更高的优先级。这就是本地键映射将覆盖全局键映射的原因,因为全局键映射是在本地键映射(模式键映射)之前加载的。 这里有些错误。看看菲尔斯的评论。

我解决这个问题的方法是在指定模式下添加一个钩子来禁用该键绑定并将其重新绑定到该键映射中的其他键。

首先,您需要找到定义 M-c 绑定到calc-dispatch的键映射名称。 它通常是mode namemode-map的组合。

例如,python模式键映射的名称为py-mode-map

第二次,在该模式下删除 M-c 绑定并使用hook重新绑定到其他键。

例如,在python模式下,我想删除bind C-j py-newline-and-indent)。并将其重新绑定到 C-i 。因为全局我将 C-j 绑定到linum-ace-jump。这与你的情况类似。

(add-hook 'python-mode-hook 
          #'(lambda () 
              (define-key py-mode-map "\C-j" nil)
              (define-key py-mode-map "\C-i" 'py-newline-and-indent)))

答案 1 :(得分:1)

你要求的是:

(global-set-key (kbd "M-c") 'capitalize-word)

这通常是全局设置单词的方式。

也许如果你想要将两者放在一起,你可以试试这个:

(substitute-key-definition
           'capitalize-word 'calc-dispatch (current-global-map))



(define-key KEYMAPNAME (kbd "KEYCOMBO") 'FUNCNAME)

是针对特定模式。例如:(define-key emacs-lisp-mode(kbd“M-c)'capitalize-word)。

(global-set-key (kbd "M-c") nil)

通常是取消绑定一个密钥(全局)。

您可以通过Google搜索轻松找到更多信息。