第 4 章 · 交互模式:编辑器/命令/快捷键
本章目标:熟悉 TUI 界面分区与编辑器能力,掌握常用斜杠命令与快捷键,学会用消息队列在模型工作时"排队插话",并完成终端兼容性配置。
4.1 TUI 布局一览
交互模式界面自上而下分四个区域:
┌─────────────────────────────────────────────┐
│ Startup header 快捷键提示/已加载的 AGENTS.md │
│ /模板/技能/扩展 清单 │
├─────────────────────────────────────────────┤
│ Messages 用户消息/回复/工具调用与结果 │
├─────────────────────────────────────────────┤
│ Editor 输入区(边框颜色指示思考等级) │
├─────────────────────────────────────────────┤
│ Footer 目录/会话名/token与费用/当前模型│
└─────────────────────────────────────────────┘Footer 的统计值得专门认识:↑ 输入 token、↓ 输出 token、R 缓存读、W 缓存写、CH 最近缓存命中率——这是控制成本的第一仪表盘。编辑器可能被临时替换(如内置 /settings 面板,或扩展提供的结构化问答 UI)。
4.2 编辑器的六项核心能力
| 功能 | 操作 |
|---|---|
| 文件引用 | 输入 @ 模糊搜索项目文件 |
| 路径补全 | Tab |
| 多行输入 | Shift+Enter(Windows Terminal 用 Ctrl+Enter) |
| 外部编辑器 | Ctrl+G 打开 $VISUAL/$EDITOR(Windows 为 Notepad,兜底 nano) |
| 粘贴图片/文本 | Ctrl+V(Windows 用 Alt+V),或直接拖图进终端 |
| 执行 shell 命令 | !command 输出发给模型;!!command 不发给模型 |
# 典型流:外部编辑器写长提示词 → 引用文件 → 提交
# Ctrl+G 打开 vim 写一段复杂的重构需求,保存退出后自动回到编辑器把长提示词交给趁手的编辑器
超过三四行的需求描述建议 Ctrl+G 进外部编辑器书写:有语法高亮、可反复修改,比在小编辑框里挤一行高效得多。
4.3 常用斜杠命令清单
输入 / 触发命令补全(扩展可注册新命令、技能以 /skill:名称 出现、模板以 /模板名 展开)。日常最常用:
/model 切换模型 /resume 选择历史会话
/new 新建会话 /name <名> 给会话命名
/session 查看当前会话信息 /tree 会话树导航
/fork 从历史消息分叉 /clone 克隆当前分支为新会话
/compact [指令] 手动压缩上下文 /copy 复制上一条回复
/export [文件] 导出 HTML/JSONL /share 上传为私有 GitHub gist
/hotkeys 显示全部快捷键 /quit 退出管理类还有 /login、/logout(凭据)、/settings(思考等级/主题/消息投递/传输方式)、/trust(保存项目信任)、/reload(重载快捷键/扩展/技能/模板/主题/上下文文件)。
4.4 高频快捷键
| 按键 | 动作 |
|---|---|
| Ctrl+C | 清空编辑器;连按两次退出 |
| Escape | 取消/中断当前生成 |
| Escape×2 | 打开 /tree 会话树 |
| Ctrl+L | 模型选择器 |
| Ctrl+P / Shift+Ctrl+P | scoped models 正反循环 |
| Shift+Tab | 循环思考等级 |
| Ctrl+O | 折叠/展开工具输出 |
| Ctrl+T | 折叠/展开思考块 |
| Ctrl+X | 复制最后一条助手消息 |
所有快捷键可通过 ~/.pi/agent/keybindings.json 重映射,格式为 修饰键+键位(如 ctrl+shift+x),完整动作表用 /hotkeys 查看:
{
"tui.editor.historyPrevious": "ctrl+p",
"tui.input.submit": "enter"
}注意官方提醒:把 tui.editor.historyPrevious 绑到 ctrl+p 后,在该编辑器上下文里 Ctrl+P 将不再用于模型循环。
4.5 消息队列:模型干活时怎么插话
模型正在执行时你仍可提交消息,两种排队语义:
- Enter = steering(转向)消息:当前轮工具调用结束后立即送达,适合中途纠偏;
- Alt+Enter = follow-up(跟进)消息:等智能体全部工作完成后才送达,适合追加下一步任务;
- Escape 中止并把队列里的消息退回编辑器;Alt+Up 取回排队消息。
投递节奏可在 /settings 或 settings.json 配置:steeringMode 与 followUpMode 均默认 "one-at-a-time"(逐条等待响应),改为 "all" 则一次性全部送达。transport 可指定支持多传输方式的 provider 使用 "sse" / "websocket" / "auto"。
4.6 终端兼容性配置
pi 依赖 Kitty keyboard protocol 做可靠的修饰键识别:
- Kitty / iTerm2 常规模式:开箱即用;
- iTerm2 全屏模式触控板滚动过慢:设置 → Advanced → 搜索 "Trackpad scrolls fast?" 设为 No;
- Apple Terminal:本地回退机制可把普通 Return 当 Shift+Enter 处理,但 SSH 远程场景无效;
- Windows Terminal 的 Alt+Enter 默认是全屏,需要按 terminal-setup 文档重映射后才能用作 follow-up 快捷键。
本章小结
- TUI 四分区:header/messages/editor/footer,footer 是成本仪表盘;
- 编辑器六大能力:@ 引用、Tab 补全、Shift+Enter 多行、Ctrl+G 外部编辑器、Ctrl+V 贴图、! 执行命令;
- 消息队列区分 steering(Enter,即时纠偏)与 follow-up(Alt+Enter,完工后执行);
- 快捷键皆可在 keybindings.json 重映射,
/hotkeys是权威清单; - 终端需支持 Kitty keyboard protocol,Windows Terminal 要手动处理 Alt+Enter 冲突。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. 模型正在执行任务时按 Enter 提交消息,效果是?
2. 想粘贴一张截图给模型分析 UI,正确的操作是?
3. 关于 !!command 与 !command 的区别,正确的是?
4. Escape 连按两次会触发什么?
🛠️ 动手实践
- 用 Ctrl+G 在外部编辑器里写一个不少于 10 行的重构需求提交给 pi,对比小编辑框的体验差异。
- 让 pi 执行一个较长的任务,期间分别用 Enter 和 Alt+Enter 各排一条消息,观察两者的送达时机差异。
- 把
/tree重映射到你喜欢的按键组合,并用/hotkeys验证生效。
进入下一章:会话管理,让每一次工作都可追溯、可回滚。