すべてのキーボードショートカットは ~/.pi/agent/keybindings.json でカスタマイズできます。各アクションに 1 つ以上のキーを割り当てられます。
設定ファイルは、pi が内部で使用する名前空間付きキーバインド id と、拡張作者が keyHint() および注入された keybindings マネージャーで使用する id と同じです。
cursorUp や expandTools など名前空間なし id を使う古い設定は、起動時に自動的に名前空間付き id に移行されます。
keybindings.json を編集した後、pi で /reload を実行するとセッションを再起動せずに変更を適用できます。
modifier+key。modifier は ctrl、shift、alt(組み合わせ可能)、key は次のとおり:
- 文字:
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、ctrl+1 など。
| キーバインド id | デフォルト | 説明 |
|---|
tui.editor.cursorUp | up | カーソルを上へ |
tui.editor.cursorDown | down | カーソルを下へ |
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+a | 行頭へ |
tui.editor.cursorLineEnd | end, ctrl+e | 行末へ |
tui.editor.jumpForward | ctrl+] | 文字へ前方ジャンプ |
tui.editor.jumpBackward | ctrl+alt+] | 文字へ後方ジャンプ |
tui.editor.pageUp | pageUp | 1 ページ上へ |
tui.editor.pageDown | pageDown | 1 ページ下へ |
| キーバインド 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 | 行末まで削除 |
| キーバインド id | デフォルト | 説明 |
|---|
tui.input.newLine | shift+enter | 改行を挿入 |
tui.input.submit | enter | 入力を送信 |
tui.input.tab | tab | Tab / オートコンプリート |
| キーバインド id | デフォルト | 説明 |
|---|
tui.editor.yank | ctrl+y | 直近に削除したテキストを貼り付け |
tui.editor.yankPop | alt+y | yank 後に削除履歴を循環 |
tui.editor.undo | ctrl+- | 直前の編集を元に戻す |
| キーバインド 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 | 選択をキャンセル |
| キーバインド id | デフォルト | 説明 |
|---|
app.interrupt | escape | キャンセル / 中止 |
app.clear | ctrl+c | エディターをクリア |
app.exit | ctrl+d | 終了(エディターが空のとき) |
app.suspend | ctrl+z(Windows ではなし) | バックグラウンドにサスペンド |
app.editor.external | ctrl+g | 外部エディターで開く($VISUAL または $EDITOR) |
app.clipboard.pasteImage | ctrl+v(Windows では alt+v) | クリップボードから画像を貼り付け |
| キーバインド id | デフォルト | 説明 |
|---|
app.session.new | (なし) | 新しいセッションを開始(/new) |
app.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 | 思考ブロックを折りたたみ/展開 |
| キーバインド id | デフォルト | 説明 |
|---|
app.tools.expand | ctrl+o | ツール出力を折りたたみ/展開 |
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.cursorUp": ["up", "ctrl+p"],
"tui.editor.cursorDown": ["down", "ctrl+n"],
"tui.editor.deleteWordBackward": ["ctrl+w", "alt+backspace"]
各アクションは単一キーまたはキーの配列を持てます。ユーザー設定はデフォルトを上書きします。
ネイティブ Windows では、Windows ターミナルが Unix ジョブ制御をサポートしないため app.suspend にデフォルトバインドはありません。手動でバインドすると、pi はサスペンドせずステータスメッセージを表示します。WSL では通常の Linux の ctrl+z/fg 動作が適用されます。
"tui.editor.cursorUp": ["up", "ctrl+p"],
"tui.editor.cursorDown": ["down", "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"]
"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"]