参考自 Rebinding Keys in Your Init File
(define-key KEYMAP KEY DEF)
(local-set-key KEY COMMAND) ; local keymap used by the active buffer
(global-set-key KEY COMMAND)
(global-unset-key KEY)
(local-unset-key KEY)
global是全局范围的按键绑定,各个mode会有自己的绑定, 会覆盖掉global。
第一种方式为使用global-set-key
:
(global-set-key (kbd "C-z") 'shell)
kbd
能把文本转换为一种global-set-key
能接受的参数形式。
注意shell前的引号,如果没有Emacs会eval它的值。
(global-set-key (kbd "C-c y") 'clipboard-yank)
(global-set-key (kbd "C-M-q") 'query-replace)
(global-set-key (kbd "<f5>") 'flyspell-mode)
(global-set-key (kbd "C-<f5>") 'linum-mode)
(global-set-key (kbd "C-<right>") 'forward-sentence)
(global-set-key (kbd "<mouse-2>") 'mouse-save-then-kill)
先定义prefix绑定, 是比较好的习惯。
(global-set-key (kbd "C-e") nil)
(global-set-key (kbd "C-e SPC") 'calendar) ; Ctrl+e Space
这里让我们看下define-key
的定义
(define-key KEYMAP KEY DEF)
下面的KEYMAP
就是textinfo-mode-map。
在载入主要mode前,会执行对应hook。
如下,给textinfo mode
绑定按键。
(add-hook 'texinfo-mode-hook
(lambda ()
(define-key texinfo-mode-map "\C-cp"
'backward-paragraph)
(define-key texinfo-mode-map (kbd "C-c y")
'hello)))
(defun enable-my-elisp-settings ()
(local-set-key (kbd "C-m") 'newline-and-indent))
(add-hook 'emacs-lisp-mode-hook 'enable-settings)
帮助:输入函数名
C-h f
+ function name
(make-sparse-keymap &optional prompt)
: 创建一个sparse keymap。
适用于自定义键比较少的情况。多数情况使用这种。
(make-keymap)
: 创建一个full keymap。
define-key
会改变keymap
Effective Emacs 名字虽然看上去不相关。