3

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

例如,我有键绑定 Mc 来大写一个单词。
在我安装了一些 3rd 方 emacs 包后,它被更改为 calc-dispatch。

我想像以前一样使用 Mc 作为大写,并将 calc-dispatch 设置为其他内容。

一般来说,我该怎么做?

4

2 回答 2

2

键绑定映射按顺序加载。稍后加载的键绑定映射将具有更高的优先级。这就是本地键映射将覆盖全局键映射的原因,因为全局键映射在本地键映射(模式键映射)之前加载。 这里不对劲。看看菲尔斯的评论。

我解决此问题的方法是向该指定模式添加一个挂钩以禁用该键绑定并将其重新绑定到该键映射中的其他键。

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

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

其次,删除该M-c模式下的绑定并使用钩子重新绑定到其他键。

例如,在python模式下,我想删除绑定C-jpy-newline-and-indent)。并将其重新绑定到C-i. 因为我在全球范围内绑定C-jlinum-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)))
于 2013-01-14T10:25:47.793 回答
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 "Mc) 'capitalize-word)。

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

通常是解除绑定一个键(全局)。

您只需使用谷歌搜索即可轻松找到更多相关信息。

于 2013-01-14T09:59:13.200 回答