Keybindings(快捷键)

本页面是 Pi 官方文档 的中文翻译。仅供学习参考。

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

配置文件使用 Pi 内部使用的相同命名空间快捷键 ID,扩展作者在 keyHint() 和注入的 keybindings 管理器中也使用这些 ID。

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

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

按键格式

格式:modifier+key,修饰键包括 ctrlshiftaltsuper(可组合),按键包括:

  • 字母键a-z
  • 数字键0-9
  • 特殊键escapeescenterreturntabspacebackspacedeleteinsertclearhomeendpageUppageDownupdownleftright
  • 功能键f1f12
  • 符号`-=[]\;',./!@#$%^&*()_+|~{}:<>?

修饰键组合示例:ctrl+shift+xalt+ctrl+xctrl+shift+alt+xsuper+kctrl+super+kctrl+1 等。

super 绑定需要终端单独报告修饰键,通常通过 Kitty 键盘协议实现。在不支持该协议的终端上可能无法工作。

所有操作

TUI 编辑器光标移动

ID默认键说明
tui.editor.cursorUpup光标上移,在顶部浏览更早的历史
tui.editor.cursorDowndown光标下移,在底部浏览更新的历史
tui.editor.historyPrevious选择上一条 prompt 历史记录
tui.editor.historyNext选择下一条 prompt 历史记录
tui.editor.cursorLeftleftctrl+b光标左移
tui.editor.cursorRightrightctrl+f光标右移
tui.editor.cursorWordLeftalt+leftctrl+leftalt+b光标左移一个单词
tui.editor.cursorWordRightalt+rightctrl+rightalt+f光标右移一个单词
tui.editor.cursorLineStarthomectrl+homectrl+a移至行首
tui.editor.cursorLineEndendctrl+endctrl+e移至行尾
tui.editor.jumpForwardctrl+]向前跳转至字符
tui.editor.jumpBackwardctrl+alt+]向后跳转至字符
tui.editor.pageUppageUpctrl+pageUp上翻页
tui.editor.pageDownpageDownctrl+pageDown下翻页

专用历史操作始终改变历史条目,无论光标在多行 Prompt 中的位置。主编辑器聚焦时,显式历史绑定优先于应用程序操作,因此将 tui.editor.historyPrevious 绑定到 ctrl+p 会覆盖该上下文中的模型循环,而不改变选择器中的 Ctrl+P

TUI 编辑器删除

ID默认键说明
tui.editor.deleteCharBackwardbackspace删除前一个字符
tui.editor.deleteCharForwarddeletectrl+d删除后一个字符
tui.editor.deleteWordBackwardctrl+walt+backspace向前删除一个单词
tui.editor.deleteWordForwardalt+dalt+delete向后删除一个单词
tui.editor.deleteToLineStartctrl+u删除到行首
tui.editor.deleteToLineEndctrl+k删除到行尾

TUI 输入

ID默认键说明
tui.input.newLineshift+enterctrl+j插入新行
tui.input.submitenter提交输入
tui.input.tabtabTab / 自动补全

TUI Kill Ring

ID默认键说明
tui.editor.yankctrl+y粘贴最近删除的文本
tui.editor.yankPopalt+y在 yank 后循环已删除文本
tui.editor.undoctrl+-撤销上次编辑

TUI 剪贴板和选择

ID默认键说明
tui.input.copyctrl+c复制选中
tui.select.upup向上移动选择
tui.select.downdown向下移动选择
tui.select.pageUppageUp列表中向上翻页
tui.select.pageDownpageDown列表中向下翻页
tui.select.confirmenter确认选择
tui.select.cancelescapectrl+c取消选择

TUI 全屏视口

这些操作在交互模式使用 --tui-mode fullscreen 时生效,作用于主转录滚动区域。双指触控板和鼠标滚轮输入可滚动指针所在区域,指针位于固定的编辑器/状态栏/底部停靠栏上方时则滚动转录。点击 OSC 8 超链接会以默认处理器打开。用鼠标主按钮拖拽可选中文本并复制到剪贴板;在转录顶部或底部边缘按住会自动滚动查看屏幕外内容。终端特定的鼠标和触控板行为参见 终端设置

全屏转录绑定优先于编辑器绑定。因此默认未修改的导航键在全屏模式下控制转录,而其 ctrl 变体继续控制编辑器。在全屏模式之外,两种变体都控制编辑器。

按键默认模式全屏模式
homeend编辑器转录
ctrl+homectrl+end编辑器编辑器
pageUppageDown编辑器转录
ctrl+pageUpctrl+pageDown编辑器编辑器

此路由仍可通过常规操作绑定配置。例如,"tui.altScreen.pageUp": "ctrl+pageUp"pageUp 控制编辑器,ctrl+pageUp 在全屏模式下控制转录。绑定 tui.altScreen.halfPageUptui.altScreen.halfPageDown 可按半页滚动,绑定 tui.altScreen.lineUptui.altScreen.lineDown 可按单行滚动。设置 "tui.altScreen.pageUp": [] 会完全禁用该转录快捷键。用户绑定会替换该操作的默认值。

ID默认键说明
tui.altScreen.pageUppageUp向上滚动转录一页
tui.altScreen.pageDownpageDown向下滚动转录一页
tui.altScreen.halfPageUp向上滚动转录半页
tui.altScreen.halfPageDown向下滚动转录半页
tui.altScreen.lineUp向上滚动转录一行
tui.altScreen.lineDown向下滚动转录一行
tui.altScreen.previousPromptctrl+shift+up跳转到上一条标记消息
tui.altScreen.nextPromptctrl+shift+down跳转到下一条标记消息
tui.altScreen.searchctrl+shift+f搜索已渲染的转录
tui.altScreen.searchNextenterctrl+g搜索时选择下一个匹配项
tui.altScreen.searchPreviousshift+enterctrl+shift+g搜索时选择上一个匹配项
tui.altScreen.searchCloseescape关闭转录搜索
tui.altScreen.tophome滚动到转录开头
tui.altScreen.bottomend滚动到转录末尾并跟随新输出

应用程序

ID默认键说明
app.interruptescape取消/中断
app.clearctrl+c清空编辑器(第一次)/ 退出(第二次)
app.exitctrl+d退出(编辑器为空时)
app.suspendctrl+z(Windows 上无)挂起到后台
app.editor.externalctrl+g在外部编辑器打开(externalEditor$VISUAL$EDITOR,Windows 上为 Notepad,其他平台为 nano
app.clipboard.pasteImagectrl+v(Windows 为 alt+v从剪贴板粘贴图像或文本

会话

ID默认键说明
app.session.new开始新会话(/new
app.session.tree打开会话树导航器(/tree
app.session.fork分叉当前会话(/fork
app.session.resume打开会话恢复选择器(/resume
app.session.togglePathctrl+p切换路径显示
app.session.toggleSortctrl+s切换排序模式
app.session.toggleNamedFilterctrl+n切换仅显示命名会话过滤器
app.session.renamectrl+r重命名会话
app.session.deletectrl+d删除会话
app.session.deleteNoninvasivectrl+backspace查询为空时删除会话

模型和思维

ID默认键说明
app.model.selectctrl+l打开模型选择器
app.model.cycleForwardctrl+p切换到下一个模型
app.model.cycleBackwardshift+ctrl+p切换到上一个模型
app.thinking.cycleshift+tab循环切换 thinking level
app.thinking.togglectrl+t折叠/展开 thinking block

显示和消息队列

ID默认键说明
app.tools.expandctrl+o折叠/展开工具输出
app.message.copyctrl+x复制最后一条助手消息,或在 /tree 中复制所选消息
app.message.followUpalt+enter队列 follow-up 消息
app.message.dequeuealt+up恢复队列消息到编辑器

树导航

ID默认键说明
app.tree.foldOrUpctrl+leftalt+left折叠当前分支段,或跳转到上一个段起始
app.tree.unfoldOrDownctrl+rightalt+right展开当前分支段,或跳转到下一个段起始或分支结束
app.tree.editLabelshift+l编辑树节点上的标签
app.tree.toggleLabelTimestampshift+t切换树中标签时间戳显示
app.tree.filter.defaultctrl+d设置树过滤器为默认视图
app.tree.filter.noToolsctrl+t切换隐藏工具结果的树过滤器
app.tree.filter.userOnlyctrl+u切换仅显示用户消息的树过滤器
app.tree.filter.labeledOnlyctrl+l切换仅显示带标签条目的树过滤器
app.tree.filter.allctrl+a切换显示所有条目的树过滤器
app.tree.filter.cycleForwardctrl+o循环向前切换树过滤器
app.tree.filter.cycleBackwardshift+ctrl+o循环向后切换树过滤器

Scoped Models 选择器

在 scoped models 选择器(通过 /scoped-models 打开)内使用。

ID默认键说明
app.models.savectrl+s将当前模型选择保存到设置
app.models.enableAllctrl+a启用所有模型(或所有匹配当前搜索的)
app.models.clearAllctrl+x清除所有模型(或所有匹配当前搜索的)
app.models.toggleProviderctrl+p切换当前 Provider 的所有模型
app.models.reorderUpalt+up将选中模型在循环顺序中上移
app.models.reorderDownalt+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"]
}

法律声明:本页面是 pi.dev 官方文档的中文翻译版本,仅供学习参考。本网站与 pi.dev 及 Earendil Inc. 无任何法律关系。