鍵綁定
所有鍵盤快捷鍵都可以透過~/.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"]
}