emacs 速查手册

Emacs 是一个历史悠久的文本编辑器(最初版本发布于 1976 年)。它的核心是一个 Emacs Lisp(Lisp 编程语言的一种方言)的解释器,这给予了它近乎变态的扩展性定制性
Emacs 有着“神之编辑器”和“伪装成操作系统的编辑器”的称号,功能的强大与灵活可想而知。

一、进入 emacs

直接在终端输入 emacs 命令即可进入 emacs 编辑器,该命令后面可跟一个或多个需要编辑的文件。
使用 --no--init-file-q 选项可以在启动时不使用任何初始配置文件( ~/.emacsdefault.el
GNU Emacs 默认界面
当然这个界面,看上去稍微有些年代感……
稍微修改一下启动配置文件(~/.emacs),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
; .emacs 界面配置
(setq default-frame-alist
'((vertical-scroll-bars)
(top . 25)
(left . 45)
(background-color . "black")
(foreground-color . "grey")
(cursor-color . "gold1")
(tool-bar-lines . 0)
(menu-bar-lines . 1)))
(set-default-font "Source Code Pro 16")
(setq inhibit-startup-message t)

修改后的效果:自定义界面

二、退出 emacs

组合键定义:
C 表示 Ctrl 键,M 表示 Windows系统里的 alt 键和 MacOS 系统里的 option 键。

功能 快捷键 命令(按下 M-x 后输入)
挂起 emacs(在图形模式下:最小化/还原 C-z suspend-emacs(suspend-frame)
退出 emacs C-x C-c save-buffers-kill-terminal

三、文件操作

功能 快捷键 命令(按下 M-x 后输入)
读取文件内容到 emacs 中(打开文件) C-x C-f find-file
保存文件 C-x C-s save-buffer
保存所有文件 C-x s save-some-buffers
将另一个文件的内容插入到当前正在编辑的文件中 C-x i insert-file
关闭当前文件并打开另一个文件 C-x C-v find-alternate-file
将当前 buffer 中的内容写入到指定的文件(另存为) C-x C-w write-file
启用/关闭当前 buffer 的只读模式 C-x C-q read-only-mode

四、获取帮助

功能 快捷键 命令
新手指引 C-h t help-with-tutorial
显示匹配指定正则表达式的命令 C-h a apropos-command
显示绑定指定快捷键的函数的帮助信息 C-h k describe-key
显示指定函数(命令)的帮助信息 C-h f describe-function
显示 Mode 相关的信息 C-h m describe-mode

五、错误恢复

功能 快捷键 命令
中断正在输入或执行中的命令 C-g keyboard-quit
恢复由于系统崩溃未保存的文件 M-x recover-session recover-session
撤销不想要的操作 C-x u 或 C-_ 或 C-/ undo
将 buffer 恢复到初始状态 M-x revert-buffer revert-buffer

六、增量搜索

功能 快捷键 命令
向前搜索(向文档底部搜索) C-s isearch-repeat-forward
向后搜索(向文档顶部搜索) C-r isearch-repeat-backward
正则表达式搜索(向文档底部) C-M-s isearch-forward-regexp
正则表达式搜索(想文档顶部) C-M-r isearch-backward-regexp
中断当前搜索 C-g keyboard-quit

重复使用 C-sC-r 可以继续当前方向对同一关键字的搜索(即跳转到下一个匹配项)

七、Buffers

功能 快捷键 命令
列出所有的 Buffer 信息 C-x C-b list-buffers
切换到另一个 Buffer C-x b switch-to-buffer
关闭 Buffer C-x k kill-buffer

八、Shell 命令

功能 快捷键 命令
执行 Shell 命令 M-! shell-command
异步执行 Shell 命令 M-& async-shell-command
开启一个 *Shell* 窗口用于执行命令 M-x shell shell

九、移动

对象 方向向后(文档顶部) 方向向前(文档底部)
字符 C-b C-f
单词 M-b M-f
C-p C-n
跳转到行首(行尾) C-a C-e
句子 M-a M-e
段落 M-{ M-}
页面 C-x [ C-x ]
函数 C-M-a C-M-e
跳转到文档开头(结尾) M-< M->

十、跳转

功能 快捷键 命令
滚动到下(后)一屏 C-v scroll-up-command
滚动到上(前)一屏 M-v scroll-down-command
向左滚动屏幕 C-x < scroll-left
向右滚动屏幕 C-x > scroll-right
将当前行置于屏幕中央/顶部/底部 C-l recenter-top-bottom
跳转到指定行 M-g g goto-line
跳转到指定字符 M-g c goto-char

十一、选择

功能 快捷键 命令
在当前位置设置标记 C-@ set-mark-command
选中整个段落 M-h mark-paragrath
选中整个页面 C-x C-p mark-page
选中整个函数 C-M-h mark-defun
选中整个 Buffer C-x h mark-whole-buffer

十二、搜索替换

功能 快捷键 命令
以交互的方式检索并替换字符串 M-% query-replace
使用正则表达式检索替换 M-x query-replace-regexp query-replace-regexp
交换模式中的合法输入
替换当前匹配并跳转到下一个 SPACE 或 y
替换当前匹配后不做移动 ,
跳过当前匹配直接到下一个 DELETE 或 n
替换剩余的所有匹配项 !
跳转到上一个匹配项 ^
退出搜索替换模式 ENTER

十三、多窗口

功能 快捷键 命令
关闭其他所有窗口(只显示当前窗口) C-x 1 delete-other-windows
分割当前窗口(上下) C-x 2 split-window-below
关闭当前窗口 C-x 0 delete-window
分割当前窗口(左右) C-x 3 split-window-right
滚动另一个窗口的内容 C-M-v scroll-other-window
移动光标到另一个窗口 C-x o other-window
在另一个窗口打开文件 C-x 4 f find-file-other-window
在另一个窗口运行 Dired C-x 4 d dired-other-window
增大当前窗口高度 C-x ^ enlarge-window
缩减当前窗口宽度 C-x { shrink-window-horizontally
增大当前窗口宽度 C-x } enlarge-window-horizontally

十四、Minibuffer

功能 快捷键
尽可能补全 TAB
补全至一个完整单词 SPACE
补全并执行 ENTER
显示所有可能的补全结果 ?
获取上一个输入 M-p
获取下一个或默认输入 M-n
向后搜索输入历史(正则表达式) M-r
向前搜索输入历史(正则表达式) M-s
中断命令或输入 C-g

十五、简单定制

功能 按键
定义变量或外观 M-x customize
自定义全局按键映射(例子) (global-set-key (kbd “C-c g”) ‘search-forward)

参考资料 & 拓展阅读

Emacs Reference Cards
GNU Emacs manual
An Introduction to Programming in Emacs Lisp
Emacs Lisp Reference Manual