一句话总结 / TL;DR
Codex CLI 基本全靠键盘操作。真正每天会用到的几个键:Esc 中断正在跑的任务,Ctrl+J 插入一个在任何终端都生效的换行,Ctrl+G 调出你的 $EDITOR 写长 prompt,Ctrl+R 搜历史输入,Esc Esc 回退去改之前发过的消息,Shift+Tab 循环切换权限模式(Read-only、Auto、Full Access)。在会话里拿不准时,输入 /keymap 就能打印出你当前版本真正生效的键位。
版本提醒(截至 2026 年 6 月):本文按 Codex CLI v0.135.x 整理,这是 OpenAI 截至 2026 年 5 月发布的版本线。Codex 迭代很快,少数键位是按版本逐步加入的(下文会标注),所以你会话里的
/keymap永远是最终标准。
这篇适合谁看 / Who this is for
- 每天用
codex、但还在一个字一个字改长 prompt 的开发者。 - 经常写好几段的需求说明,却老是没写完就误发出去的人。
- 跑长任务、需要随时中断、改方向、回退而又不想丢上下文的人。
- 要给团队写「Codex 怎么用」内部 onboarding 文档的人。
- 在 iTerm2、Apple Terminal、VS Code 终端、Warp 或 tmux 里按键行为不一致的人。
最先记的几个键 / Memorize these first
其他都可以慢慢学,先把这几个记牢,它们覆盖了真实使用里约 90% 的场景。
| 快捷键 | 作用 | 备注 |
|---|---|---|
Esc | 中断当前模型回合或工具调用 | 只停任务,不会撤销已改的文件 |
Ctrl+J | 在输入框插入换行 | 跨终端最稳的换行键 |
Ctrl+G | 用 $EDITOR / $VISUAL 打开 prompt | 写长需求的最佳方式 |
Ctrl+R | 反向搜索历史输入 | v0.121.0+,Enter 选中、Esc 取消 |
Esc Esc | 改写上一条消息(输入框为空时) | 连按可继续回退,Enter 从该处分叉 |
Shift+Tab | 会话中循环切权限模式 | Read-only → Auto → Full Access |
Tab | 把后续输入排进下一回合 | 不会打断当前回合 |
Enter(任务运行中) | 中途插入新指令 | Codex 读取后不丢上下文 |
Ctrl+L | 重绘屏幕 | 不清掉上下文 |
? / /keymap | 显示当前生效键位 | 你这个版本的最终标准 |
会话控制:中断、退出、回退 / Session control
| 快捷键 | 详解 |
|---|---|
Esc | 中断当前回合或工具调用。发现方向跑偏时立刻按。 |
Ctrl+C | 取消当前输入;连按两次退出会话。也可以输入 /exit 或 /quit。 |
Ctrl+D | 输入框为空时退出;连按两次强制退出。 |
Esc Esc | 输入框为空时,改写你的上一条消息。继续按 Esc 可在历史里继续往前回退,然后按 Enter 从该处分叉出新对话。 |
Ctrl+L | 长输出把屏幕弄乱时重绘终端,不会清掉 Codex 的上下文。 |
Ctrl+O | 把 Codex 最近一次完成的输出复制到剪贴板。 |
最重要的区分:Esc 只是停掉当前回合,但 Esc 和 Ctrl+C 都不会回滚 Codex 已经写过的文件。要撤销改动,得明确告诉 Codex(比如「把你对 src/auth.ts 的改动撤回」),或者自己看 git diff 再丢弃。用 Esc Esc 分叉改的是对话,不是磁盘上的文件。
权限和自动化模式 / Approval and automation modes
Codex CLI 提供三种权限模式。会话中用 Shift+Tab 循环切换,或用 /approvals 命令直接指定(部分版本叫 /permissions)。
| 模式 | Codex 可以做什么 | 什么时候用 |
|---|---|---|
| Read-only | 浏览、读文件、给出方案;不改文件、不跑命令 | 第一次看陌生仓库、做规划时 |
| Auto(默认) | 在工作目录内读、改、跑命令;要碰目录外内容或访问网络时会先问 | 你信任的仓库里的日常开发 |
| Full Access | 跨整台机器工作,含网络访问,全程不问 | 仅限隔离容器或可丢弃的临时 VM |
经验法则:用 Read-only 规划,用 Auto 干日常活,Full Access 只在可以随手丢掉的沙箱里开。Auto 之所以是安全默认,正是因为它把写操作限制在工作目录内,访问网络和目录外的动作仍要先确认。
写 prompt:换行、编辑器、文件、shell / Composing prompts
这是 Codex 最省时间、也是终端最容易添乱的地方。
| 快捷键 / 符号 | 作用 |
|---|---|
Ctrl+J | 插入换行而不发送。跨终端最稳的多行键。 |
Shift+Enter | 也能换行,但前提是终端把这个组合键正确传过来;若变成直接发送,改用 Ctrl+J。 |
Ctrl+G | 把当前草稿在 $EDITOR / $VISUAL 里打开。超过两三行就用它。 |
@ | 模糊搜索文件,选中后把路径/内容附到消息里。 |
! | 跑一条本地 shell 命令,并把输出带进对话。 |
-i / --image | 附一张图片(比如报错截图)。 |
写正经需求时别跟终端键位较劲:要么按 Ctrl+G 在编辑器里写,要么把 spec 写进文件让 Codex 读:
Read TASK.md and implement it. Stop and ask before changing the database schema.
输入编辑(readline / Emacs 风格)/ Input editing
输入框遵循 readline 习惯,大部分 shell 编辑手感可以直接迁移过来。
| 快捷键 | 作用 |
|---|---|
Ctrl+A | 到行首 |
Ctrl+E | 到行尾 |
Ctrl+B / Ctrl+F | 左移 / 右移一个字符 |
Option+B / Alt+B | 左移一个词(macOS 要把 Option 配成 Meta) |
Option+F / Alt+F | 右移一个词 |
Ctrl+U | 删除光标前全部内容 |
Ctrl+K | 删除光标后全部内容 |
Ctrl+W | 删除前一个词 |
Ctrl+Y | 粘回刚刚删掉的文本 |
Ctrl+H / Backspace | 删除前一个字符 |
自 v0.135.0 起,若在配置里开启 Vim 模式,TUI 还支持 Vim 风格的文本对象编辑,在上面这些 readline 默认键之外增加按词、按行的移动。
推理深度、历史、菜单 / Reasoning depth, history, menus
| 快捷键 | 作用 |
|---|---|
Alt+, / Alt+. | 降低 / 提高下一回合的推理深度(v0.124.0+) |
Ctrl+R | 反向搜索历史输入;Enter 选中、Esc 取消(v0.121.0+) |
↑ / ↓ | 在输入框里浏览草稿历史 |
Tab | 补全 / 命令或路径;Codex 工作时把后续输入排进下一回合 |
Enter | 发送,或把指令插入正在运行的回合 |
Esc | 关闭菜单,或中断当前任务 |
做大重构前先按 Alt+. 提高推理深度,给 Codex 更多「思考预算」;做琐碎小改时按 Alt+, 降低深度更快。
常用 slash 命令 / Slash commands
快捷键管编辑,slash 命令管会话。值得记的几个:
| 命令 | 作用 |
|---|---|
/keymap | 打印你这个版本生效的键位(解决所有「到底哪个键」的疑问) |
/approvals | 切换权限模式(部分版本叫 /permissions) |
/model | 切换底层模型 |
/init | 生成项目上下文文件 AGENTS.md |
/diff | 显示 Codex 产生的工作区 diff |
/compact | 压缩并精简上下文,腾出窗口空间 |
/review | 让 Codex 审查当前改动 |
/exit、/quit | 结束会话 |
失效排查 / When shortcuts fail
| 现象 | 原因 | 修复 |
|---|---|---|
Option+B/F 输入奇怪字符 | Option 没有作为 Meta 发送 | Apple Terminal 勾选 “Use Option as Meta key”;iTerm2 启用 “Esc+“ |
Shift+Enter 直接发送 | 终端没把组合键传过来 | 改用 Ctrl+J,或用 Ctrl+G 在编辑器里写 |
Ctrl+S 卡住 | 终端 flow control 暂停了输出 | 按 Ctrl+Q 恢复;想永久关闭执行 stty -ixon |
Esc Esc 没反应 | 输入框非空,或版本太旧 | 先清空输入;用 /keymap 核对 |
Alt+, / Alt+. 无效 | 版本低于 v0.124.0 | 升级 Codex CLI |
Cmd 类快捷键无效 | 你在纯终端,不是应用界面 | 改用终端对应的 Ctrl / Alt 组合 |
iTerm2 和 Apple Terminal 只要把 Option 映射成 Meta 就都很正常。tmux、screen 和部分 VS Code 集成终端会重映射 meta/alt 键。某个键不对劲时,先在原生 Terminal.app 里试一下,判断到底是 Codex 的问题还是终端的问题。
Codex CLI 和 Claude Code 的差异 / vs Claude Code
两者共用一批 readline 编辑键(Ctrl+A、Ctrl+E、Ctrl+R)和「按 Esc 中断」的反应,而且两者都带 Esc Esc 回退。但 slash 命令和产品层键位并不相同:Codex 用 /approvals 和 /keymap,Claude Code 有自己的一套,比如 /terminal-setup。别把一边的键位直接套到另一边。在 Codex 里,/keymap 才是你当前版本的权威清单。更详细的对比见 Codex vs Claude Code。
FAQ
问:Codex 里 Esc 和 Ctrl+C 有什么区别?
答:Esc 中断当前模型回合或工具调用,同时保留会话,适合方向跑偏时叫停。Ctrl+C 取消当前输入;在空输入框上连按两次会直接退出会话。两者都不会回滚 Codex 已经改过的文件,所以要用 git diff 或让 Codex 自己撤销。
问:怎么换行而不把 prompt 发出去?
答:按 Ctrl+J,它是跨终端最稳的换行键。Shift+Enter 在终端正确转发组合键时也能换行,但很多终端做不到。超过几行的内容,直接按 Ctrl+G 在 $EDITOR 里写更省事。
问:能不能改一条已经发出去的消息?
答:能。输入框为空时按 Esc Esc 就能改写上一条消息;继续按 Esc 可在历史里继续往前回退,然后按 Enter 从该处分叉。这改的是对话,不是磁盘上的文件。
问:怎么不重启就切换权限模式?
答:按 Shift+Tab 在 Read-only、Auto、Full Access 之间循环,或运行 /approvals(部分版本是 /permissions)直接指定。Auto 是默认,会把写操作限制在工作目录内。
问:哪些终端最容易把 Codex 快捷键搞坏?
答:tmux、screen 和部分 VS Code 集成终端会重映射 meta/alt 键,导致 Option+B/F、Shift+Enter 失效。iTerm2 和 Apple Terminal 只要开启 “Use Option as Meta key” 就很正常。拿不准时先在原生 Terminal.app 里测,换行统一退回 Ctrl+J。