快捷键
所有键盘快捷键都可以通过~/.pi/agent/keybindings.json自定义。每个动作都可以绑定到一个或多个键。
配置文件使用与 pi 内部使用的命名空间键绑定 ID 以及扩展作者在 keyHint() 和注入的 keybindings 管理器中使用的相同的命名空间键绑定 ID。
使用预命名空间 id(例如 cursorUp 或 expandTools)的旧配置会在启动时自动迁移到命名空间 id。
编辑 keybindings.json 后,在 pi 中运行 /reload 以应用更改,而无需重新启动会话。
密钥格式
modifier+key,其中修饰符为 ctrl、shift、alt、super(可组合),键为:
- 字母:
a-z - 数字:
0-9 - 特殊键:
escape,esc,enter,return,tab,space,backspace,delete,insert,clear,home,end,pageUp,pageDown,up,down,left,right - 功能键:
f1-f12 - 符号:
`,-,=,[,],\,;,',,,.,/,!,@,#,$,%,^,&,*,(,),_,+,|,~,{,},:,<,>,?
修饰符组合:ctrl+shift+x、alt+ctrl+x、ctrl+shift+alt+x、super+k、ctrl+super+k、ctrl+1等。
super 绑定需要一个单独报告修饰符的终端,通常通过 Kitty 键盘协议。如果没有这种支持,它们可能无法在终端中工作。
所有动作
TUI 编辑器光标移动
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
tui.editor.cursorUp |
up |
向上移动光标,在顶部浏览较旧的历史记录 |
tui.editor.cursorDown |
down |
向下移动光标,在底部浏览较新的历史记录 |
tui.editor.historyPrevious |
(没有任何) | 选择上一个提示历史记录条目 |
tui.editor.historyNext |
(没有任何) | 选择下一个提示历史条目 |
tui.editor.cursorLeft |
left, ctrl+b |
向左移动光标 |
tui.editor.cursorRight |
right, ctrl+f |
向右移动光标 |
tui.editor.cursorWordLeft |
alt+left, ctrl+left, alt+b |
向左移动光标单词 |
tui.editor.cursorWordRight |
alt+right, ctrl+right, alt+f |
向右移动光标单词 |
tui.editor.cursorLineStart |
home, ctrl+home, ctrl+a |
移至行开头 |
tui.editor.cursorLineEnd |
end, ctrl+end, ctrl+e |
移至行尾 |
tui.editor.jumpForward |
ctrl+] |
向前跳转到角色 |
tui.editor.jumpBackward |
ctrl+alt+] |
向后跳转到字符 |
tui.editor.pageUp |
pageUp, ctrl+pageUp |
按页向上滚动 |
tui.editor.pageDown |
pageDown, ctrl+pageDown |
按页向下滚动 |
无论多行提示中的光标位置如何,专用历史操作始终会更改历史条目。当主编辑器聚焦时,显式历史记录绑定优先于应用程序操作,因此将 tui.editor.historyPrevious 绑定到 ctrl+p 会覆盖该上下文中的模型循环,而不会更改选择器中的Ctrl+P。
TUI 编辑器删除
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
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 |
ctrl+u |
删除至行首 |
tui.editor.deleteToLineEnd |
ctrl+k |
删除到行尾 |
TUI 输入
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
tui.input.newLine |
shift+enter, ctrl+j |
插入新行 |
tui.input.submit |
enter |
提交意见 |
tui.input.tab |
tab |
选项卡/自动完成 |
TUI 杀戒
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
tui.editor.yank |
ctrl+y |
粘贴最近删除的文本 |
tui.editor.yankPop |
alt+y |
猛拉后循环浏览已删除的文本 |
tui.editor.undo |
ctrl+- |
撤消上次编辑 |
TUI 剪贴板和选择
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
tui.input.copy |
ctrl+c |
复制选择 |
tui.select.up |
up |
上移选择 |
tui.select.down |
down |
向下移动选择 |
tui.select.pageUp |
pageUp |
在列表中向上翻页 |
tui.select.pageDown |
pageDown |
在列表中向下翻页 |
tui.select.confirm |
enter |
确认选择 |
tui.select.cancel |
escape, ctrl+c |
取消选择 |
TUI 全屏视口
当交互模式使用 --tui-mode fullscreen 并定位主转录本滚动区域时,将应用这些操作。两指触控板和鼠标滚轮输入滚动指针下方的区域,回落到固定编辑器/状态/页脚停靠栏上的文字记录。单击 OSC 8 超链接将其在默认处理程序中打开。使用鼠标主按钮拖动选择文本并将其复制到剪贴板;按住记录的顶部或底部边缘会自动滚动到屏幕外的内容。
全屏转录本绑定优先于编辑器绑定。因此,默认的未修改导航键控制全屏模式下的文字记录,而其 ctrl 变体继续控制编辑器。在全屏模式之外,两种变体都控制编辑器。
| 钥匙 | 默认模式 | 全屏模式 |
|---|---|---|
home, end |
编辑 | 成绩单 |
ctrl+home, ctrl+end |
编辑 | 编辑 |
pageUp, pageDown |
编辑 | 成绩单 |
ctrl+pageUp, ctrl+pageDown |
编辑 | 编辑 |
该路由仍然可以通过普通操作绑定进行配置。例如,"tui.altScreen.pageUp": "ctrl+pageUp" 使pageUp 控制编辑器,ctrl+pageUp 控制全屏模式下的文字记录。绑定 tui.altScreen.halfPageUp 和 tui.altScreen.halfPageDown 以实现较小的转录步骤,同时保持全页绑定。设置 "tui.altScreen.pageUp": [] 会完全禁用该转录快捷方式。用户绑定替换该操作的默认值。
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
tui.altScreen.pageUp |
pageUp |
将文字记录向上滚动一页 |
tui.altScreen.pageDown |
pageDown |
将文字记录向下滚动一页 |
tui.altScreen.halfPageUp |
(没有任何) | 将文字记录向上滚动半页 |
tui.altScreen.halfPageDown |
(没有任何) | 将文字记录向下滚动半页 |
tui.altScreen.previousPrompt |
ctrl+shift+up |
跳转到上一条标记的消息 |
tui.altScreen.nextPrompt |
ctrl+shift+down |
跳转到下一条标记的消息 |
tui.altScreen.top |
home |
滚动到文字记录的开头 |
tui.altScreen.bottom |
end |
滚动到转录结束并跟随新的输出 |
应用
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
app.interrupt |
escape |
取消/中止 |
app.clear |
ctrl+c |
清除编辑器(第一)/退出(第二) |
app.exit |
ctrl+d |
退出(当编辑器为空时) |
app.suspend |
ctrl+z(Windows 上无) |
暂停到后台 |
app.editor.external |
ctrl+g |
在外部编辑器中打开(externalEditor、$VISUAL、$EDITOR、Windows 上的记事本或其他地方的 nano) |
app.clipboard.pasteImage |
ctrl+v(alt+v 在 Windows 上) |
从剪贴板粘贴图像或文本 |
会话
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
app.session.new |
(没有任何) | 开始新会话 (/new) |
app.session.tree |
(没有任何) | 打开 session tree 导航器 (/tree) |
app.session.fork |
(没有任何) | 分叉当前会话 (/fork) |
app.session.resume |
(没有任何) | 打开会话恢复选择器 (/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 |
当查询为空时删除会话 |
Models与思考
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
app.model.select |
ctrl+l |
打开模型选择器 |
app.model.cycleForward |
ctrl+p |
循环到下一个模型 |
app.model.cycleBackward |
shift+ctrl+p |
循环到之前的模型 |
app.thinking.cycle |
shift+tab |
循环思维水平 |
app.thinking.toggle |
ctrl+t |
折叠或扩展思维块 |
显示和消息队列
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
app.tools.expand |
ctrl+o |
折叠或展开工具输出 |
app.message.copy |
ctrl+x |
复制最后一条助理消息,或/tree中选定的消息 |
app.message.followUp |
alt+enter |
队列后续消息 |
app.message.dequeue |
alt+up |
将排队消息恢复到编辑器 |
树状导航
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
app.tree.foldOrUp |
ctrl+left, alt+left |
折叠当前分支段,或跳转到上一个段开始 |
app.tree.unfoldOrDown |
ctrl+right, alt+right |
展开当前分支段,或跳转到下一个段起点或分支终点 |
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 |
ctrl+o |
循环树过滤器向前 |
app.tree.filter.cycleBackward |
shift+ctrl+o |
向后循环树过滤 |
作用域Models选择器
在作用域模型选择器中使用(通过 /scoped-models 打开)。
| 按键绑定 ID | 默认 | 描述 |
|---|---|---|
app.models.save |
ctrl+s |
将当前模型选择保存到设置 |
app.models.enableAll |
ctrl+a |
启用所有模型(或所有匹配当前搜索的模型) |
app.models.clearAll |
ctrl+x |
清除所有型号(或所有与当前搜索匹配的型号) |
app.models.toggleProvider |
ctrl+p |
切换当前提供商的所有模型 |
app.models.reorderUp |
alt+up |
将所选模型在循环顺序中上移 |
app.models.reorderDown |
alt+down |
将所选模型按循环顺序向下移动 |
自定义配置
创建~/.pi/agent/keybindings.json:
{
"tui.editor.historyPrevious": "ctrl+p",
"tui.editor.historyNext": "ctrl+n",
"tui.editor.deleteWordBackward": ["ctrl+w", "alt+backspace"]
}每个操作可以有一个键或一组键。用户配置覆盖默认值。
在本机 Windows 上,app.suspend 没有默认绑定,因为 Windows 终端不支持 Unix 作业控制。如果您手动绑定它,pi 将显示状态消息而不是挂起。在 WSL 中,正常的 Linux ctrl+z/fg 行为仍然适用。
Emacs 示例
{
"tui.editor.historyPrevious": "ctrl+p",
"tui.editor.historyNext": "ctrl+n",
"tui.editor.cursorLeft": ["left", "ctrl+b"],
"tui.editor.cursorRight": ["right", "ctrl+f"],
"tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
"tui.editor.cursorWordRight": ["alt+right", "alt+f"],
"tui.editor.deleteCharForward": ["delete", "ctrl+d"],
"tui.editor.deleteCharBackward": ["backspace", "ctrl+h"],
"tui.input.newLine": ["shift+enter", "ctrl+j"]
}Vim 示例
{
"tui.editor.cursorUp": ["up", "alt+k"],
"tui.editor.cursorDown": ["down", "alt+j"],
"tui.editor.cursorLeft": ["left", "alt+h"],
"tui.editor.cursorRight": ["right", "alt+l"],
"tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
"tui.editor.cursorWordRight": ["alt+right", "alt+w"]
}