重新定义的键无法正常工作

时间:2014-03-31 11:50:41

标签: plugins emacs key

我已在init.el文件中重新定义了一些基本移动函数的键绑定:

(global-set-key "\C-j" 'backward-char)
(global-set-key "\C-k" 'next-line)
(global-set-key "\C-l" 'forward-char)
(keyboard-translate ?\C-i ?\H-i)
(global-set-key [?\H-i] 'previous-line)

(global-set-key "\M-j" 'backward-word)
(global-set-key "\M-l" 'forward-word)

一般来说(文本编辑)它完全有效,但在某些模式下它会执行多个命令,例如:在Buffer模式下按 C-k 除了向下移动光标外,Emacs标记列出的缓冲区以进行删除。此外,当我用 Cc ph 调用helm-prelude并按下其中一个键绑定时,Emacs根本不会做出反应,或者在 Ck 的情况下,清除搜索栏。我认为global-set-key的目的是将命令绑定到任何地方的特定键,我错了吗?

2 个答案:

答案 0 :(得分:1)

本地(例如,主要模式)键盘映射绑定特朗普全局键映射(global-map)绑定。 次模式键映射绑定胜过这两者。

有几个键映射类型的层次结构可确定哪些映射优先。请参阅Elisp手册,节点Controlling Active Maps(以及有关键映射的附近节点)。完整的层次结构有点复杂,但大多数时候你需要注意的是我在前一段中所说的。

答案 1 :(得分:0)

是的,全局键映射仅在没有对本地键映射中按下的键进行绑定时使用。例如,缓冲区菜单模式使用Buffer-menu-mode-map,其中C-k绑定到Buffer-menu-delete

使用keyboard-translate将这些密钥翻译为" normal" Emacs绑定这些命令,即C-pC-n等。