Emacs 快捷键速查表 - Emacs 编辑器常用快捷键大全
Emacs 默认有上千条命令,让你真正每天用的其实就一小部分。本表把文件与缓冲区、移动/编辑、搜索、窗口、键盘宏、Org-mode 分组整理,开头先讲清 C=Ctrl、M=Alt/Meta 的前缀记法,以及 C-x C-s 这种"按住 Ctrl 连按两键"的组合规则。终端环境里写代码、或被模态编辑劝退的人尤其适用,读完能流畅完成打开、保存、切缓冲区、录制宏这些高频操作,不再被这个"编辑器操作系统"劝退。
典型使用场景
适合愿意用一套键位贯通编辑、代码、Org-mode 与知识管理的人,尤其是需要在无图形界面或纯键盘环境下长时间工作的开发者。表里的主脉络是:文件与缓冲区用 C-x 前缀成体系管理(打开、保存、切缓冲、分屏),移动用 C/M 前缀分层(C 系列按字符、M 系列按词、C-a/C-e 卡行首尾),编辑靠 mark 加移动选区再用 C-w/M-w/C-y 三件套,搜索替换既有增量搜索也有交互式 M-%。往上还有两块能显著提速的能力:键盘宏把重复的成串按键录成一条命令,C-u 10 C-x e 直接放大执行倍数;Org-mode 用星号层级和 TODO 状态把普通文本变成可导航的任务与大纲。遇到任何半途操作,C-g 都是安全的退路。
文件与缓冲区 10
C-x C-fC-x C-sC-x C-wC-x bC-x kC-x C-cC-x 1C-x 2C-x 3C-x o光标移动 7
C-f / C-bM-f / M-bC-a / C-eC-n / C-pM-< / M->C-v / M-vM-g g编辑操作 12
C-SpaceC-wM-wC-yM-yC-dM-dC-kC-x C-uC-x C-lC-/C-g搜索与替换 5
C-sC-rM-x replace-stringM-x replace-regexpM-%窗口与书签 Windows & Bookmarks 5
C-x 0C-x ^C-x }C-x r mC-x r b键盘宏 Keyboard Macros 4
F3 / C-x (F4 / C-x )C-x eC-u 10 C-x eOrg-mode 5
* / ** / ***- / 1.C-c C-t<s TabC-c C-c参数矩阵
| 参数 | 作用 | 示例 |
|---|---|---|
C-x C-f | 打开文件 | C-x C-f |
C-x C-s | 保存当前缓冲区 | C-x C-s |
C-x C-w | 另存为新文件 | C-x C-w |
C-x b / C-x k | 切换缓冲区 / 关闭缓冲区 | C-x b |
C-x 1 / 2 / 3 | 只留当前窗口 / 上下分屏 / 左右分屏 | C-x 3 |
C-x o | 切换到其他窗口 | C-x o |
C-f / C-b | 前进 / 后退一个字符 | C-f |
M-f / M-b | 前进 / 后退一个单词 | M-f |
C-a / C-e | 跳到行首 / 行尾 | C-e |
C-n / C-p | 下一行 / 上一行 | C-n |
M-< / M-> | 跳到文件开头 / 结尾 | M-> |
C-v / M-v | 向下 / 向上翻页 | M-v |
M-g g | 跳转到指定行号 | M-g g |
C-Space | 设置标记,移动光标即选中区域 | C-Space |
C-w / M-w | 剪切选区 / 复制选区 | M-w |
C-y / M-y | 粘贴 / 在粘贴历史中循环选择 | M-y |
C-d / M-d | 删除后一个字符 / 后一个单词 | M-d |
C-k | 删除到行尾 | C-k |
C-x C-u / C-x C-l | 把选区转大写 / 转小写 | C-x C-u |
C-/ | 撤销 | C-/ |
C-g | 取消当前操作,万能退出键 | C-g |
C-s / C-r | 向前 / 向后增量搜索 | C-r |
M-% | 交互式替换,逐个确认 | M-% |
M-x replace-string | 命令式替换字符串 | M-x replace-string |
M-x replace-regexp | 按正则表达式替换 | M-x replace-regexp |
C-x 0 / C-x ^ / C-x } | 删除当前窗口 / 窗口增高 / 窗口增宽 | C-x } |
C-x r m / C-x r b | 设置书签 / 跳转到书签 | C-x r m |
F3 或 C-x ( | 开始录制键盘宏 | F3 |
F4 或 C-x ) | 结束录制 | F4 |
C-x e | 执行上一次录制的宏 | C-x e |
C-u 10 C-x e | 把宏重复执行 10 次 | C-u 10 C-x e |
* / ** / *** | Org-mode 标题,星号数量决定层级 | ** 二级标题 |
C-c C-t | 切换当前条目的 TODO 状态 | C-c C-t |
<s Tab | 插入代码块模板 | <s Tab |
C-c C-c | 确认或执行标签、代码块 | C-c C-c |
易错点与避坑指南
现象输入 M-x 后某个命令没反应,minibuffer 也没提示
原因Meta 键位被窗口管理器或输入法抢走,Emacs 没收到 M 前缀
处置改用 ESC 前缀代替 M(如 ESC x),或检查窗口管理器的全局快捷键是否与 M-f、M-w 冲突
现象剪切一大段后想换回上一份剪贴内容,粘出来还是刚剪切的那段
原因C-y 默认只 yank 最新的 kill,C-y 之后紧跟 M-y 才会向前翻历史
处置连续按 M-y 在 kill ring 里循环,直到出现想要的那一份内容
现象误触了一个长命令,屏幕半停在那儿不知道怎么办
原因Emacs 的命令多为前缀式,敲完前缀后会等待后续按键
处置直接按 C-g 取消当前操作回到正常状态,这一条适用于几乎所有卡住的场景
现象开了几个分屏后找不到之前的编辑位置,来回切窗口很费劲
原因没有使用书签记录跳转点,只能靠 C-x o 逐个试
处置在常用跳转处按 C-x r m 设书签,之后用 C-x r b 直接回到该处
现象录完宏一执行就把光标和内容一起冲乱了
原因录制时把选区、跳转等带上下文的操作也录了进去,宏执行时上下文不一致
处置录制时只保留纯编辑动作,执行后立刻用 C-/ 撤销异常结果再重新调整宏
现象在 Org 文件里改了文字,但大纲结构和任务状态没跟着变
原因标题层级靠行首星号数量表达,手动缩进或删掉行首星号会让该行退化成普通段落
处置确保标题星号从行首开始且不缩进,任务状态统一用 C-c C-t 切换而不是手打关键字
现象想选中一段文字但只剪切了一个词
原因没有先设置 mark 就直接执行剪切,Emacs 剪切的是从光标到目标点的区域
处置按 C-Space 设置 mark,移动光标圈定区域后再按 C-w 剪切或 M-w 复制
排障路径
1不知道当前处于什么命令状态时强制回到干净状态
C-g任意半途操作按 C-g 都能取消,这是 Emacs 最值得先记住的一条。
2圈选一段文本用于剪切或复制
C-Space设置 mark 后移动光标(C-f、M-f、C-n 都可)圈定区域,再接 C-w 或 M-w。
3在多份文件之间快速切换而不重新打开
C-x b在缓冲区列表里回车即可切换,无需重新 C-x C-f。
4批量处理重复的成串按键
F3开始录制,正常操作一遍后按 F4 结束,再按 C-x e 重放整个序列。
5让一段重复动作一次跑十遍
C-u 10 C-x e数字前缀先设定重复次数,再执行宏,适合批量加前缀、逐行处理。
6逐个确认地替换全文出现的字符串
M-%交互式替换,可逐处选择替换、跳过或退出,适合不想一次改坏全文的场景。
7在 Org 文件里确认并执行代码块
C-c C-c同样用于确认标签;未保存时 Emacs 会提示先保存文件。
命令示例
C-g 是万能退出键
C-g // 取消当前操作(万能退出)几乎任何「Emacs 现在不听我的了」的状态都能用 C-g 打断:minibuffer 里输入了一半、误触了递归编辑、宏录制卡住。它不撤销任何操作,只终止当前这一层交互——所以卡住时先按它,别急着重启。
标—复制—粘贴的基本循环
C-Space // 设置标记(开始选区)
M-w // 复制选区
C-y // 粘贴(yank)先移动光标定起点,C-Space 打标记,移动光标到终点,再执行操作。剪切用 C-w 而删除用 C-d:区别在于 kill 掉的内容进了 kill ring,可以用 C-y 或 M-y 反复取回,而 C-d 是真删。
交互式正则替换:逐条确认而不是一刀切
M-% // 交互式替换(逐个确认)y 替换当前、n 跳过、a 之后全部替换、q 退出、s 进入递归编辑。把变量名或日志级别这类需要看上下文才能决定的替换交给 Emacs,而不是先用 sed 全量改完再回滚。
输出
Query replacing `old` with `new` (from beginning of buffer): (y/n/a/q/s/r .)
录制一段宏并重复执行
F3 // 开始录制键盘宏
C-x ( // 开始录制键盘宏
F4 // 结束录制
C-x e // 执行上次录制的宏
C-u 10 C-x e // 执行宏 10 次宏录制把一串编辑动作固化成可重放的按键,适合在几十处重复做同一件事。C-u 加数字前缀把执行次数传给宏,一次 F4 之后接 C-u N C-x e 就能批量重复。
输出
F3 结束录制
书签:跨文件来回跳
C-x r m // 设置书签
C-x r b // 跳转到书签在长文件或跨文件追踪同一段逻辑时,先在关键位置 C-x r m 打书签,再用 C-x r b 弹到列表里跳转。它比 M-x goto-line 好用,因为位置由文件自己维护,不会因为增删行而漂移。
分屏看两个文件
C-x 3 // 左右分屏
C-x o // 切换到其他窗口
C-x 1 // 只保留当前窗口
C-x 0 // 删除当前窗口C-x 3 左右切开后 C-x o 在窗口间循环,C-x 1 收掉其它窗口只留当前这个。频繁在同一文件的不同位置切换时用 C-x ^ / C-x } 调整窗口高宽,比反复开关窗口省事。
常见坑与注意事项
- C-x C-s 直接保存、没有任何提示,没保存就关窗口也不会问你;Emacs 不像多数编辑器那样保护未保存的缓冲区。
- 开始录制宏(F3 / C-x ()后忘了 C-x ) 或 F4 结束,后续所有按键都会被录进宏里,出问题时 C-g 只能退出而历史已乱。
- C-w 剪切会覆盖 kill ring 顶部的旧内容:紧接着再 C-w 一次,第一次的内容就从可取回历史里挤掉了;重要片段先粘到别处。
- M-% 交互式替换里按错 a(之后全部替换)不可撤销地批量改掉剩余匹配,可能远超预期范围;确认阶段保持 y/n 最安全。
- C-g 在 minibuffer 里是清空当前输入而不是退出 Emacs;但在文件缓冲里按它只终止当前操作,不能撤销已经发生的修改。
- C-x k 关闭缓冲区不会提示保存,被关掉的是未保存的修改就找不回来了;缓冲区可以随时用 C-x b 找回来,但先记住这个习惯。
提示
- Emacs 约定 C 是 Ctrl,M 是 Meta(Alt 键)。C-x 是扩展命令前缀。
- C-g 是万能取消键,按错任何操作按它就能回到正常状态。
- C-Space 设置 mark 后移动光标即选中区域,再 C-w 剪切或 M-w 复制。
常见问题
C-g 到底能取消什么?为什么迷路了第一反应就该按它?
C-g 是 Emacs 的「万能取消键」:凡是进入某种子模式或等待输入的状态——C-s 增量搜索、M-x 调起命令后的 minibuffer 输入、C-x ( 正在录制键盘宏、长命令执行到一半——按 C-g 都会立刻中止并退回顶层状态。因为按错了也不会有破坏性后果(真正的删除要显式敲 C-w 或 C-d),它可以当作安全出口随时按。相反,minibuffer 里要放弃当前输入也用 C-g,而不是急着敲 M-x 撤回来。
C-w、M-w、C-y 这套 kill/yank 机制,选区和剪贴板到底怎么分工?
Emacs 的剪贴不是系统剪贴板,而是一份 kill ring 共享历史。先按 C-Space 设 mark,移动光标即形成选区;C-w 把选区内容 kill 掉(从文本删除并压入 ring),M-w 复制但保留原文,C-y 把最近一条 kill 出来粘贴,M-y 还能往回轮换更早的内容。因此「移动一段代码」的标准动作是 C-w 移动光标再 C-y,而不是 C-w 后走到目标再 C-y——后者位置变了容易出错。粘贴历史是全局的,跨缓冲区、跨文件都能取用。
同一段替换动作要重复上百次,键盘宏应该怎么录和调?
用 F3 或 C-x ( 开始录制,把完整的编辑动作序列做一遍(示例:移到行首、设 mark、选到行尾、删掉、插入替换文本),F4 或 C-x ) 结束录制。回放用 C-x e,若同一段改动要施加 100 次,先敲 C-u 100 再接 C-x e,即 C-u 100 C-x e。录制期间若想中止,用 C-g 取消而不会留下半截宏。适合宏的场景是动作机械且模式完全一致;一旦中途出现分支判断,宏就会失灵,这时改用 M-x replace-string 或 M-x replace-regexp 更稳妥。
分屏(C-x 2、C-x 3)和切缓冲区(C-x b)该怎么选?
两者解决不同问题:缓冲区切换只在同一个窗口里换内容,适合在几个文件之间来回改;分屏让多个缓冲区同时可见,改 A 文件时能实时看到 B 文件的解析结果或运行输出。窗口操作有 C-x 2 上下分屏、C-x 3 左右分屏、C-x o 切到其他窗口、C-x 1 只留当前窗口、C-x 0 删除当前窗口;再用 C-x ^ 和 C-x } 调整当前窗口的高低与宽窄。书签 C-x r m / C-x r b 则负责在窗口之间快速跳回常看的编辑位置。
M-% 交互式替换和 M-x replace-regexp 该用哪个?
看你对匹配结果有多大把握。M-x replace-string 与 M-x replace-regexp 一次扫完全部匹配并立即落盘,适合模式明确、全文同构的批量改动;M-% 则逐个提示每个匹配,问你 y 替换、n 跳过、N 替换余下所有、q 退出,遇到个别不该动的地方能当场排除。带正则元字符的匹配(重复符号、字符类、锚点)才需要 replace-regexp,纯字面文本用 replace-string 更快也更安全。改之前都可以先用 C-r 搜一遍确认命中范围。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。