Emacs 快捷键速查表 - Emacs 编辑器常用快捷键大全

Emacs 默认有上千条命令,让你真正每天用的其实就一小部分。本表把文件与缓冲区、移动/编辑、搜索、窗口、键盘宏、Org-mode 分组整理,开头先讲清 C=Ctrl、M=Alt/Meta 的前缀记法,以及 C-x C-s 这种"按住 Ctrl 连按两键"的组合规则。终端环境里写代码、或被模态编辑劝退的人尤其适用,读完能流畅完成打开、保存、切缓冲区、录制宏这些高频操作,不再被这个"编辑器操作系统"劝退。

开发工具·共 48 条命令·最后更新 2026-07-21

典型使用场景

适合愿意用一套键位贯通编辑、代码、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-f
打开文件
C-x C-s
保存当前缓冲区
C-x C-w
另存为
C-x b
切换缓冲区
C-x k
关闭缓冲区
C-x C-c
退出 Emacs
C-x 1
只保留当前窗口
C-x 2
上下分屏
C-x 3
左右分屏
C-x o
切换到其他窗口

光标移动 7

C-f / C-b
前进 / 后退一个字符
M-f / M-b
前进 / 后退一个单词
C-a / C-e
行首 / 行尾
C-n / C-p
下一行 / 上一行
M-< / M->
文件开头 / 文件结尾
C-v / M-v
向下 / 向上翻页
M-g g
跳转到指定行

编辑操作 12

C-Space
设置标记(开始选区)
C-w
剪切(kill)选区
M-w
复制选区
C-y
粘贴(yank)
M-y
循环粘贴历史
C-d
删除后一个字符
M-d
删除后一个单词
C-k
删除到行尾
C-x C-u
转大写
C-x C-l
转小写
C-/
撤销
C-g
取消当前操作(万能退出)

搜索与替换 5

C-s
向前增量搜索
C-r
向后增量搜索
M-x replace-string
替换字符串
M-x replace-regexp
正则替换
M-%
交互式替换(逐个确认)

窗口与书签 Windows & Bookmarks 5

C-x 0
删除当前窗口
C-x ^
当前窗口增高
C-x }
当前窗口增宽
C-x r m
设置书签
C-x r b
跳转到书签

键盘宏 Keyboard Macros 4

F3 / C-x (
开始录制键盘宏
F4 / C-x )
结束录制
C-x e
执行上次录制的宏
C-u 10 C-x e
执行宏 10 次

Org-mode 5

* / ** / ***
标题层级(星号数量决定层级)
- / 1.
无序列表 / 有序列表
C-c C-t
切换 TODO 状态
<s Tab
插入代码块模板
C-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. 1不知道当前处于什么命令状态时强制回到干净状态

    C-g

    任意半途操作按 C-g 都能取消,这是 Emacs 最值得先记住的一条。

  2. 2圈选一段文本用于剪切或复制

    C-Space

    设置 mark 后移动光标(C-f、M-f、C-n 都可)圈定区域,再接 C-w 或 M-w。

  3. 3在多份文件之间快速切换而不重新打开

    C-x b

    在缓冲区列表里回车即可切换,无需重新 C-x C-f。

  4. 4批量处理重复的成串按键

    F3

    开始录制,正常操作一遍后按 F4 结束,再按 C-x e 重放整个序列。

  5. 5让一段重复动作一次跑十遍

    C-u 10 C-x e

    数字前缀先设定重复次数,再执行宏,适合批量加前缀、逐行处理。

  6. 6逐个确认地替换全文出现的字符串

    M-%

    交互式替换,可逐处选择替换、跳过或退出,适合不想一次改坏全文的场景。

  7. 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日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们