我已在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
的目的是将命令绑定到任何地方的特定键,我错了吗?
答案 0 :(得分:1)
本地(例如,主要模式)键盘映射绑定特朗普全局键映射(global-map
)绑定。 次模式键映射绑定胜过这两者。
有几个键映射类型的层次结构可确定哪些映射优先。请参阅Elisp手册,节点Controlling Active Maps
(以及有关键映射的附近节点)。完整的层次结构有点复杂,但大多数时候你需要注意的是我在前一段中所说的。
答案 1 :(得分:0)
是的,全局键映射仅在没有对本地键映射中按下的键进行绑定时使用。例如,缓冲区菜单模式使用Buffer-menu-mode-map
,其中C-k
绑定到Buffer-menu-delete
。
使用keyboard-translate
将这些密钥翻译为" normal" Emacs绑定这些命令,即C-p
,C-n
等。