emacs未绑定密钥绑定

emacs未绑定密钥绑定,emacs,key-bindings,Emacs,Key Bindings,如何清除绑定或编辑emacs包提供的绑定 例如,我用M-c键绑定来大写一个单词。 在我安装了一些第三方emacs包之后,它被更改为calc dispatch 我想像以前一样使用M-c作为大写,并将calc dispatch设置为其他内容 一般来说,我怎样才能做到这一点 你要求的是: (global-set-key (kbd "M-c") 'capitalize-word) 这通常是全局设置单词的方法 如果您想将这两个位置替换为子位置,可以尝试以下方法: (substitute-key-defi

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

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

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

一般来说,我怎样才能做到这一点

你要求的是:

(global-set-key (kbd "M-c") 'capitalize-word)
这通常是全局设置单词的方法

如果您想将这两个位置替换为子位置,可以尝试以下方法:

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



(define-key KEYMAPNAME (kbd "KEYCOMBO") 'FUNCNAME)
用于特定模式。例如:(定义键emacs lisp模式(kbd“M-c)”的大写单词)

通常是(全局)解除密钥绑定

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

键绑定映射是按顺序加载的。稍后加载的键绑定映射将具有更高的优先级。这就是为什么本地键映射将覆盖全局键映射,因为全局键映射是在本地键映射(模式键映射)之前加载的.这里出了点问题。请看phils的评论。

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

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

例如,python模式键映射的名称是
py模式映射

第二步,在该模式下移除M-c绑定,然后使用钩子重新绑定到其他键

例如,在python模式下,我想删除绑定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)))

我不认为这是完全准确的?加载顺序肯定会影响次要模式键映射的优先级(因为如果不进行其他操作,
次要模式映射列表
的顺序是由加载顺序决定的),但我的理解是,全局键图是在最后显式搜索的,而不仅仅是作为加载顺序的副作用。请参见
C-h i g
(elisp)搜索键图
(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)))