> ## Documentation Index
> Fetch the complete documentation index at: https://cli.fuxicode.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.
# キーボードショートカットのカスタマイズ
> キーボードショートカットをカスタマイズして、Fuxi Code でキーバインディング設定ファイルを使用します。
Fuxi Code はカスタマイズ可能なキーボードショートカットをサポートしています。`/keybindings` を実行して、`~/.fuxi/keybindings.json` に設定ファイルを作成または開きます。
設定ファイル
キーバインディング設定ファイルは、`bindings` 配列を持つオブジェクトです。各ブロックはコンテキストとキーストロークからアクションへのマップを指定します。
キーバインディングファイルへの変更は自動的に検出され、Fuxi Code を再起動することなく適用されます。
| フィールド | 説明 |
| :--------- | :---------------------------------- |
| `$schema` | エディタのオートコンプリート用のオプション JSON スキーマ URL |
| `$docs` | オプションのドキュメント URL |
| `bindings` | コンテキスト別のバインディングブロックの配列 |
この例では、チャットコンテキストで `Ctrl+E` を外部エディタを開くにバインドし、`Ctrl+U` をアンバインドします。
```json theme={null}
{
"$schema": "https://www.schemastore.org/fuxi-code-keybindings.json",
"$docs": "https://cli.fuxicode.com/docs/ja/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor",
"ctrl+u": null
}
}
]
}
```
コンテキスト
各バインディングブロックは、バインディングが適用される**コンテキスト**を指定します。
| コンテキスト | 説明 |
| :---------------- | :------------------------------ |
| `Global` | アプリ全体に適用 |
| `Chat` | メインチャット入力エリア |
| `Autocomplete` | オートコンプリートメニューが開いている |
| `Settings` | 設定メニュー |
| `Confirmation` | 権限と確認ダイアログ |
| `Tabs` | タブナビゲーションコンポーネント |
| `Help` | ヘルプメニューが表示されている |
| `Transcript` | トランスクリプトビューア |
| `HistorySearch` | 履歴検索モード(Ctrl+R) |
| `Task` | バックグラウンドタスクが実行中 |
| `ThemePicker` | テーマピッカーダイアログ |
| `Attachments` | 選択ダイアログ内の画像添付ファイルナビゲーション |
| `Footer` | フッターインジケータナビゲーション(タスク、チーム、diff) |
| `MessageSelector` | 巻き戻しと要約ダイアログのメッセージ選択 |
| `DiffDialog` | Diff ビューアナビゲーション |
| `ModelPicker` | モデルピッカー努力レベル |
| `Select` | 汎用選択/リストコンポーネント |
| `Plugin` | プラグインダイアログ(参照、発見、管理) |
| `Scroll` | 会話スクロールとフルスクリーンモードでのテキスト選択 |
{/* max-version: 2.1.204 */}v2.1.205 より前では、`Doctor` コンテキストと `/doctor` 診断スクリーン用の `doctor:fix` アクションが存在していました。
利用可能なアクション
アクションは `namespace:action` 形式に従います。例えば、`chat:submit` はメッセージを送信し、`app:toggleTodos` はタスクリストを表示します。各コンテキストには特定のアクションが利用可能です。
アプリアクション
`Global` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :--------------------- | :------- | :-------------------------------------------------------------------------- |
| `app:interrupt` | Ctrl+C | 現在の操作をキャンセル |
| `app:exit` | Ctrl+D | Fuxi Code を終了 |
| `app:redraw` | (アンバインド) | ターミナルを強制的に再描画 |
| `app:toggleTodos` | Ctrl+T | Fuxi のタスクリストの表示を切り替えます。これは [`/tasks`](/ja/commands) バックグラウンドタスクビューではありません |
| `app:toggleTranscript` | Ctrl+O | 詳細トランスクリプトの表示を切り替え |
履歴アクション
コマンド履歴をナビゲートするためのアクション:
| アクション | デフォルト | 説明 |
| :----------------- | :----- | :------ |
| `history:search` | Ctrl+R | 履歴検索を開く |
| `history:previous` | Up | 前の履歴項目 |
| `history:next` | Down | 次の履歴項目 |
チャットアクション
`Chat` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :-------------------- | :-------------------------------- | :-------------------------------------------------------------------------------------------------------- |
| `chat:cancel` | Escape | 現在の入力をキャンセル |
| `chat:clearInput` | Ctrl+L | 入力を保持したまま全画面再描画を強制します。[フルスクリーンレンダリング](/ja/fullscreen#clear-the-conversation)では、2 秒以内に 2 回押して `/clear` を実行 |
| `chat:clearScreen` | Cmd+K | [フルスクリーンレンダリング](/ja/fullscreen#clear-the-conversation)では、2 秒以内に 2 回押して `/clear` を実行 |
| `chat:killAgents` | Ctrl+X Ctrl+K | このセッション内のすべての実行中の[バックグラウンドサブエージェント](/ja/sub-agents#run-subagents-in-foreground-or-background)を終了 |
| `chat:cycleMode` | Shift+Tab\* | 権限モードをサイクル |
| `chat:modelPicker` | Meta+P | モデルピッカーを開く |
| `chat:fastMode` | Meta+O | 高速モードを切り替え |
| `chat:thinkingToggle` | Meta+T | 拡張思考を切り替え |
| `chat:submit` | Enter | メッセージを送信 |
| `chat:newline` | Ctrl+J | 送信せずに改行を挿入 |
| `chat:undo` | Ctrl+\_、Ctrl+Shift+- | 最後のアクションを元に戻す |
| `chat:externalEditor` | Ctrl+G、Ctrl+X Ctrl+E | 外部エディタで開く |
| `chat:stash` | Ctrl+S | 現在のプロンプトを保存 |
| `chat:imagePaste` | Ctrl+V(Windows では Alt+V、WSL では両方) | クリップボードから画像を貼り付けます。WSL では、両方のショートカットがデフォルトでバインドされています |
\*VT モードなし(Node \<24.2.0/\<22.17.0、Bun \<1.2.23)の Windows では、デフォルトは Meta+M です。
オートコンプリートアクション
`Autocomplete` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :---------------------- | :----- | :------- |
| `autocomplete:accept` | Tab | 提案を受け入れ |
| `autocomplete:dismiss` | Escape | メニューを閉じる |
| `autocomplete:previous` | Up | 前の提案 |
| `autocomplete:next` | Down | 次の提案 |
確認アクション
`Confirmation` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :-------------------------- | :-------- | :--------- |
| `confirm:yes` | Y、Enter | アクションを確認 |
| `confirm:no` | N、Escape | アクションを拒否 |
| `confirm:previous` | Up | 前のオプション |
| `confirm:next` | Down | 次のオプション |
| `confirm:nextField` | Tab | 次のフィールド |
| `confirm:previousField` | (アンバインド) | 前のフィールド |
| `confirm:toggle` | Space | 選択を切り替え |
| `confirm:cycleMode` | Shift+Tab | 権限モードをサイクル |
| `confirm:toggleExplanation` | Ctrl+E | 権限説明を切り替え |
権限アクション
権限ダイアログの `Confirmation` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :----------------------- | :------- | :------------------------------------------------------------------------------- |
| `permission:toggleDebug` | (アンバインド) | 権限デバッグ情報を切り替えます。Ctrl+D の以前のデフォルトは v2.1.146 で削除されました。これは `app:exit` をシャドウしていたためです |
トランスクリプトアクション
`Transcript` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :------------------------- | :-------------- | :---------------- |
| `transcript:toggleShowAll` | Ctrl+E | すべてのコンテンツの表示を切り替え |
| `transcript:exit` | q、Ctrl+C、Escape | トランスクリプトビューを終了 |
履歴検索アクション
`HistorySearch` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :------------------------- | :--------- | :------------------------- |
| `historySearch:next` | Ctrl+R | 次のマッチ |
| `historySearch:accept` | Escape、Tab | 選択を受け入れ |
| `historySearch:cancel` | Ctrl+C | 検索をキャンセル |
| `historySearch:execute` | Enter | 選択したコマンドを実行 |
| `historySearch:cycleScope` | Ctrl+S | スコープをサイクル:セッション、プロジェクト、すべて |
タスクアクション
`Task` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :---------------- | :------------------- | :---------------------------------------------------------------------------------------------------- |
| `task:background` | Ctrl+B、Ctrl+X Ctrl+B | 現在のタスクをバックグラウンドに。{/* min-version: 2.1.169 */}Ctrl+X Ctrl+B コードは v2.1.169 以降が必要で、tmux プレフィックスの競合を回避します |
テーマアクション
`ThemePicker` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :------------------------------- | :----- | :--------------- |
| `theme:toggleSyntaxHighlighting` | Ctrl+T | シンタックスハイライトを切り替え |
ヘルプアクション
`Help` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :------------- | :----- | :---------- |
| `help:dismiss` | Escape | ヘルプメニューを閉じる |
タブアクション
`Tabs` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :-------------- | :------------- | :--- |
| `tabs:next` | Tab、Right | 次のタブ |
| `tabs:previous` | Shift+Tab、Left | 前のタブ |
添付ファイルアクション
`Attachments` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :--------------------- | :--------------- | :--------------- |
| `attachments:next` | Right | 次の添付ファイル |
| `attachments:previous` | Left | 前の添付ファイル |
| `attachments:remove` | Backspace、Delete | 選択した添付ファイルを削除 |
| `attachments:exit` | Down、Escape | 添付ファイルナビゲーションを終了 |
`Footer` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :---------------------- | :----- | :------------------- |
| `footer:next` | Right | 次のフッター項目 |
| `footer:previous` | Left | 前のフッター項目 |
| `footer:up` | Up | フッター内で上に移動(最上部で選択解除) |
| `footer:down` | Down | フッター内で下に移動 |
| `footer:openSelected` | Enter | 選択したフッター項目を開く |
| `footer:clearSelection` | Escape | フッター選択をクリア |
メッセージセレクタアクション
`MessageSelector` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :----------------------- | :------------------------------------- | :------- |
| `messageSelector:up` | Up、K、Ctrl+P | リストで上に移動 |
| `messageSelector:down` | Down、J、Ctrl+N | リストで下に移動 |
| `messageSelector:top` | Ctrl+Up、Shift+Up、Meta+Up、Shift+K | 最上部にジャンプ |
| `messageSelector:bottom` | Ctrl+Down、Shift+Down、Meta+Down、Shift+J | 最下部にジャンプ |
| `messageSelector:select` | Enter | メッセージを選択 |
Diff アクション
`DiffDialog` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :-------------------- | :--------- | :------------------------------- |
| `diff:dismiss` | Escape | Diff ビューアを閉じる |
| `diff:previousSource` | Left | 前の Diff ソース |
| `diff:nextSource` | Right | 次の Diff ソース |
| `diff:previousFile` | Up、K | ファイルリストの前のファイル。詳細ビューで 1 行上にスクロール |
| `diff:nextFile` | Down、J | ファイルリストの次のファイル。詳細ビューで 1 行下にスクロール |
| `diff:viewDetails` | Enter | Diff の詳細を表示 |
| `diff:back` | (コンテキスト固有) | Diff ビューアで戻る |
Diff 詳細ビューは、ページャースタイルのキーを標準的な[スクロールアクション](#scroll-actions)にバインドします。これらのバインディングは `DiffDialog` コンテキストの一部であり、詳細ビューにのみ適用されます。[スクロールアクション](#scroll-actions)の下に記載されている `Scroll` コンテキストのデフォルトは変わりません。
| アクション | デフォルト | 説明 |
| :-------------------- | :------------ | :----------------- |
| `scroll:pageUp` | PageUp | ビューポートの半分だけ上にスクロール |
| `scroll:pageDown` | PageDown | ビューポートの半分だけ下にスクロール |
| `scroll:fullPageUp` | Shift+Space、B | ビューポート全体だけ上にスクロール |
| `scroll:fullPageDown` | Space | ビューポート全体だけ下にスクロール |
| `scroll:top` | G、Home | 最上部にジャンプ |
| `scroll:bottom` | Shift+G、End | 最下部にジャンプ |
モデルピッカーアクション
`ModelPicker` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :---------------------------- | :---- | :----------------------- |
| `modelPicker:decreaseEffort` | Left | 努力レベルを低下 |
| `modelPicker:increaseEffort` | Right | 努力レベルを増加 |
| `modelPicker:thisSessionOnly` | s | ハイライトされたモデルをこのセッションのみに適用 |
選択アクション
`Select` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :---------------- | :------------ | :------- |
| `select:next` | Down、J、Ctrl+N | 次のオプション |
| `select:previous` | Up、K、Ctrl+P | 前のオプション |
| `select:accept` | Enter | 選択を受け入れ |
| `select:cancel` | Escape | 選択をキャンセル |
プラグインアクション
`Plugin` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :---------------- | :---- | :---------------------------------------------- |
| `plugin:toggle` | Space | プラグイン選択を切り替え |
| `plugin:install` | I | 選択したプラグインをインストール |
| `plugin:favorite` | F | 選択したプラグインをお気に入りにして、インストール済みタブの上部付近にソートされるようにします |
設定アクション
`Settings` コンテキストで利用可能なアクション。`select:accept` と `confirm:no` アクションは[選択](#select-actions)と[確認](#confirmation-actions)コンテキストから再利用されており、設定固有の動作があります:変更は設定を変更するとすぐに各設定に適用されるため、Escape は変更を破棄するのではなく、変更を保存して閉じます。
| アクション | デフォルト | 説明 |
| :---------------- | :---------- | :----------------------- |
| `settings:search` | / | 検索モードに入る |
| `settings:retry` | R | 使用状況データの読み込みを再試行(エラー時) |
| `select:accept` | Enter、Space | 選択した設定を変更するか、そのサブメニューを開く |
| `confirm:no` | Escape | パネルを閉じます。変更は既に保存されています |
音声アクション
[音声ディクテーション](/ja/voice-dictation)が有効な場合、`Chat` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :----------------- | :---- | :-------------------------------------------- |
| `voice:pushToTalk` | Space | プロンプトをディクテートします。`/voice` モードに応じて押し続けるか、タップします |
[フルスクリーンレンダリング](/ja/fullscreen)が有効な場合、`Scroll` コンテキストで利用可能なアクション:
| アクション | デフォルト | 説明 |
| :-------------------------- | :------------------- | :---------------------------------------------------------------- |
| `scroll:lineUp` | (アンバインド) | 1 行上にスクロール。マウスホイールスクロールがこのアクションをトリガー |
| `scroll:lineDown` | (アンバインド) | 1 行下にスクロール。マウスホイールスクロールがこのアクションをトリガー |
| `scroll:pageUp` | PageUp | ビューポート高さの半分だけ上にスクロール |
| `scroll:pageDown` | PageDown | ビューポート高さの半分だけ下にスクロール |
| `scroll:top` | Ctrl+Home | 会話の開始位置にジャンプ |
| `scroll:bottom` | Ctrl+End | 最新メッセージにジャンプして自動フォローを再度有効化 |
| `scroll:halfPageUp` | (アンバインド) | ビューポート高さの半分だけ上にスクロール。`scroll:pageUp` と同じ動作で、vi スタイルの再バインドのために提供 |
| `scroll:halfPageDown` | (アンバインド) | ビューポート高さの半分だけ下にスクロール。`scroll:pageDown` と同じ動作で、vi スタイルの再バインドのために提供 |
| `scroll:fullPageUp` | (アンバインド) | ビューポート高さ全体だけ上にスクロール |
| `scroll:fullPageDown` | (アンバインド) | ビューポート高さ全体だけ下にスクロール |
| `selection:copy` | Ctrl+Shift+C / Cmd+C | 選択したテキストをクリップボードにコピー |
| `selection:clear` | (アンバインド) | アクティブなテキスト選択をクリア |
| `selection:extendLeft` | Shift+Left | アクティブな選択を 1 列左に拡張 |
| `selection:extendRight` | Shift+Right | アクティブな選択を 1 列右に拡張 |
| `selection:extendUp` | Shift+Up | アクティブな選択を 1 行上に拡張。選択が上端に達するとビューポートをスクロール |
| `selection:extendDown` | Shift+Down | アクティブな選択を 1 行下に拡張。選択が下端に達するとビューポートをスクロール |
| `selection:extendLineStart` | Shift+Home | アクティブな選択を行の開始位置に拡張 |
| `selection:extendLineEnd` | Shift+End | アクティブな選択を行の終了位置に拡張 |
キーストロークシンタックス
モディファイア
`+` セパレータでモディファイアキーを使用します。
* `ctrl` または `control` - Control キー
* `shift` - Shift キー
* `alt`、`opt`、`option`、または `meta` - Windows と Linux の Alt キー、macOS の Option キー
* `cmd`、`command`、`super`、または `win` - macOS の Command キー、Windows の Windows キー、Linux の Super キー
`cmd` グループは Super モディファイアを報告するターミナル(Kitty キーボードプロトコルまたは xterm の `modifyOtherKeys` モードをサポートするターミナルなど)でのみ検出されます。ほとんどのターミナルはこれを送信しないため、すべての場所で機能するバインディングには `ctrl` または `meta` を使用してください。
例えば:
```text theme={null}
ctrl+k Ctrl + K
shift+tab Shift + Tab
meta+p macOS の Option + P、その他の場所では Alt + P
ctrl+shift+c 複数のモディファイア
```
大文字
スタンドアロンの大文字は Shift を意味します。例えば、`K` は `shift+k` と同等です。これは大文字と小文字のキーが異なる意味を持つ vim スタイルのバインディングに便利です。
モディファイア付きの大文字(例:`ctrl+K`)はスタイル的に扱われ、Shift を意味**しません** — `ctrl+K` は `ctrl+k` と同じです。
コード
コードはスペースで区切られたキーストロークのシーケンスです。
```text theme={null}
ctrl+k ctrl+s Ctrl+K を押して、リリースしてから Ctrl+S
```
特殊キー
* `escape` または `esc` - Escape キー
* `enter` または `return` - Enter キー
* `tab` - Tab キー
* `space` - スペースバー
* `up`、`down`、`left`、`right` - 矢印キー
* `backspace`、`delete` - Delete キー
デフォルトショートカットをアンバインド
アクションを `null` に設定して、デフォルトショートカットをアンバインドします。
```json theme={null}
{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+s": null
}
}
]
}
```
これはコード バインディングでも機能します。プレフィックスを共有するすべてのコードをアンバインドすると、そのプレフィックスを単一キー バインディングとして使用できるようになります。コード バインディングは任意のアクティブなコンテキストに存在し、そのプレフィックスを予約したままにするため、それを定義するコンテキストで各コードをアンバインドする必要があります。
デフォルトの `Ctrl+X` ファミリーは 2 つのコンテキストにまたがります。`Chat` では `ctrl+x ctrl+k` と `ctrl+x ctrl+e`、`Task` では `ctrl+x ctrl+b` です。`ctrl+x` 自体を単一キー バインディングとして再利用するには、すべてをアンバインドします。
```json theme={null}
{
"bindings": [
{
"context": "Task",
"bindings": {
"ctrl+x ctrl+b": null
}
},
{
"context": "Chat",
"bindings": {
"ctrl+x ctrl+k": null,
"ctrl+x ctrl+e": null,
"ctrl+x": "chat:newline"
}
}
]
}
```
プレフィックス上の一部のコードをアンバインドしても、すべてをアンバインドしない場合、プレフィックスを押すと残りのバインディングのコード待機モードに入ります。
予約済みショートカット
これらのショートカットは再バインドできません。
| ショートカット | 理由 |
| :-------- | :---------------------------- |
| Ctrl+C | ハードコードされた割り込み/キャンセル |
| Ctrl+D | ハードコードされた終了 |
| Ctrl+M | ターミナルの Enter と同じ(どちらも CR を送信) |
| Caps Lock | ターミナルアプリケーションに配信されない |
ターミナルの競合
一部のショートカットはターミナルマルチプレクサと競合する可能性があります。
| ショートカット | 競合 |
| :------ | :--------------------- |
| Ctrl+B | tmux プレフィックス(2 回押して送信) |
| Ctrl+A | GNU screen プレフィックス |
| Ctrl+Z | Unix プロセス一時停止(SIGTSTP) |
Vim モードの相互作用
Vim モードが `/config` → エディタモードで有効な場合、キーバインディングと Vim モードは独立して動作します。
* **Vim モード** はテキスト入力レベルで入力を処理します(カーソル移動、モード、モーション)
* **キーバインディング** はコンポーネントレベルでアクションを処理します(todos を切り替え、送信など)
* Vim モードの Escape キーは INSERT から NORMAL モードに切り替わります。`chat:cancel` をトリガーしません
* ほとんどの Ctrl+key ショートカットは Vim モードを通過してキーバインディングシステムに渡されます
* Vim NORMAL モードでは、`?` はヘルプメニューを表示します(Vim の動作)
* Vim NORMAL モードでは、`/` は履歴検索を開きます。標準モードの Ctrl+R と同じです
検証
Fuxi Code はキーバインディングを検証し、以下の警告を表示します。
* 解析エラー(無効な JSON または構造)
* 無効なコンテキスト名
* 予約済みショートカットの競合
* ターミナルマルチプレクサの競合
* 同じコンテキスト内の重複バインディング
Fuxi Code はファイルが読み込まれるときに警告を報告し、各警告をデバッグログに書き込みます。Fuxi Code を [`--debug`](/ja/cli-reference#cli-flags) で起動して、詳細を確認してください。