快速鍵
所有鍵盤快速鍵都可以透過 ~/.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 |
commit意見 |
tui.input.tab |
tab |
分頁/自動完成 |
TUI Kill Ring(剪切環)
| 按鍵綁定 ID | 預設 | 描述 |
|---|---|---|
tui.editor.yank |
ctrl+y |
貼上最近刪除的文字 |
tui.editor.yankPop |
alt+y |
yank 後循環瀏覽已刪除的文字 |
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 全螢幕viewport
當互動模式使用 --tui-mode fullscreen 並定位主transcript滾動區域時,將應用這些操作。兩指觸控板和滑鼠滾輪輸入滾動游標下方的區域,回落到固定編輯器/狀態/頁尾停靠欄上的文字記錄。單擊 OSC 8 超連結將其在預設處理程式中開啟。使用滑鼠主按鈕拖動選擇文字並將其複製到剪貼簿;按住記錄的頂部或底部邊緣會自動滾動到螢幕外的內容。
全螢幕transcript綁定優先於編輯器綁定。因此,預設的未修改導航鍵控制全螢幕模式下的文字記錄,而其 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.lineUp 和 tui.altScreen.lineDown 可按單行捲動。設定 "tui.altScreen.pageUp": [] 會完全停用該轉錄快速鍵。使用者綁定替換該操作的預設值。
| 按鍵綁定 ID | 預設 | 描述 |
|---|---|---|
tui.altScreen.pageUp |
pageUp |
將文字記錄向上滾動一頁 |
tui.altScreen.pageDown |
pageDown |
將文字記錄向下滾動一頁 |
tui.altScreen.halfPageUp |
(沒有任何) | 將文字記錄向上滾動半頁 |
tui.altScreen.halfPageDown |
(沒有任何) | 將文字記錄向下滾動半頁 |
tui.altScreen.lineUp |
(沒有任何) | 將文字記錄向上捲動一行 |
tui.altScreen.lineDown |
(沒有任何) | 將文字記錄向下捲動一行 |
tui.altScreen.previousPrompt |
ctrl+shift+up |
跳轉到上一條標記的訊息 |
tui.altScreen.nextPrompt |
ctrl+shift+down |
跳轉到下一條標記的訊息 |
tui.altScreen.search |
ctrl+shift+f |
搜尋已轉譯的文字記錄 |
tui.altScreen.searchNext |
enter, ctrl+g |
搜尋時選取下一個相符項目 |
tui.altScreen.searchPrevious |
shift+enter, ctrl+shift+g |
搜尋時選取上一個相符項目 |
tui.altScreen.searchClose |
escape |
關閉文字記錄搜尋 |
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 |
當查詢為空時刪除工作階段 |
模型與思考
| 按鍵綁定 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 |
折疊或展開 thinking block |
顯示和訊息佇列
| 按鍵綁定 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 |
向後循環切換切換樹過濾 |
限定範圍模型選擇器
在限定範圍模型選擇器中使用(透過 /scoped-models 開啟)。
| 按鍵綁定 ID | 預設 | 描述 |
|---|---|---|
app.models.save |
ctrl+s |
將目前模型選擇儲存到設定 |
app.models.enableAll |
ctrl+a |
啟用所有模型(或所有比對目前搜尋的模型) |
app.models.clearAll |
ctrl+x |
清除所有模型(或所有比對目前搜尋的模型) |
app.models.toggleProvider |
ctrl+p |
切換目前 Provider 的所有模型 |
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"]
}