キーバインド
すべてのキーボード ショートカットは ~/.pi/agent/keybindings.json でカスタマイズできます。各アクションは 1 つ以上のキーにバインドできます。
設定ファイルは、pi が内部で使用するものと、拡張機能の作成者が keyHint() および挿入された keybindings マネージャーで使用するのと同じ名前空間キーバインド ID を使用します。
cursorUp や expandTools などの事前に名前空間が設定された ID を使用する古い構成は、起動時に自動的に名前空間が設定された 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 |
リストの 1 ページ上へ |
tui.select.pageDown |
pageDown |
リストの次のページへ |
tui.select.confirm |
enter |
選択を確認する |
tui.select.cancel |
escape, ctrl+c |
選択をキャンセルする |
TUI 全画面ビューポート
これらのアクションは、インタラクティブ モードで --tui-mode fullscreen を使用し、プライマリ トランスクリプト スクロール領域をターゲットとする場合に適用されます。 2 本指のトラックパッドとマウス ホイール入力により、ポインターの下の領域がスクロールされ、固定エディター/ステータス/フッター ドック上のトランスクリプトに戻ります。 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 |
トランスクリプトを 1 ページ上にスクロールします |
tui.altScreen.pageDown |
pageDown |
トランスクリプトを 1 ページ下にスクロールします |
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 |
エディターをクリア (1 回目) / 終了 (2 回目) |
app.exit |
ctrl+d |
終了 (エディターが空の場合) |
app.suspend |
ctrl+z (Windows ではなし) |
バックグラウンドで一時停止 |
app.editor.external |
ctrl+g |
外部エディタで開きます (externalEditor、$VISUAL、$EDITOR、Windows のメモ帳、またはその他の場所の nano) |
app.clipboard.pasteImage |
ctrl+v (Windows では alt+v) |
クリップボードから画像またはテキストを貼り付けます |
セッション
| キーバインド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 端末は Unix ジョブ制御をサポートしていないため、ネイティブ Windows では、app.suspend にはデフォルトのバインドがありません。手動でバインドすると、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"]
}