Emacs 菜鸡教程

Keybindings

参考自 Rebinding Keys in Your Init File

Commands

(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 key bindings

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)

Key Sequence

先定义prefix绑定, 是比较好的习惯。

(global-set-key (kbd "C-e") nil)
(global-set-key (kbd "C-e SPC") 'calendar)  ; Ctrl+e Space

Define key

这里让我们看下define-key的定义

(define-key KEYMAP KEY DEF)

下面的KEYMAP就是textinfo-mode-map。

Hooks

在载入主要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)

Default Key bindings

帮助:输入函数名

C-h f + function name

keymaps

Creating Keymaps

(make-sparse-keymap &optional prompt): 创建一个sparse keymap。 适用于自定义键比较少的情况。多数情况使用这种。

(make-keymap): 创建一个full keymap。

Changing key bindings

define-key会改变keymap

其他资料

Effective Emacs 名字虽然看上去不相关。

Why you Should Not Swap {Caps Lock, Ctrl} Keys 用手掌按Ctrl

Mastering Key Bindings in Emacs 很多好例子。