/keybindings を実行して、~/.claude/keybindings.json に設定ファイルを作成または開きます。
設定ファイル
キーバインディング設定ファイルは、bindings 配列を持つオブジェクトです。各ブロックはコンテキストとキーストロークからアクションへのマップを指定します。
キーバインディングファイルへの変更は自動的に検出され、Claude Code を再起動することなく適用されます。
この例では、チャットコンテキストで
Ctrl+E を外部エディタを開くにバインドし、Ctrl+U をアンバインドします。
コンテキスト
各バインディングブロックは、バインディングが適用されるコンテキストを指定します。
v2.1.205 より前では、
Doctor コンテキストと /doctor 診断スクリーン用の doctor:fix アクションが存在していました。
利用可能なアクション
アクションはnamespace:action 形式に従います。例えば、メッセージを送信する chat:submit や、タスクリストを表示する app:toggleTodos などです。各コンテキストには特定のアクションが利用可能です。
アプリケーションアクション
Global コンテキストで利用可能なアクション:
履歴アクション
コマンド履歴をナビゲートするためのアクション:チャットアクション
Chat コンテキストで利用可能なアクション:
*VT モードなし Windows (Node <24.2.0/<22.17.0、Bun <1.2.23) では、デフォルトは Meta+M です。
オートコンプリートアクション
Autocomplete コンテキストで利用可能なアクション:
確認アクション
Confirmation コンテキストで利用可能なアクション:
*VT モードなし Windows (Node <24.2.0/<22.17.0、Bun <1.2.23) では、デフォルトは Meta+M です。
v2.1.257 より前では、
confirm:toggleExplanation アクション(デフォルトでは Ctrl+E にバインド)が Bash と PowerShell 権限プロンプトでモデル生成の説明を表示していました。
ダイアログは confirm:yes と confirm:no を使用して、はい/いいえの質問をしていない場合でも受け入れてキャンセルします。このコンテキストで y や n などのベアレターをバインドすると、そのレターをキーとして表示しないダイアログにも作用します。y と n をキーとして表示するダイアログはそれらのレターを自分で読み取り、バインディングは必要ありません。
ほとんどのダイアログでは、Ctrl+C または Ctrl+D を 2 回押すと、Claude Code を終了する代わりにダイアログを閉じます。最初の押下後のヒントは、2 番目の押下がダイアログを閉じるか Claude Code を終了するかを示します。両方のキーは 予約済み であり、再バインドできません。
この例は y を confirm:yes に、n を confirm:no にバインドします:
y と n はまだレターとして入力されます。
v2.1.280 より前では、y はデフォルトで confirm:yes に、n は confirm:no にバインドされていました。v2.1.280 より前に /keybindings で keybindings.json を作成した場合、ファイルは両方のバインディングをリストし、それらの 2 行を削除するまで有効なままです。
権限アクション
権限ダイアログのConfirmation コンテキストで利用可能なアクション:
トランスクリプトアクション
Transcript コンテキストで利用可能なアクション:
transcript:toggleShowAll はクラシックレンダラーのみで適用されます。フルスクリーンレンダリング では、トランスクリプトビューアは show-all トグルを提供しません。
履歴検索アクション
HistorySearch コンテキストで利用可能なアクション:
historySearch:next、historySearch:accept、historySearch:cancel、および historySearch:execute のデフォルトは、クラシックレンダラーのインライン履歴検索に適用されます。これは常にすべてのプロジェクトからプロンプトを検索します。historySearch:cycleScope は フルスクリーンレンダリング でのみ有効です。ここで Ctrl+R は検索ダイアログを開き、Ctrl+S はそのスコープをサイクルします。ダイアログの他のキーは固定されており、再バインドできません:Enter または Tab はハイライトされたマッチをプロンプト入力に配置し、Esc はキャンセルします。
タスクアクション
Task コンテキストで利用可能なアクション:
テーマアクション
ThemePicker コンテキストで利用可能なアクション:
ヘルプアクション
Help コンテキストで利用可能なアクション:
タブアクション
Tabs コンテキストで利用可能なアクション:
タブ付きダイアログでは、タブ行がフォーカスを持つ間、
tabs:next と tabs:previous がタブを切り替えます。/help や /sandbox などの一部のダイアログでは、タブ切り替えキーはタブのコンテンツ内からも機能します。
Up と Down はタブ行とタブのコンテンツ間でフォーカスを移動し、コンテンツ内のリストはフォーカスを持つ間のみキーに応答します。
添付ファイルアクション
Attachments コンテキストで利用可能なアクション:
フッターアクション
Footer コンテキストで利用可能なアクション:
フッター項目が選択されている場合(プロンプトの下のエージェントパネルの行など)、
chat:submit を chat:queueSubmit または chat:newline に再バインドしても、Enter はそれを開きます。
Chat バインディングは、Shift+Tab を chat:cycleMode のように Footer コンテキストがバインドしないキーで機能し、項目が選択されている間も機能します。
メッセージセレクターアクション
リワインドメニュー のメッセージリストでは、選択アクション とそのデフォルトキーを使用してメッセージを移動して選択します。これらのアクションのSelect バインディングもそこに適用されます。MessageSelector コンテキストには、独自のアクションまたはデフォルトバインディングはありません。このリストのみのキーを変更するには、MessageSelector ブロックで select:accept などの選択アクションをバインドします。
この例は、リワインドメニューでハイライトされたメッセージを選択するために o を select:accept にバインドします。他のリストは変更しません:
Select バインディングを無視し、独自のアクション messageSelector:up、messageSelector:down、messageSelector:top、messageSelector:bottom、および messageSelector:select を持っていました。keybindings.json がそれらの名前の 1 つをバインドする場合、バインディングはこのリストで同じことを行う選択アクションとして機能し続けます。Home と End はリストのいずれかの端にジャンプします。v2.1.283 より前では、Shift+K や Shift+J などのキーがデフォルトでそれを行いました。
差分アクション
DiffDialog コンテキストで利用可能なアクション:
ファイルリストは 選択アクション にも応答し、そのデフォルトキーと
Select バインディングを通じて応答します。select:previous と select:next は前のファイルと次のファイルに移動し、Enter は select:accept を通じて選択したファイルの差分を開きます。ファイルリストのみのそれらのキーの 1 つを変更するには、DiffDialog ブロックで選択アクションをバインドします。
v2.1.283 より前では、ファイルリストは Select バインディングを無視し、Enter は別の diff:viewDetails アクションを通じて選択したファイルの差分を開きました。keybindings.json が diff:viewDetails をバインドする場合、バインディングはファイルリストで select:accept として機能し続けます。
差分詳細ビューは、ページャースタイルキーを標準 スクロールアクション にバインドします。これらのバインディングは DiffDialog コンテキストの一部であり、詳細ビューのみで適用されます。スクロールアクション の下にリストされている Scroll コンテキストのデフォルトは変更されません。
差分パネルアクション
/diff がフルスクリーンレンダリングで開く 差分パネル のアクション。app:cycleDiffBase は DiffPanel コンテキストにあり、パネルが開いている間はアクティブです。その他は Global です。パネルには Claude Code v2.1.260 以降が必要です。
モデルピッカーアクション
ModelPicker コンテキストで利用可能なアクション:
努力スライダーアクション
EffortSlider コンテキストで利用可能なアクション。引数なしで /effort を実行するときに開くスライダー。スライダーの Enter と Escape キーは再バインドできません。
選択アクション
Select コンテキストで利用可能なアクション:
/skills や /mcp などのリストパネルでは、Claude Code は select:pageUp、select:pageDown、select:first、および select:last バインディングを適用します。/model ピッカーなどのほとんどの他のリストでは、select:first と select:last バインディングが適用されます。PageUp と PageDown は、バインディングに関係なく、これらのリストのオプションをページングします。
v2.1.280 より前では、これらの他のリストは Home、End、および select:first と select:last バインディングを無視していました。
プラグインアクション
Plugin コンテキストで利用可能なアクション:
設定アクション
Settings コンテキストで利用可能なアクション。select:accept と confirm:no アクションは 選択 と 確認 コンテキストから再利用されます。設定固有の動作:変更は各設定を変更するとすぐに適用されるため、Escape はパネルを閉じ、変更を保存します。拒否するのではなく。
エージェントアクション
Agents コンテキストで利用可能なアクション。claude agents で開く エージェントビュー で適用されます。v2.1.257 以降が必要です。
エージェントビューが開いている間、Claude Code は
Agents コンテキストがバインドするキーに対して Agents バインディングを使用し、同じキーの Chat または Global バインディングを無視します。例えば、エージェントビューで Ctrl+S を押すと、デフォルトの chat:stash をトリガーするのではなく、セッショングループ化を切り替えます。
ディスパッチ入力の外部エディタショートカットは Agents アクションではありません。エージェントビューは Chat コンテキストの chat:externalEditor バインディング(デフォルトでは Ctrl+G)に従います。
バインディングはエージェントビューで単一キーストロークで発火するため、chat:externalEditor にバインドされた Ctrl+X Ctrl+E コードはエディタをそこで開きません。
音声アクション
音声ディクテーション が有効な場合、Chat コンテキストで利用可能なアクション:
スクロールアクション
フルスクリーンレンダリング が有効な場合、Scroll コンテキストで利用可能なアクション:
キーストロークシンタックス
モディファイア
+ セパレータでモディファイアキーを使用します。
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 を使用してください。
例えば:
大文字
Claude Code はキー名を大文字と小文字を区別せずに解析するため、K は k と同じバインディングであり、ctrl+K は ctrl+k と同じです。Shift とレターをバインドするには、shift+k と記述します。
非 US キーボードレイアウト
Ctrl ショートカットのキー名は、アクティブなキーボードレイアウトが他の文字を入力する場合でも、ラテン文字として記述してください。 Claude Code がキーボードで押したキーをバインディングにマッチさせる方法は、レイアウトの種類によって異なります。- キリル文字などの非ラテンレイアウトの場合、Claude Code はターミナルが Kitty キーボードプロトコルを使用し、その位置を報告する場合、キーの US レイアウト位置で Ctrl ショートカットをマッチさせます。そのようなターミナルでロシア語レイアウトがアクティブな場合、Ctrl キーと物理的な W キーを押すと
ctrl+wがトリガーされます。位置を報告しないターミナルでは、Claude Code はターミナルがキープレスに対して送信するものをマッチさせます。ASCII 制御コードは Latin ショートカットをトリガーし、キリル文字として到着するキープレスはバインディングにマッチしません。 - AZERTY などのラテン文字を並べ替えるレイアウトの場合、Claude Code はキーが入力する文字をマッチさせるため、Ctrl キーと A というラベルのキーを押すと
ctrl+aがトリガーされます。
コード
コードはスペースで区切られたキーストロークのシーケンスです。特殊キー
escapeまたはesc- Escape キーenterまたはreturn- Enter キーtab- Tab キーspace- スペースバーup、down、left、right- 矢印キーpageup、pagedown- Page Up キーと Page Down キーhome、end- Home キーと End キーbackspace、delete- Delete キーwheelup、wheeldown- マウスホイールスクロールイベント
デフォルトショートカットをアンバインド
アクションをnull に設定して、デフォルトショートカットをアンバインドします。
ctrl+x プレフィックスに以下のデフォルトコードをバインドします。Chat では ctrl+x ctrl+k、ctrl+x ctrl+e、ctrl+x enter、ctrl+x ctrl+a、ctrl+x ctrl+s、ctrl+x tab、Task では ctrl+x ctrl+b、DiffPanel では ctrl+x b です。ctrl+x enter コードは v2.1.247 以降が必要で、ctrl+x b、ctrl+x ctrl+a、ctrl+x tab は v2.1.260 以降が必要で、ctrl+x ctrl+s は v2.1.275 以降が必要です。
ctrl+x 自体を単一キー バインディングとして再利用するには、すべてをアンバインドします。
予約済みショートカット
これらのショートカットは再バインドできません。ターミナルの競合
一部のショートカットはターミナルマルチプレクサと競合する可能性があります。テキストフィールド
ベアレター、数字、またはスペースをバインドした場合でも、ダイアログまたはパネル内のテキストフィールドでそのキャラクターを入力できます。このようなフィールドの 1 つは、Claude が質問する「Other」の回答です。フィールドがフォーカスを持っている間、Ctrl、Alt、または Cmd なしで押したプリント可能なキーはフィールドに送られ、Claude Code はそれをバインディングと照合しません。 これらのキーはフィールドがフォーカスを持っている間でもバインディングを実行します。- Enter、Escape、Tab、矢印キーなど、キャラクターを入力しないキー
- Ctrl、Alt、または Cmd で押されたキー
- 既に進行中のコードの 2 番目のキーストローク
Chat などのアクティブなコンテキストと照合し、バインディングがそれを取らない場合にのみキーを入力します。
Vim モードの相互作用
Vim モードが/config → エディタモードで有効な場合、キーバインディングと Vim モードは独立して動作します。
- Vim モード はテキスト入力レベルで入力を処理します(カーソル移動、モード、モーション)
- キーバインディング はコンポーネントレベルでアクションを処理します(todos を切り替え、送信など)
- Vim モードの Escape キーは INSERT から NORMAL モードに切り替わります。
chat:cancelをトリガーしません - ほとんどの Ctrl+key ショートカットは Vim モードを通過してキーバインディングシステムに渡されます
- Vim キーはキーバインディングファイルを通じて再マップできません。
jjを Escape にマップするような 2 キーの INSERT モードシーケンスをマップするには、vimInsertModeRemaps設定を使用してください - Vim NORMAL モードでは、
?はヘルプメニューを表示します(Vim の動作) - Vim NORMAL モードでは、
/は履歴検索を開きます。標準モードの Ctrl+R と同じです
検証
Claude Code はキーバインディングを検証し、以下の警告を表示します。- 解析エラー(無効な JSON または構造)
- 無効なコンテキスト名
- 無効なアクション値(アクションが文字列または
nullではない場合など) - 不明なアクション名(登録されたアクションのタイプミスなど)。Claude Code はバインディングをスキップし、そのキーのデフォルトバインディングを有効に保ちます。v2.1.246 より前では、不明なアクション名を持つバインディングはそのキーを静かに無効化していました
- 予約済みショートカットの競合
- 同じコンテキスト内の重複バインディング
--debug で起動して、詳細を確認してください。