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"]
}