在终端里按 Ctrl + 某个键,其实是在输入一个 ASCII 控制字符。ASCII 表最前面的 32 个码位(0–31)外加 127,都是不可打印的”控制字符”,它们各自触发不同的行为:有的是发信号(Ctrl-C 中断),有的是行编辑(Ctrl-A 移到行首),有的干脆就等于某个普通按键(Ctrl-I 就是 Tab)。
这份速查表按使用场景把它们分组整理,方便快速查阅。内容整理自 Julia Evans(jvns.ca/ascii)的同名速查表,她还写过一篇充满注意事项的详解博文,想深挖细节的推荐一读。
需要提醒的是:具体行为取决于你所处的程序。同一个 Ctrl-D,在 shell 里是 EOF(退出),在命令行中间又是删除右侧字符。下面标注的是最常见的默认行为。
按日常使用频率分成四类,覆盖 90% 的场景。
| ⚡ 信号 & 进程 | ✏️ 命令行编辑 | 🔍 历史 & 屏幕 | ⌨️ 等价普通键 |
|---|---|---|---|
Ctrl-C : 中断 (SIGINT)Ctrl-Z : 挂起 (SIGTSTP)Ctrl-D : EOF / 退出Ctrl-\ : 强退 (SIGQUIT) |
Ctrl-A : 移到行首Ctrl-E : 移到行尾Ctrl-B : 光标左移Ctrl-F : 光标右移Ctrl-U : 删除到行首Ctrl-K : 删除到行尾Ctrl-W : 删除前一个词Ctrl-Y : 粘贴 (yank)Ctrl-_ : 撤销 |
Ctrl-R : 反向搜索历史Ctrl-P : 上一条历史Ctrl-N : 下一条历史Ctrl-L : 清屏Ctrl-S : 暂停输出Ctrl-Q : 恢复输出Ctrl-G : 响铃 🔔 |
Ctrl-I : TabCtrl-M : Enter (回车)Ctrl-J : newline (换行)Ctrl-[ : ESCCtrl-H : BackspaceCtrl-? : Backspace |
| 十进制 | 按键 | 功能 / 名称 |
|---|---|---|
| 0 | Ctrl-@ |
NUL(空字符) |
| 1 | Ctrl-A |
移到行首 |
| 2 | Ctrl-B |
光标左移 |
| 3 | Ctrl-C |
中断 SIGINT |
| 4 | Ctrl-D |
EOF / 删除右侧字符 |
| 5 | Ctrl-E |
移到行尾 |
| 6 | Ctrl-F |
光标右移 |
| 7 | Ctrl-G |
响铃 🔔 |
| 8 | Ctrl-H |
退格(另一种 backspace) |
| 9 | Ctrl-I |
Tab |
| 10 | Ctrl-J |
换行 newline(\n) |
| 11 | Ctrl-K |
删除光标至行尾 |
| 12 | Ctrl-L |
清屏 |
| 13 | Ctrl-M |
回车 Enter(\r) |
| 14 | Ctrl-N |
下一行 / 历史下一条 |
| 15 | Ctrl-O |
(无常用功能) |
| 16 | Ctrl-P |
上一行 / 历史上一条 |
| 17 | Ctrl-Q |
恢复输出(取消暂停) |
| 18 | Ctrl-R |
反向搜索历史命令 |
| 19 | Ctrl-S |
暂停输出 |
| 20 | Ctrl-T |
SIGINFO(BSD)/ 交换字符 |
| 21 | Ctrl-U |
删除整行(光标前) |
| 22 | Ctrl-V |
转义下一个字符 |
| 23 | Ctrl-W |
删除前一个单词 |
| 24 | Ctrl-X |
emacs 前缀键 |
| 25 | Ctrl-Y |
粘贴(yank) |
| 26 | Ctrl-Z |
挂起进程 SIGTSTP |
| 27 | Ctrl-[ |
ESC |
| 28 | Ctrl-\ |
强制退出 SIGQUIT |
| 29 | Ctrl-] |
退出 telnet |
| 30 | Ctrl-^ |
(无常用功能) |
| 31 | Ctrl-_ |
撤销 undo |
| 127 | Ctrl-? |
Backspace(退格) |
这几个是发给内核终端驱动的,不属于 readline,几乎在任何前台程序里都生效:
Ctrl-C:发送 SIGINT,中断当前前台进程(最常用的”停下来”)。Ctrl-Z:发送 SIGTSTP,把当前进程挂起到后台,之后可用 fg 恢复。Ctrl-\:发送 SIGQUIT,比 Ctrl-C 更”暴力”,通常还会生成 core dump。Ctrl-D:在行首按下代表 EOF(输入结束),在 shell 里等于退出;在一行中间则是删除光标右侧字符。在 bash、zsh 等使用 readline 的环境中生效:
Ctrl-A / Ctrl-E:跳到行首 / 行尾。Ctrl-B / Ctrl-F:光标左移 / 右移一个字符。Ctrl-U:删除光标前的整段(到行首)。Ctrl-K:删除光标到行尾的内容。Ctrl-W:删除光标前的一个单词。Ctrl-Y:粘贴(yank)刚才用 Ctrl-U/K/W 删掉的内容。Ctrl-_:撤销上一次编辑。Ctrl-R:反向增量搜索历史命令(超实用)。Ctrl-P / Ctrl-N:上一条 / 下一条历史命令(等价于上下方向键)。Ctrl-L:清屏(等价于 clear)。Ctrl-S / Ctrl-Q:暂停 / 恢复终端输出(软件流控 XOFF/XON)。Ctrl-G:响铃 🔔。这些控制字符本质上就是某个常见键,历史上很多键盘正是用它们来实现的:
Ctrl-I = TabCtrl-M = Enter / 回车(\r,回车符)Ctrl-J = 换行(\n,换行符)Ctrl-[ = ESCCtrl-H 与 Ctrl-? = Backspace(两种退格的历史遗留)Ctrl-V:转义下一个字符,用于原样输入一个控制字符(如输入真正的 Tab)。Ctrl-T:在 BSD 系统上发送 SIGINFO(显示进程状态);在 readline 里则是交换光标前两个字符。Ctrl-X:emacs 的前缀键,后接其他键组成组合命令。Ctrl-]:退出 telnet 会话回到命令提示符。Ctrl-@(NUL)、Ctrl-O、Ctrl-^:一般没有常用默认功能。Ctrl-S(暂停输出),按 Ctrl-Q 即可恢复——很多人以为是死机了。Ctrl-H vs Ctrl-?:两者都可能是退格,具体哪个生效取决于终端的 stty erase 设置,这也是有时按退格却打出 ^H 的原因。Ctrl-C 不一定管用:它只是发信号,程序可以选择忽略 SIGINT;此时可试 Ctrl-\(SIGQUIT)。参考:本速查表整理自 Julia Evans 的 ASCII control characters 速查表 及其详解博文,原作对各种边界情况有更详尽的讨论。
完