Pi 的配置、扩展、平台设置和 API 参考。

快捷键

所有键盘快捷键都可以通过~/.pi/agent/keybindings.json自定义。每个动作都可以绑定到一个或多个键。

配置文件使用与 pi 内部使用的命名空间键绑定 ID 以及扩展作者在 keyHint() 和注入的 keybindings 管理器中使用的相同的命名空间键绑定 ID。

使用预命名空间 id(例如 cursorUpexpandTools)的旧配置会在启动时自动迁移到命名空间 id。

编辑 keybindings.json 后,在 pi 中运行 /reload 以应用更改,而无需重新启动会话。

密钥格式

modifier+key,其中修饰符为 ctrlshiftaltsuper(可组合),键为:

  • 字母: 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+xalt+ctrl+xctrl+shift+alt+xsuper+kctrl+super+kctrl+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.halfPageUptui.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+valt+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"]
}