覆盖 Claude Code、Codex CLI、OpenCode、Pi 四个终端编程 Agent。整理于 2026-10-26,数据来自各家官方文档,Codex 的默认键位来自 openai/codex main 分支的 tui/src/keymap.rs 源码。
阅读说明
Alt在 macOS 上即Option。macOS 终端里的 Alt 类快捷键需要把 Option 设为 Meta,否则无效。- “未绑定”指默认没有快捷键,但可以在配置里自己绑。
- 四个工具都支持自定义键位:Claude Code 用
~/.claude/keybindings.json,Codex 用~/.codex/config.toml的[tui.keymap.*],OpenCode 用tui.json(v2 用cli.json),Pi 用~/.pi/agent/keybindings.json。 - 版本:Claude Code 文档引用到 v2.1.301;Codex 为 main 分支;OpenCode 的 v1 与 v2 文档并存(页面更新于 2026-10-24),两套都收录;Pi 为 1.0 的 latest 文档。
0. 四家核心键位对照
| 动作 | Claude Code | Codex CLI | OpenCode(v1) | Pi |
|---|---|---|---|---|
| 发送 | Enter |
Enter |
Enter |
Enter |
| 换行 | Shift+Enter / Ctrl+J / \+Enter |
Shift+Enter / Alt+Enter / Ctrl+J |
Shift+Enter / Ctrl+Enter / Alt+Enter / Ctrl+J |
Shift+Enter / Ctrl+J |
| 中断当前任务 | Esc |
Esc |
Esc |
Esc |
| 清空输入 | Ctrl+C(再按一次退出) |
Ctrl+C |
Ctrl+C |
Ctrl+C(再按一次退出) |
| 退出 | Ctrl+D(连按两次) |
Ctrl+D |
Ctrl+D / Ctrl+X Q |
Ctrl+D(输入为空时) |
| 回退 / 编辑上一条 | Esc Esc |
Esc Esc |
Ctrl+X U(撤销消息) |
无默认键,用 /tree /fork |
| 外部编辑器 | Ctrl+G |
Ctrl+G |
Ctrl+X E |
Ctrl+G |
| 切换模式 | Shift+Tab(权限模式) |
Shift+Tab(协作模式,固定键) |
Tab(切 Agent) |
Shift+Tab(思考级别) |
| 切换模型 | Alt+P |
无默认键(用 /model) |
Ctrl+X M,F2 循环 |
Ctrl+L 选择,Ctrl+P 循环 |
| 历史搜索 | Ctrl+R |
Ctrl+R |
仅 ↑ ↓ |
仅 ↑ ↓ |
| 展开详情 / 转录 | Ctrl+O |
Ctrl+T |
无 | Ctrl+O(展开工具输出) |
| 复制上一条回复 | 无(全屏模式用 Ctrl+Shift+C) |
Ctrl+O |
Ctrl+X Y |
Ctrl+X |
| 粘贴图片 | Ctrl+V |
Ctrl+V |
Ctrl+V |
Ctrl+V |
| 运行时追加消息 | Enter 排队 |
Tab 排队,Enter 注入当前轮 |
v2:Ctrl+X Enter 排队 |
Enter 引导,Alt+Enter 追加 |
| 命令前缀 | / ! @ : |
/ ! @ $ |
/ @ |
/ ! !! @ |
1. Claude Code
配置文件 ~/.claude/keybindings.json(/keybindings 打开),保存后自动生效。
1.1 通用控制
| 快捷键 | 作用 |
|---|---|
Ctrl+C |
中断运行中的操作;空闲时第一次清空输入,第二次退出 |
Ctrl+D |
退出。第一次出现提示,800ms 内再按一次才退出;输入框有文字时删除光标后一个字符 |
Ctrl+G / Ctrl+X Ctrl+E |
用默认编辑器编辑当前输入 |
Ctrl+L |
强制整屏重绘,保留输入和对话(v2.1.126 起不再清空输入) |
Ctrl+O |
切换转录视图,显示工具调用详情、时间戳和模型;同时展开默认折叠的 MCP 调用等行 |
Ctrl+R |
反向搜索历史 |
Ctrl+V / Cmd+V(iTerm2)/ Alt+V(Windows、WSL) |
粘贴剪贴板图片,插入 [Image #N] |
Ctrl+B |
把运行中的 Bash 或 Agent 放到后台(tmux 里按两次,或用 Ctrl+X Ctrl+B) |
Ctrl+T |
显示或隐藏 Claude 的待办清单(不是后台任务视图,那个是 /tasks) |
Ctrl+S |
有文字时暂存并清空输入;空输入时恢复暂存内容(含光标位置、粘贴内容、输入模式) |
Ctrl+Z |
挂起到 shell(仅 Unix,fg 恢复) |
Ctrl+X Ctrl+K |
停止本会话所有后台子 Agent,并关闭 artifact 自动回复;3 秒内按两次确认 |
Ctrl+Enter / Ctrl+X Ctrl+S |
立即发送排队消息(v2.1.275+);不支持扩展按键的终端里 Ctrl+Enter 退化成 Enter,用后者 |
Shift+Tab(Windows 部分环境为 Alt+M) |
循环权限模式:default → acceptEdits → plan →(可用时)bypassPermissions → auto |
Alt+P |
切换模型,不清空输入 |
Alt+T |
开关扩展思考(Opus 5.5、Sonnet 5.5、Haiku 5.5 和 Fable 系列始终思考,该键无效) |
Alt+O |
开关 fast mode |
Esc |
中断当前响应;对话框打开时关闭对话框;权限提示上等同拒绝 |
Esc Esc |
输入框有内容时清空并存入历史(↑ 可找回);输入框为空时打开回退菜单,恢复或总结之前的代码和对话 |
↑ ↓ / Ctrl+P Ctrl+N |
多行输入内先移动光标,到首行或末行后翻历史;有排队消息时在首行按 ↑ 把它们取回 |
Tab |
接受自动补全;权限提示上给选项加注释 |
← → |
在对话框标签页间切换;空输入时 ← 打开 agent view |
找回被 Ctrl+C 清掉的草稿:清空后立刻在空输入按一次 ↑(v2.1.288+);发送过消息后再按 ↑ 回退,保留最近 10 份(v2.1.292+)。
1.2 文本编辑
| 快捷键 | 作用 |
|---|---|
Ctrl+A / Ctrl+E |
移到当前逻辑行行首 / 行尾 |
Ctrl+K |
删到行尾(存入删除缓冲) |
Ctrl+U |
删到行首,多行输入重复按可跨行清除(macOS 的 Cmd+Backspace 映射到它) |
Ctrl+W |
删到前一个空白,一次删掉整个路径或 --flag=value |
Ctrl+Y |
粘贴刚删除的文本 |
Alt+Y(Ctrl+Y 之后) |
循环切换删除历史 |
Alt+B / Alt+F |
按词后退 / 前进 |
Alt+D |
删到词尾 |
Option+Delete(macOS)/ Ctrl+Backspace(Windows) |
只删前一个词 |
Ctrl+_ / Ctrl+Shift+- |
撤销上一次输入编辑 |
词边界:Alt+B/F/D 把字母和数字连续段当一个词,_ . / 都是分隔符;Ctrl+W 只认空白。这些编辑键不能在 keybindings 里重映射。
1.3 多行输入与前缀
| 方式 | 说明 |
|---|---|
\ + Enter |
所有终端通用 |
Option+Enter |
macOS,需把 Option 设为 Meta |
Shift+Enter |
iTerm2、WezTerm、Ghostty、Kitty、Warp、Apple Terminal、Windows Terminal 原生支持 |
Ctrl+J |
任何终端免配置 |
| 直接粘贴 | 代码块、日志 |
| 前缀 | 作用 |
|---|---|
/(行首或空格后) |
命令或 skill,Tab 补全 |
!(行首) |
Shell 模式;用 Esc、Backspace 或空输入时 Ctrl+U 退出,Tab 补全历史命令 |
@ |
文件路径补全;打字后还会建议其他存活会话(v2.1.232+) |
: |
emoji 短代码,如 :heart:(v2.1.217+) |
?(空输入) |
切换快捷键帮助面板 |
Space(按住或点按) |
语音听写,需启用,/voice tap 切换为点按模式 |
1.4 转录视图(Ctrl+O 打开)
| 快捷键 | 作用 |
|---|---|
? |
快捷键帮助(仅全屏渲染) |
{ / } |
跳到上一条 / 下一条用户提示(仅全屏渲染) |
Ctrl+E |
显示全部内容(仅经典渲染) |
[ |
把完整对话写进终端原生滚动缓冲,便于 Cmd+F、tmux 复制模式(仅全屏渲染) |
v |
写入临时文件,用 $VISUAL 或 $EDITOR 打开(仅全屏渲染) |
q / Ctrl+C / Esc |
退出转录视图 |
1.5 历史搜索(Ctrl+R)
- 经典渲染的行内搜索:
Ctrl+R再按循环更早的匹配;Tab或Esc接受并继续编辑;Enter接受并立即执行;Ctrl+C取消并还原输入;空搜索时Backspace取消。 - 全屏渲染的搜索对话框:输入过滤,
↑↓选择,Ctrl+S在“本会话 / 本项目 / 全部项目”间切换范围,Enter或Tab放入输入框,Esc取消。
1.6 Vim 模式(/config → Editor mode)
模式切换
| 键 | 作用 |
|---|---|
Esc / Ctrl+[ |
进入 NORMAL(从 INSERT、VISUAL) |
i I |
光标前 / 行首插入 |
a A |
光标后 / 行尾插入 |
o O |
下方 / 上方新开一行 |
v V |
字符 / 行选择 |
可用设置 vimInsertModeRemaps 把两键序列(如 jj)映射为 Esc,只在用户级、--settings 和托管设置里生效。
移动(NORMAL)
| 键 | 作用 |
|---|---|
h j k l / Space |
左下上右 / 右移 |
w e b |
下一词 / 词尾 / 上一词 |
0 $ ^ |
行首 / 行尾 / 首个非空字符 |
gg G |
输入开头 / 最后一行行首 |
f{c} F{c} t{c} T{c} |
行内跳到字符前后 |
; , |
重复 / 反向重复上次 f F t T |
% |
跳到配对括号(v2.1.301+) |
/ |
打开反向历史搜索(同 Ctrl+R) |
光标无法再移动时,j k 和 ↑ ↓ 会翻命令历史。
编辑(NORMAL)
| 键 | 作用 |
|---|---|
x / r{c} |
删字符 / 替换字符 |
dd D dw de db |
删行 / 删到行尾 / 删词 |
df{c} dt{c} dj dk dgg dG |
按字符、行、首尾范围删除 |
d0 c0 y0 |
从光标删除、修改、复制到行首(v2.1.281+) |
d% c% y% |
到配对括号(v2.1.301+) |
cc C cw ce cb |
修改行 / 到行尾 / 词 |
s S |
替换字符 / 替换整行 |
yy Y yw ye yb |
复制 |
p P |
在光标后 / 前粘贴 |
>> << |
缩进 / 反缩进 |
J |
合并行 |
u / . |
撤销 / 重复上次修改 |
文本对象(配合 d c y):iw/aw、iW/aW、i"/a"、i'/a'、i(/a(、i[/a[、i{/a{。
Visual 模式:d/x 删除,y 复制,c/s 修改,p 替换为寄存器内容,r{c} 全部替换,~ u U 切换 / 小写 / 大写,> < 缩进,J 合并,o 交换光标与锚点,v/V 切换或退出。不支持 Ctrl+V 块选择。
1.7 其他界面里的按键
| 场景 | 按键 |
|---|---|
/btw 侧问答 |
Space Enter Esc 关闭;↑ ↓ 滚动;Shift+← Shift+→(或 [ ]、Tab)切换历史答案;c 复制为 Markdown;f 派生子 Agent 继续;x 清空历史 |
/diff 面板(全屏) |
点 ask 把文件 diff 附到下条提示;Ctrl+X B 循环对比基准(本会话 → 未提交 → 相对分支);文件列表溢出时 Alt+↑↓ 或 Ctrl+↑↓ 滚动 |
/diff 对话框(经典) |
↑ ↓ 选文件;Enter 看 diff;PageUp PageDown 滚动;Esc 返回或关闭;Tab 切到 source 选择器 |
| 等待用量上限重置 | Esc(空输入)或 Ctrl+C 取消自动继续 |
| 排队消息 | ↑(首行)取回;Esc 中断但不提交草稿 |
1.8 keybindings.json 各上下文默认键
| 上下文 | 默认键 → 动作 |
|---|---|
| Global | Ctrl+C interrupt;Ctrl+D exit;Ctrl+T toggleTodos;Ctrl+O toggleTranscript;app:redraw 未绑定 |
| History | Ctrl+R search;↑ previous;↓ next |
| Chat | Esc cancel;Ctrl+L clearInput(实为重绘);Cmd+K clearScreen;Ctrl+X Ctrl+K killAgents;Shift+Tab cycleMode;Meta+P modelPicker;Meta+O fastMode;Meta+T thinkingToggle;Enter submit;Ctrl+X Enter queueSubmit(v2.1.247+,只排队不打断);Ctrl+J newline;Ctrl+_ undo;Ctrl+G / Ctrl+X Ctrl+E externalEditor;Ctrl+S stash;Ctrl+V imagePaste |
| Autocomplete | Tab accept;Esc dismiss;↑ ↓ 选择 |
| Confirmation | Y / Enter yes;N / Esc no;↑ ↓;Tab nextField;Space toggle;Shift+Tab cycleMode |
| Tabs | Tab / → 下一个;Shift+Tab / ← 上一个 |
| Transcript | Ctrl+E toggleShowAll;q Ctrl+C Esc exit |
| HistorySearch | Ctrl+R next;Esc Tab accept;Ctrl+C cancel;Enter execute;Ctrl+S cycleScope |
| Task | Ctrl+B Ctrl+X Ctrl+B background |
| ThemePicker | Ctrl+T 切换语法高亮 |
| Help | Esc 关闭 |
| Attachments | ← → 切换;Backspace Delete 移除;↓ Esc 退出 |
| Footer | ← → ↑ ↓ 导航;Enter 打开;Esc 清除选择;Backspace Delete 移除 artifact 链接 |
| MessageSelector(回退菜单) | ↑ K Ctrl+P 上;↓ J Ctrl+N 下;Ctrl+↑ Shift+↑ Meta+↑ Shift+K 到顶;Ctrl+↓ Shift+↓ Meta+↓ Shift+J 到底;Enter 选择 |
| DiffDialog | Esc dismiss;← → 切换 source;↑ K / ↓ J 文件或滚动;Enter 详情;详情页另有 PageUp PageDown Shift+Space B Space G Home Shift+G End |
| DiffPanel | Ctrl+X B cycleDiffBase;Ctrl+↑↓ Meta+↑↓ 滚动文件列表 |
| ModelPicker / EffortSlider | ← → 调整推理强度;s 仅本会话生效 |
| Select | ↓ J Ctrl+N 下;↑ K Ctrl+P 上;PageUp PageDown Home End;Enter accept;Esc cancel |
| Plugin | Space toggle;I install;F favorite |
| Settings | / 搜索;R 重试;Enter Space 切换;Esc 关闭 |
Agents(claude agents) |
Ctrl+S 切换分组;Ctrl+T 置顶 / 取消置顶 |
| Chat(语音启用时) | Space pushToTalk |
| Scroll(全屏渲染) | 滚轮;PageUp PageDown 半屏;Ctrl+Home Ctrl+End 到首 / 尾;Ctrl+Shift+C / Cmd+C 复制选区;Shift+←↑↓→ Shift+Home Shift+End 扩展选区 |
ctrl+x 前缀下还有 ctrl+x ctrl+a 和 ctrl+x tab(均在 Chat,v2.1.260+),文档没有说明它们的功能。
不可重绑:Ctrl+C、Ctrl+D、Ctrl+M(等同 Enter)、Ctrl+[(等同 Esc)、Ctrl+I(等同 Tab)、Ctrl+H、Caps Lock。
终端冲突:Ctrl+B 是 tmux 前缀(按两次),Ctrl+A 是 GNU screen 前缀,Ctrl+Z 是 Unix 挂起。
2. Codex CLI
配置在 ~/.codex/config.toml(项目级 .codex/config.toml 覆盖用户级),写成 [tui.keymap.<上下文>]。上下文有:global、chat、composer、editor、vim_normal、vim_operator、vim_search、vim_text_object、pager、list、agents、approval。
/keymap打开可搜索的重映射面板,写入根级配置。手改 config.toml 后需要重启 TUI。- 键值写法:
ctrl-a、shift-enter、page-down、space、minus、f8。可写字符串或数组,空数组表示解绑。 - 优先级:具体上下文 →
global(仅部分动作支持)→ 内置默认。同一输入路径上的键冲突会让 TUI 启动失败,并指出配置路径。 - 临时覆盖:
codex -c 'tui.keymap.composer.submit = "ctrl-enter"'。 - 要启动即进入 Vim 模式:
[tui] vim_mode_default = true,运行中用/vim切换。[tui.keymap]只决定按键触发什么,不会自动开启 Vim。
2.1 固定键(不可重映射)
| 快捷键 | 作用 |
|---|---|
Ctrl+C |
中断或退出(官方文档写作“关闭会话,同 /exit”) |
Ctrl+D |
退出 |
Ctrl+V / Ctrl+Alt+V |
粘贴图片 |
Shift+Tab |
切换协作模式(含 Plan) |
Esc |
回溯;输入框为空时连按两次 Esc Esc 编辑上一条用户消息,并从那里分叉对话 |
Alt+← / Alt+→ |
上一个 / 下一个 Agent |
/ |
斜杠命令弹窗 |
! |
在当前审批与沙箱设置下运行本地 shell 命令 |
@ |
搜索工作区文件并加入提示 |
$ |
连接器(connector)提及 |
转录里的 Esc / ← / → / Enter |
编辑上一条 / 下一条 / 确认编辑(回溯) |
2.2 运行中输入
| 快捷键 | 作用 |
|---|---|
Tab(Codex 工作时) |
排队:下一轮再发送提示、斜杠命令或 shell 命令 |
Enter(Codex 工作时) |
把新指令注入当前这一轮 |
Alt+↑ / Shift+← |
异步提问时向上移动,再编辑最近排队的消息 |
Alt+↓ / Shift+→ |
在异步提问里往回走,向输入框靠拢 |
Ctrl+] |
跳过当前聚焦的问题 |
Alt+, / Shift+↓ |
降低推理强度 |
Alt+. / Shift+↑ |
提高推理强度 |
Esc |
中断当前轮(chat.interrupt_turn) |
F8 |
开始 / 停止语音对话 |
Ctrl+X |
语音会话里静音 / 取消静音(与已配置的 Ctrl+X 组合冲突时让位) |
2.3 global / composer 默认键
| 上下文。动作 | 默认键 |
|---|---|
global.open_transcript |
Ctrl+T(转录叠层,再按一次关闭) |
global.open_external_editor |
Ctrl+G(用 VISUAL,没有则 EDITOR) |
global.copy |
Ctrl+O(复制最近一条完成的回复,同 /copy) |
global.clear_terminal |
Ctrl+L(只清终端视图,不开新对话;任务进行中禁用。/clear 才是开新对话) |
global.toggle_raw_output |
Alt+R(原始滚动缓冲模式,同 /raw,便于鼠标选择复制) |
global.toggle_side_conversation |
Ctrl+/(兼容别名 Ctrl+7,在旁路对话与父对话间切换) |
global.open_agents、toggle_vim_mode、toggle_fast_mode |
未绑定 |
chat.previous_permission_mode、next_permission_mode |
未绑定(不允许绑可打印字符) |
composer.submit |
Enter |
composer.queue |
Tab |
composer.toggle_shortcuts |
? |
composer.history_search_previous / next |
Ctrl+R / Ctrl+S |
| 历史草稿 | ↑ ↓ 恢复草稿历史;Ctrl+R 搜索后 Enter 采用、Esc 取消 |
2.4 editor(输入框编辑)
| 动作 | 默认键 |
|---|---|
换行 insert_newline |
Ctrl+J、Shift+Enter、Alt+Enter(Ctrl+M 也算) |
| 左 / 右 | ← Ctrl+B / → Ctrl+F |
| 上 / 下 | ↑ Ctrl+P / ↓ Ctrl+N |
| 按词左移 | Alt+B、Alt+←、Ctrl+← |
| 按词右移 | Alt+F、Alt+→、Ctrl+→ |
| 行首 / 行尾 | Home Ctrl+A / End Ctrl+E |
| 向后删字符 | Backspace、Shift+Backspace、Ctrl+H |
| 向前删字符 | Delete、Shift+Delete、Ctrl+D |
| 向后删词 | Alt+Backspace、Ctrl+Backspace、Ctrl+W、Ctrl+Alt+H |
| 向前删词 | Alt+Delete、Ctrl+Delete、Alt+D |
| 删到行首 / 行尾 | Ctrl+U / Ctrl+K |
删整行 kill_whole_line |
未绑定 |
粘贴删除内容 yank |
Ctrl+Y |
2.5 Vim 模式(输入框,需开启)
| 上下文 | 默认键 |
|---|---|
vim_normal 进入插入 |
i / Insert;a 光标后;A 行尾;I 行首;o 下方开行;O 上方开行;R 进入替换模式 |
vim_normal 移动 |
h j k l 或方向键;w b e;0;$;f F t T;G 到末尾 |
vim_normal 编辑 |
x 删字符;r 替换字符;s 替换字符并插入;D 删到行尾;C 改到行尾;Y 复制行;p 粘贴;. 重复;u 撤销;Ctrl+R 重做;Esc 取消待决操作符 |
| 操作符 | d 删除、y 复制、c 修改 |
vim_operator(操作符之后) |
dd / yy 整行;动作 h l k j w b e 0 $ f F t T G;i 内部、a 周围文本对象;Esc 取消 |
vim_text_object |
w 词;W 大词;( ) b 圆括号;[ ] 方括号;{ } B 花括号;" ' ` 引号 |
2.6 pager、list、approval、agents
| 上下文 | 默认键 |
|---|---|
pager(转录与静态帮助) |
↑ k / ↓ j 滚动;PageUp Shift+Space Ctrl+B 上翻页;PageDown Space Ctrl+F 下翻页;Ctrl+U / Ctrl+D 半页;Home / End;q Ctrl+C 关闭;Ctrl+T 关闭转录 |
list(弹出式选择列表) |
上:↑ Ctrl+P Ctrl+K k;下:↓ Ctrl+N Ctrl+J j;左:← Ctrl+H;右:→ Ctrl+L;PageUp Ctrl+B;PageDown Ctrl+F;Home;End;Enter 确认;Esc 取消 |
approval(工具审批弹窗) |
y 批准;a 本会话内批准;p 按命令前缀批准;d 拒绝;Esc 或 n 否决;c 取消;Ctrl+A(含 Ctrl+Shift+A)全屏查看详情;o 打开对应线程 |
agents(Agent 总览) |
o 恢复;f 搜索;n 新任务;w 新 worktree;r 重命名;x 停止;a 归档;Delete 删除;h 隐藏;g 切换分组 |
/plugins 浏览器 |
Space 切换已装插件的启用状态 |
3. OpenCode
OpenCode 现在有两套文档。v1(opencode.ai/docs)用 tui.json,绑定名是 session_new 这种下划线风格;v2(opencode.ai/v2/docs)用 cli.json,绑定名是 session.new 这种点号风格。默认键大体一致,v2 多了会话标签页、diff 查看器、后台任务等。你用哪个版本,就对照哪一节。
- Leader 键默认
Ctrl+X,下文写作Ctrl+X ⟨键⟩:先按 Ctrl+X 松开,再按后面的键。等待时间leader_timeout默认 2000ms(v2 写作leader.timeout)。 - 值可以是单个键、逗号分隔的多个键或数组。写
"none"或false解绑。高级用法是对象:key、event、preventDefault、fallthrough。 Ctrl+P命令面板可调视图选项;/help查看命令。- Windows 上 v1 的
input_undo额外绑Ctrl+Z,terminal_suspend强制为 none。 - 一些终端不发送带修饰键的 Enter。Windows Terminal 需要在 settings.json 里加一条
sendInput,内容是\u001b[13;2u,并把shift+enter绑上去。
3.1 v1(tui.json)默认键
| 分组 | 绑定名 → 默认键 |
|---|---|
| 应用 | leader Ctrl+X;app_exit Ctrl+C / Ctrl+D / Ctrl+X Q;command_list Ctrl+P;terminal_suspend Ctrl+Z;tips_toggle Ctrl+X H |
| 界面 | editor_open Ctrl+X E;theme_list Ctrl+X T;sidebar_toggle Ctrl+X B;status_view Ctrl+X S |
| 会话 | session_export Ctrl+X X;session_new Ctrl+X N;session_list Ctrl+X L;session_timeline Ctrl+X G;session_rename Ctrl+R;session_delete Ctrl+D;session_interrupt Esc;session_compact Ctrl+X C |
| 子 Agent 会话 | session_child_first Ctrl+X ↓;session_child_cycle →;session_child_cycle_reverse ←;session_parent ↑ |
| 模型与 Agent | model_list Ctrl+X M;model_cycle_recent F2;model_cycle_recent_reverse Shift+F2;model_provider_list Ctrl+A;model_favorite_toggle Ctrl+F;stash_delete Ctrl+D;agent_list Ctrl+X A;agent_cycle Tab;agent_cycle_reverse Shift+Tab;variant_cycle Ctrl+T |
| 消息滚动 | messages_page_up PageUp / Ctrl+Alt+B;messages_page_down PageDown / Ctrl+Alt+F;messages_line_up Ctrl+Alt+Y;messages_line_down Ctrl+Alt+E;messages_half_page_up Ctrl+Alt+U;messages_half_page_down Ctrl+Alt+D;messages_first Ctrl+G / Home;messages_last Ctrl+Alt+G / End |
| 消息操作 | messages_copy Ctrl+X Y;messages_undo Ctrl+X U;messages_redo Ctrl+X R;messages_toggle_conceal Ctrl+X H(文档里与 tips_toggle 同键) |
| 输入框基础 | input_clear Ctrl+C;input_paste Ctrl+V;input_submit Enter;input_newline Shift+Enter / Ctrl+Enter / Alt+Enter / Ctrl+J;history_previous ↑;history_next ↓ |
| 对话框与补全 | dialog.select.prev ↑ / Ctrl+P;next ↓ / Ctrl+N;page_up PageUp;page_down PageDown;home Home;end End;submit Enter;dialog.prompt.submit Enter;dialog.mcp.toggle Space;prompt.autocomplete.prev ↑ / Ctrl+P;next ↓ / Ctrl+N;hide Esc;select Enter;complete Tab;permission.prompt.fullscreen Ctrl+F;plugins.toggle Space;dialog.plugins.install Shift+I |
| Which-key | which_key_toggle Ctrl+Alt+K;layout_toggle Ctrl+Alt+Shift+K;pending_toggle Ctrl+Alt+Shift+P;group_previous Ctrl+Alt+← / Ctrl+Alt+[;group_next Ctrl+Alt+→ / Ctrl+Alt+];scroll_up Ctrl+Alt+↑ / Ctrl+Alt+P;scroll_down Ctrl+Alt+↓ / Ctrl+Alt+N;page_up Ctrl+Alt+PageUp;page_down Ctrl+Alt+PageDown;home Ctrl+Alt+Home;end Ctrl+Alt+End |
默认未绑定、可自行绑定的 v1 动作:app_debug、app_console、app_heap_snapshot、app_toggle_animations、app_toggle_file_context、app_toggle_diffwrap、app_toggle_paste_summary、app_toggle_session_directory_filter、help_show、docs_open、theme_switch_mode、theme_mode_lock、scrollbar_toggle、session_copy、session_move、session_fork、session_toggle_timestamps、session_toggle_generic_tool_output、model_cycle_favorite(及 reverse)、mcp_list、provider_connect、console_org_switch、variant_list、messages_next / previous / last_user、tool_details、display_thinking、prompt_submit、prompt_editor_context_clear、prompt_skills、prompt_stash / stash_pop / stash_list、workspace_set、terminal_title_toggle、plugin_manager、plugin_install。
3.2 输入框编辑键(v1 与 v2 相同;v2 名字为 input.*)
| 动作 | 默认键 |
|---|---|
| 左 / 右 | ← Ctrl+B / → Ctrl+F |
| 上 / 下 | ↑ / ↓ |
| 选择 | Shift+← Shift+→ Shift+↑ Shift+↓ |
| 行首 / 行尾 | Ctrl+A / Ctrl+E;选择到行首 / 行尾 Ctrl+Shift+A / Ctrl+Shift+E |
| 视觉行首 / 行尾 | Alt+A / Alt+E;选择 Alt+Shift+A / Alt+Shift+E |
| 缓冲区首 / 尾 | v1:Home / End;v2 未绑定;选择到首 / 尾 Shift+Home / Shift+End |
| 删除 | Backspace;Delete / Ctrl+D;删行 Ctrl+Shift+D;删到行尾 Ctrl+K;删到行首 Ctrl+U |
| 撤销 / 重做 | Ctrl+-、Cmd+Z / Ctrl+.、Cmd+Shift+Z |
| 按词移动 | 前:Alt+F Alt+→ Ctrl+→;后:Alt+B Alt+← Ctrl+← |
| 按词选择 | 前:Alt+Shift+F Alt+Shift+→;后:Alt+Shift+B Alt+Shift+← |
| 按词删除 | 前:Alt+D Alt+Delete Ctrl+Delete;后:Ctrl+W Ctrl+Backspace Alt+Backspace |
| 全选 | Cmd+A |
桌面应用提示框内置的 Readline 风格键(不可通过 opencode.json 配置):Ctrl+A 行首、Ctrl+E 行尾、Ctrl+B / Ctrl+F 左右一字符、Alt+B / Alt+F 左右一词、Ctrl+D 删字符、Ctrl+K 删到行尾、Ctrl+U 删到行首、Ctrl+W 删前一词、Alt+D 删后一词、Ctrl+T 交换字符、Ctrl+G 关闭弹层或中止正在运行的回复。
3.3 v2(cli.json)默认键
| 分组 | 绑定 ID → 默认键 |
|---|---|
| 应用 | leader Ctrl+X;app.exit Ctrl+C / Ctrl+D / Ctrl+X Q;command.palette.show Ctrl+P;terminal.suspend Ctrl+Z;opencode mini 里的 app.clear Ctrl+L(清屏并重绘提示,保留滚动缓冲) |
| 界面与面板 | prompt.editor Ctrl+X E;session.sidebar.toggle Ctrl+X B;pane.focus.left Ctrl+X ←;pane.focus.right Ctrl+X →;terminal.select Ctrl+X ↓;terminal.toggle Ctrl+X T;terminal.close Ctrl+X ↑;opencode.status Ctrl+X S |
| 会话 | session.export Ctrl+X X;session.new Ctrl+X N;session.list Ctrl+X L;open.menu Ctrl+O(最近会话与项目);session.timeline Ctrl+X G;session.rename Ctrl+R;session.delete Ctrl+D;session.interrupt Esc;session.background Ctrl+B(后台化阻塞中的工具);session.compact Ctrl+X C;session.queued_prompts Ctrl+X Q(与 app.exit 同键,文档如此) |
| 会话标签页 | session.tab.next Ctrl+Tab / Alt+↓;previous Ctrl+Shift+Tab / Alt+↑;history.forward Ctrl+I;next_unread Alt+Shift+↓;previous_unread Alt+Shift+↑;close Ctrl+X W;reopen Ctrl+Shift+T;select.1…select.10 Ctrl+X 1…0 或 Ctrl+1…0;session.quick_switch.1…9 Ctrl+X 1…9 |
| 排队与子 Agent | queued_prompt.undo Ctrl+U;queued_prompt.delete Ctrl+D;session.child.first ↓(子 Agent 选择器);child.next →;child.previous ←;session.parent ↑;session.pin.toggle Ctrl+F |
| 模型与 Agent | model.list Ctrl+X M;model.cycle_recent F2 / reverse Shift+F2;model.dialog.provider Ctrl+A;model.dialog.favorite Ctrl+F;model.dialog.usage Ctrl+U;stash.delete Ctrl+D;agent.list Ctrl+X A;agent.cycle Shift+Tab;variant.cycle Ctrl+T |
| 消息导航 | session.page.up PageUp / Ctrl+Alt+B;page.down PageDown / Ctrl+Alt+F;line.up Ctrl+Alt+Y;line.down Ctrl+Alt+E;half.page.up Ctrl+Alt+U;half.page.down Ctrl+Alt+D;session.first Ctrl+G / Home / Alt+Home;session.last Ctrl+Alt+G / End;session.messages_last_user Alt+End;messages.copy Ctrl+X Y;session.undo Ctrl+X U;session.redo Ctrl+X R |
| 提示 | prompt.queue Ctrl+X Enter;prompt.images.view Ctrl+X I;prompt.clear Ctrl+C;prompt.paste Ctrl+V(preventDefault: false);input.submit Enter;input.newline Shift+Enter / Ctrl+Enter / Alt+Enter / Ctrl+J;prompt.history.previous ↑;next ↓ |
| Composer 列表 | 子 Agent:↑ ↓ 选择,Enter 跳转,Ctrl+D 中断;Shell:↑ ↓,Enter 查看输出,Ctrl+D 杀掉;终端:↑ k / ↓ j,Enter 选择。Shell 输出查看器里 ↑↓ PageUp PageDown Home 滚动,End 跟随新输出,Esc 返回但不停止命令 |
| 对话框与补全 | dialog.select.* 同 v1;dialog.prompt.submit Enter;prompt.autocomplete.* 同 v1;permission.prompt.fullscreen Ctrl+F;plugins.toggle Enter;dialog.mcp.toggle Space;dialog.plugins.error Space;dialog.plugins.update Ctrl+U;dialog.plugins.check Ctrl+R;dialog.integration.rename Ctrl+R;delete Ctrl+D;dialog.worktree.generate Tab;dialog.move_session.new Ctrl+A;move Ctrl+M;delete Ctrl+D;refresh Ctrl+R |
| Which-key | 与 v1 相同,ID 写作 which-key.* |
v2 diff 查看器
| 键 | 作用 |
|---|---|
d |
选择范围:All、Committed、Uncommitted、Last turn(会话内),或选 Base 改对比分支 |
Esc / q |
关闭 |
j ↓ / k ↑ |
下 / 上移动 |
PageDown Ctrl+F / PageUp Ctrl+B |
翻页 |
Ctrl+D / Ctrl+U |
半页 |
gg Home / Shift+G End |
到开头 / 结尾 |
] / [ |
下一个 / 上一个 hunk |
n Alt+↓ / p Alt+↑ |
下一个 / 上一个文件(在 diff 里 Alt 键用于切文件而不是切会话标签) |
b |
开关文件树 |
s |
单文件 patch 视图 |
v |
split / unified 切换 |
f |
全屏 |
m |
标记已审阅并折叠(全文件视图里再按取消标记) |
? Shift+? Shift+/ |
更多 diff 快捷键 |
diff.open 默认未绑定。v2 里 diff.toggle、diff.expand、diff.expand_all、diff.collapse、diff.switch_focus 已停用:配置仍被接受,但不再注册快捷键。
4. Pi
Pi 的快捷键配置在 <agent-dir>/keybindings.json,agent 目录默认是 ~/.pi/agent。每个动作可以绑一个键或一组键,配置值会替换该动作的默认键,写空数组表示解绑。改完在 Pi 里运行 /reload 即可生效,不用重启。运行 /hotkeys 可以查看当前会话实际生效的快捷键。旧版的 cursorUp、expandTools 这类 ID 会在启动时自动迁移成带命名空间的新 ID。
键语法是 modifier+key,修饰键有 ctrl、shift、alt、super,可组合,例如 ctrl+shift+x、ctrl+super+k、ctrl+1。super 需要终端单独上报该修饰键(通常靠 Kitty 键盘协议)。
4.1 日常使用(官方用法页)
| 快捷键 | 作用 |
|---|---|
Enter |
发送 |
Shift+Enter |
换行 |
Ctrl+G |
用外部编辑器写长提示 |
@ |
搜索文件并加入提示 |
Tab |
补全路径 |
Ctrl+O |
折叠 / 展开工具输出 |
Ctrl+T |
显示 / 隐藏思考块 |
Ctrl+L |
打开模型选择器(同 /model) |
Shift+Tab |
循环切换思考级别(同 /thinking) |
Ctrl+X |
复制最后一条助手回复(同 /copy) |
!命令 |
运行命令并把输出放进对话 |
!!命令 |
运行命令,但不把输出发给模型 |
/ |
搜索斜杠命令 |
工作中 Enter |
发送调整当前任务的消息:等当前回复和工具调用结束后,引导下一次回复 |
工作中 Alt+Enter |
追加后续任务:等 Pi 完成当前任务再处理 |
Alt+↑ |
把排队消息取回输入框 |
Esc |
停止当前任务(中止后排队消息会回到输入框) |
Windows Terminal 会占用部分 Alt 组合键,所以 Windows 和 WSL 上有替代默认键,见下表标注。
4.2 终端 UI:光标与编辑
| 动作 ID | 默认键 | 说明 |
|---|---|---|
tui.editor.cursorUp / cursorDown |
↑ / ↓ |
移动光标,在顶部 / 底部时翻更旧 / 更新的历史 |
tui.editor.historyPrevious / historyNext |
无 | 不论光标位置都翻提示历史,优先级高于同键的应用动作 |
tui.editor.cursorLeft / cursorRight |
← Ctrl+B / → Ctrl+F |
左 / 右 |
tui.editor.cursorWordLeft |
Alt+← Ctrl+← Alt+B |
按词左移 |
tui.editor.cursorWordRight |
Alt+→ Ctrl+→ Alt+F |
按词右移 |
tui.editor.cursorLineStart / cursorLineEnd |
Home Ctrl+A / End Ctrl+E |
行首 / 行尾 |
tui.editor.jumpForward / jumpBackward |
Ctrl+] / Ctrl+Alt+] |
向前 / 向后跳到指定字符 |
tui.editor.pageUp / pageDown |
PageUp Ctrl+PageUp / PageDown Ctrl+PageDown |
按页滚动 |
tui.editor.deleteCharBackward |
Backspace |
向后删字符 |
tui.editor.deleteCharForward |
Delete Ctrl+D |
向前删字符 |
tui.editor.deleteWordBackward |
Ctrl+W Alt+Backspace |
向后删词 |
tui.editor.deleteWordForward |
Alt+D Alt+Delete |
向前删词 |
tui.editor.deleteToLineStart / deleteToLineEnd |
Ctrl+U / Ctrl+K |
删到行首 / 行尾 |
tui.editor.yank / yankPop |
Ctrl+Y / Alt+Y |
粘贴最近删除的文本 / 循环删除历史 |
tui.editor.undo |
Ctrl+-(Windows 为 Ctrl+Z,WSL 为 Alt+Z) |
撤销 |
tui.input.newLine |
Shift+Enter Ctrl+J |
换行 |
tui.input.submit |
Enter |
提交 |
tui.input.tab |
Tab |
Tab 或自动补全 |
tui.input.copy |
Ctrl+C |
复制选区 |
tui.select.up / down |
↑ / ↓ |
列表选择上 / 下 |
tui.select.pageUp / pageDown |
PageUp / PageDown |
列表翻页 |
tui.select.confirm |
Enter |
确认 |
tui.select.cancel |
Esc Ctrl+C |
取消 |
4.3 全屏模式(默认模式)
全屏模式下这些动作控制转录区,优先级高于同键的编辑器动作。
| 动作 ID | 默认键 | 说明 |
|---|---|---|
tui.altScreen.pageUp / pageDown |
PageUp / PageDown |
整页滚动 |
tui.altScreen.halfPageUp / halfPageDown |
无 | 半页滚动 |
tui.altScreen.lineUp / lineDown |
无 | 单行滚动 |
tui.altScreen.previousPrompt |
Ctrl+Shift+↑ Ctrl+↑(Ctrl+↑ 仅 Windows 与 WSL) |
跳到上一条标记消息 |
tui.altScreen.nextPrompt |
Ctrl+Shift+↓ Ctrl+↓(同上) |
跳到下一条标记消息 |
tui.altScreen.search |
Ctrl+Shift+F(Windows 与 WSL 为 Ctrl+F) |
搜索已渲染的转录 |
tui.altScreen.searchNext |
Enter Ctrl+G |
搜索中跳到下一个匹配 |
tui.altScreen.searchPrevious |
Shift+Enter Ctrl+Shift+G |
搜索中跳到上一个匹配 |
tui.altScreen.searchClose |
Esc |
关闭搜索 |
tui.altScreen.top / bottom |
Ctrl+Home / Ctrl+End |
到转录开头 / 末尾并跟随新输出 |
4.4 应用、会话、模型
| 动作 ID | 默认键 | 说明 |
|---|---|---|
app.interrupt |
Esc |
取消 / 中止 |
app.clear |
Ctrl+C |
第一次清空编辑器,第二次退出 |
app.exit |
Ctrl+D |
编辑器为空时退出 |
app.suspend |
Ctrl+Z(原生 Windows 无默认键) |
挂到后台;WSL 用 Ctrl+Z 和 fg |
app.editor.external |
Ctrl+G |
外部编辑器,依次取 externalEditor 设置、$VISUAL、$EDITOR,Windows 用记事本,其他系统用 nano |
app.clipboard.pasteImage |
Ctrl+V(Windows 与 WSL 为 Alt+V) |
粘贴文件(macOS)、图片或文本 |
app.session.new / tree / fork / resume |
无 | 对应 /new /tree /fork /resume |
app.session.togglePath |
Ctrl+P |
会话列表里切换路径显示 |
app.session.toggleSort |
Ctrl+S |
切换排序 |
app.session.toggleNamedFilter |
Ctrl+N |
只看已命名会话 |
app.session.rename |
Ctrl+R |
重命名会话 |
app.session.delete |
Ctrl+D |
删除会话 |
app.session.deleteNoninvasive |
Ctrl+Backspace |
查询为空时删除会话 |
app.model.select |
Ctrl+L |
打开模型选择器 |
app.model.cycleForward |
Ctrl+P |
切到下一个模型 |
app.model.cycleBackward |
Shift+Ctrl+P(Windows 与 WSL 为 Alt+P) |
切到上一个模型 |
app.models.save |
Ctrl+S |
把选中的默认模型或范围模型配置存入设置 |
app.thinking.cycle |
Shift+Tab |
循环思考级别 |
app.thinking.save |
Ctrl+S |
把当前思考级别存入设置 |
app.thinking.toggle |
Ctrl+T |
折叠 / 展开思考块 |
app.tools.expand |
Ctrl+O |
折叠 / 展开工具输出 |
app.message.copy |
Ctrl+X |
在 /tree 里复制选中消息;全屏下 fullscreenCopyOnSelect 为 false 时复制当前选区,否则复制最后一条助手回复;OAuth 登录页复制登录 URL |
app.message.followUp |
Alt+Enter(Windows 与 WSL 为 Ctrl+Q) |
排队追加消息 |
app.message.dequeue |
Alt+↑(Windows 与 WSL 为 Alt+Q) |
把排队消息取回编辑器 |
4.5 /tree 与 /scoped-models
| 动作 ID | 默认键 | 说明 |
|---|---|---|
app.tree.foldOrUp |
Ctrl+← Alt+← |
折叠当前分支段,或跳到上一段起点 |
app.tree.unfoldOrDown |
Ctrl+→ Alt+→ |
展开当前分支段,或跳到下一段起点或分支末尾 |
app.tree.editLabel |
Shift+L |
编辑选中节点的标签 |
app.tree.toggleLabelTimestamp |
Shift+T |
切换标签时间戳 |
app.tree.filter.default |
Ctrl+D |
过滤器恢复默认视图 |
app.tree.filter.noTools |
Ctrl+T |
隐藏工具结果 |
app.tree.filter.userOnly |
Ctrl+U |
只看用户消息 |
app.tree.filter.labeledOnly |
Ctrl+L |
只看有标签的条目 |
app.tree.filter.all |
Ctrl+A |
显示全部条目 |
app.tree.filter.cycleForward / cycleBackward |
Ctrl+O / Shift+Ctrl+O |
循环切换过滤器 |
app.models.enableAll |
Ctrl+A |
范围模型选择器里启用全部(或全部匹配项) |
app.models.clearAll |
Ctrl+X |
清空全部(或全部匹配项) |
app.models.toggleProvider |
Ctrl+P |
切换当前供应商下的全部模型 |
app.models.reorderUp / reorderDown |
Alt+↑ / Alt+↓ |
调整选中模型在循环顺序里的位置 |
5. 容易踩的坑
- Ctrl+X 是共用前缀。 OpenCode 的 leader、Claude Code 的一批组合键(
Ctrl+X Ctrl+K、Ctrl+X Ctrl+E、Ctrl+X Enter等)、Codex 的语音静音默认键、Pi 的复制,都占用了它。在 tmux 里叠加使用时要留意。 Ctrl+B是 tmux 前缀。 Claude Code 里后台化要按两次,或改用Ctrl+X Ctrl+B。Shift+Enter不是所有终端都能用。 Claude Code 在 iTerm2、WezTerm、Ghostty、Kitty、Warp、Apple Terminal、Windows Terminal 里原生可用,其他终端用Ctrl+J或\+Enter。OpenCode 在 Windows Terminal 需要手工配置。- macOS 的 Alt 类键要先设 Option 为 Meta。 Apple Terminal 勾选“Use Option as Meta Key”;VS Code 设置
"terminal.integrated.macOptionIsMeta": true。 - 同名键含义不同。
Ctrl+O在 Claude Code 是转录视图,在 Codex 是复制回复,在 Pi 是展开工具输出,在 OpenCode v2 是最近会话菜单。Ctrl+L在 Claude Code 是重绘,在 Codex 是清终端视图,在 Pi 是选模型。Ctrl+T在 Claude Code 是待办清单,在 Codex 是转录,在 OpenCode 是切模型变体,在 Pi 是折叠思考块。 - 两次
Esc的行为不同。 Claude Code 和 Codex 都是“空输入时回退到上一条消息”,Claude Code 在输入框有内容时则是清空草稿。 - 有些细节文档没写清。 OpenCode 文档里
Ctrl+X Q同时分给了app.exit和session.queued_prompts,Ctrl+X H同时分给了messages_toggle_conceal和tips_toggle,以你实际版本为准。Codex 官方页对Ctrl+C的描述是关闭会话,源码里它是“中断或退出”的固定键。
6. 资料来源
- Claude Code:code.claude.com 的 Interactive mode 与 Customize keyboard shortcuts 两页。
- Codex CLI:
openai/codexmain 分支codex-rs/tui/src/keymap.rs的内置默认表,加上官方文档里的交互快捷键说明。 - OpenCode:opencode.ai/docs/keybinds(v1,页面更新于 2026-10-24)与 opencode.ai/v2/docs/cli/keybinds(v2)。
- Pi:pi.dev/docs/latest/keybindings 与 pi.dev/docs/latest/usage。
这些工具迭代很快,实际以应用内为准:Claude Code 按 ?,Codex 用 /keymap,Pi 用 /hotkeys,OpenCode 用 Ctrl+P 命令面板或 which-key(Ctrl+Alt+K)。