emacs未绑定密钥绑定
如何清除绑定或编辑emacs包提供的绑定 例如,我用M-c键绑定来大写一个单词。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包之后,它被更改为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)))