覆盖 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/codex main 分支 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)。