键位
CrabCode 终端 UI 的快捷键体系。默认键位 + 用户自定义。
是什么
CrabCode 自带一套 keybinding 引擎:每个 UI 动作(提交、撤销、补全、确认、滚动等)有唯一的 action 名,可以绑定到一个或多个键组合。用户在 ~/.crabcode/keybindings.json 里写自定义会覆盖默认。
何时会看到这个文档
- 在 TUI 里输入
/help查看键位标签时点入 - 编辑
keybindings.json时查参考
默认核心键位(节选)
按 context 组织。同一个键在不同 context 下可以触发不同动作。
Global(全局)
| 键 | Action | 说明 |
|---|---|---|
Ctrl+C | app:interrupt | 打断当前模型输出;连按两次退出 |
Ctrl+D | app:exit | 退出 |
Ctrl+L | app:redraw | 重绘屏幕 |
Ctrl+T | app:toggleTodos | 切换 todo 面板 |
Ctrl+O | app:toggleTranscript | 切换 transcript 显示 |
Ctrl+R | history:search | 搜索历史会话 |
Chat(聊天输入)
| 键 | Action | 说明 |
|---|---|---|
Enter | chat:submit | 提交输入 |
Esc | chat:cancel | 取消 / 关闭弹层 |
↑ / ↓ | history:previous / history:next | 上 / 下翻历史输入 |
Shift+Tab | chat:cycleMode | 切换交互模式(Windows 部分场景为 Meta+M) |
Meta+P | chat:modelPicker | 打开模型选择器 |
Meta+T | chat:thinkingToggle | 切换思考强度 |
Meta+O | chat:fastMode | 切换 Fast 模式 |
Ctrl+_ 或 Ctrl+Shift+- | chat:undo | 撤销输入 |
Ctrl+G 或 Ctrl+X Ctrl+E | chat:externalEditor | 用外部编辑器编辑当前 prompt |
Ctrl+S | chat:stash | 暂存当前输入 |
Autocomplete(补全弹层)
| 键 | Action |
|---|---|
Tab | autocomplete:accept |
Esc | autocomplete:dismiss |
↑ / ↓ | autocomplete:previous / autocomplete:next |
完整默认表可以在 TUI 里 /help → 键位标签查看。
自定义
编辑 ~/.crabcode/keybindings.json:
{
"bindings": {
"chat:submit": ["enter", "cmd+enter"],
"chat:cancel": ["escape"],
"app:interrupt": ["ctrl+g"]
}
}{
"bindings": {
"chat:submit": ["enter", "cmd+enter"],
"chat:cancel": ["escape"],
"app:interrupt": ["ctrl+g"]
}
}支持的修饰键:ctrl / cmd / meta / alt / shift。
支持 chord(双键序列):["ctrl+x ctrl+s"](用空格分隔表示连续按两次)。
限制
- 保留键不能改:
Ctrl+C、Ctrl+D、Ctrl+M(终端把Ctrl+M等同 Enter,绑过去会冲突)—— 见src/keybindings/reservedShortcuts.ts - 被终端 / OS 拦截的键:
Ctrl+Z(SIGTSTP)、Ctrl+\(SIGQUIT)等;这些可以写,但终端不会把事件传给应用 - 冲突检测:启动时若发现重复绑定,
crabcode --debug会在日志里提示