Emacs 是一个历史悠久的文本编辑器(最初版本发布于 1976 年)。它的核心是一个 Emacs Lisp(Lisp 编程语言的一种方言)的解释器,这给予了它近乎变态的扩展性和定制性。
Emacs 有着“神之编辑器”和“伪装成操作系统的编辑器”的称号,功能的强大与灵活可想而知。
一、进入 emacs
直接在终端输入 emacs
命令即可进入 emacs 编辑器,该命令后面可跟一个或多个需要编辑的文件。
使用 --no--init-file
或 -q
选项可以在启动时不使用任何初始配置文件( ~/.emacs 或 default.el )
当然这个界面,看上去稍微有些年代感……
稍微修改一下启动配置文件(~/.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-s
或 C-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