/keybindings を実行して、~/.claude/keybindings.json に設定ファイルを作成または開きます。
設定ファイル
キーボードショートカットの設定ファイルは、bindings 配列を持つオブジェクトです。各ブロックでは、コンテキストと、キー入力からアクションへのマッピングを指定します。
キーボードショートカットファイルへの変更は自動的に検出され、Claude Code を再起動しなくても適用されます。
この例では、チャットコンテキストで
Ctrl+E に外部エディターを開く操作を割り当て、Ctrl+S の割り当てを解除しています。
コンテキスト
各バインディングブロックは、バインディングが適用されるコンテキストを指定します。
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 より前は、デフォルトで
Ctrl+E にバインドされた confirm:toggleExplanation アクションがあり、Bash と PowerShell の権限プロンプトで、モデルが生成したコマンドの説明を表示していました。
ダイアログは、はい/いいえを尋ねるものでない場合でも、確定とキャンセルに confirm:yes と confirm:no を使用します。このコンテキストで y や n のような単一の文字をバインドすると、その文字は、キーとして表示していないダイアログでも機能します。y と n をキーとして表示するダイアログは、それらの文字を自身で読み取るため、バインディングは不要です。
ほとんどのダイアログでは、Ctrl+C または Ctrl+D を 2 回押すと、Claude Code を終了するのではなくダイアログが閉じます。1 回目に押した後に表示されるヒントで、2 回目に押したときにダイアログが閉じるのか終了するのかがわかります。どちらのキーも予約済みであり、再バインドできません。
次の例では、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 はクラシックレンダラーでのみ適用されます。フルスクリーンレンダリングでは、トランスクリプトビューアにすべて表示の切り替えはありません。
履歴検索アクション
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 コンテキストで Enter を chat:queueSubmit や chat:newline に再バインドしていても、Enter でその項目が開きます。
chat:cycleMode の Shift+Tab のように、Footer コンテキストがバインドしていないキーに対する Chat のバインディングは、項目が選択されている間も引き続き機能します。
メッセージセレクターアクション
巻き戻しメニューのメッセージリストでは、Select アクションとそのデフォルトキーを使用して、メッセージ間を移動し、1 つを選択します。これらのアクションに対するSelect のバインディングもここに適用されます。MessageSelector コンテキストには、独自のアクションやデフォルトのバインディングはありません。このリストに限ってキーを変更するには、MessageSelector ブロックで select:accept などの Select アクションをバインドします。
次の例では、他のリストを変更せずに、巻き戻しメニューでハイライトされたメッセージを選択するキーとして o をバインドしています:
Select のバインディングを無視し、独自のアクションとして messageSelector:up、messageSelector:down、messageSelector:top、messageSelector:bottom、messageSelector:select を持っていました。keybindings.json でこれらの名前のいずれかをバインドしている場合、そのバインディングはこのリストで、同じ動作をする Select アクションとして引き続き機能します。Home と End でリストの両端にジャンプします。v2.1.283 より前は、デフォルトで Shift+K や Shift+J などのキーがこれを行っていました。
差分アクション
これらのアクションは、Claude Code の以前の差分ビューアにのみ作用します。このビューアは、/plugin で cc-plugin-diff mod を無効にした後、フルスクリーンレンダリング以外で /diff を実行すると開きます。この mod が有効な間は、/diff で代わりに差分ダイアログが開きます。
DiffDialog コンテキストで利用可能なアクション:
ファイル一覧は、Select アクションにも、そのデフォルトキーと
Select のバインディングを通じて反応します。select:previous と select:next で前後のファイルに移動し、Enter で select:accept を通じて選択したファイルの差分を開きます。ファイル一覧に限ってこれらのキーのいずれかを変更するには、DiffDialog ブロックで Select アクションをバインドします。
v2.1.283 より前は、ファイル一覧は Select のバインディングを無視し、Enter は別の diff:viewDetails アクションを通じて選択したファイルの差分を開いていました。keybindings.json で diff:viewDetails をバインドしている場合、そのバインディングはファイル一覧で select:accept として引き続き機能します。
差分の詳細ビューでは、ページャー形式のキーも標準のスクロールアクションにバインドされています。これらのバインディングは DiffDialog コンテキストの一部であり、詳細ビューでのみ適用されます。スクロールアクションに記載されている Scroll コンテキストのデフォルトは変わりません。
差分パネルアクション
フルスクリーンレンダリングで/diff が開く差分パネル用のアクションです。app:cycleDiffBase は、パネルが開いている間アクティブになる DiffPanel コンテキストにあり、その他は Global です。
組み込みの cc-plugin-diff mod がこのパネルを描画し、app:cycleDiffBase、app:diffFileListUp、app:diffFileListDown を処理します。app:toggleReplTab、app:toggleDiffNoiseFilter、app:toggleDiffPreSession は、Claude Code の以前のパネルにのみ作用します。このパネルは、/plugin で cc-plugin-diff を無効にした後に /diff を実行すると開きます。
モデルピッカーアクション
ModelPicker コンテキストで利用可能なアクション:
effort スライダーアクション
EffortSlider コンテキストで利用可能なアクションです。これは、引数なしで /effort を実行したときに開くスライダーです。スライダーの Enter キーと Escape キーは再バインドできません。
Select アクション
Select コンテキストで利用可能なアクション:
/skills、/mcp、/tasks などのリストパネルでは、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 のバインディングを無視していました。
v2.1.283 より前は、/mcp のツールリストは、バインディングに関係なく固定の PageUp キーと PageDown キーでページ送りしていました。
プラグインアクション
Plugin コンテキストで利用可能なアクション:
プロンプト上部アクション
プロンプトの上にあるバンド用のアクションです。このバンドは、mod がボタン、入力フィールド、セレクトを描画する共有の帯です。abovePrompt:toggle と abovePrompt:focus は Chat コンテキストで適用されます。その他のアクションは、バンドまたはペイン内でキーボードフォーカスを持っているもののコンテキストで適用されます。
AbovePrompt コンテキストでは、デフォルトで Right と Left も abovePrompt:next と abovePrompt:previous を実行し、Space も abovePrompt:press を実行します。
AbovePrompt コンテキストは、Up、Down、PageUp、PageDown、Home、End も ペインのスクロールアクション pane:scrollUp から pane:bottom にバインドしています。そのため、バンドでこれらのキーのいずれかを変更するには、AbovePrompt ブロックでスクロールアクションをバインドします。
ペインアクション
mod が描画するペイン用のアクションです。スクロール、サイズ変更、閉じるアクションはPane コンテキストで適用されます。pane:close は PaneField コンテキストでも適用されるため、ペインのフィールドのいずれかにフォーカスがある間も機能します。pane:next と pane:previous は、複数のペインが開いている間、Global コンテキストで適用されます。
Pane コンテキストは、Tab、Shift+Tab、Enter、Escape も、バンドと同じプロンプト上部アクションにバインドしています。また、ペインの入力フィールドとセレクトは AbovePromptInput と AbovePromptSelect コンテキストを使用します。ペイン内で各キーが何をするかについては、キーボードフォーカスとホットキーに記載されています。
設定アクション
Settings コンテキストで利用可能なアクションです。select:accept と confirm:no のアクションは、Select と Confirmation のコンテキストから再利用されていますが、Settings 固有の動作をします:変更は各設定項目を変更した時点ですぐに適用されるため、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 プレフィックスに以下のデフォルトの chord をコンテキストごとにバインドしています。
Chat:ctrl+x ctrl+k、ctrl+x ctrl+e、ctrl+x enter、ctrl+x ctrl+a、ctrl+x ctrl+s、ctrl+x tab、ctrl+x ctrl+=、ctrl+x ctrl+-、ctrl+x ctrl+_、ctrl+x =、ctrl+x -Task:ctrl+x ctrl+bDiffPanel:ctrl+x bPane:ctrl+x left、ctrl+x right、ctrl+x up、ctrl+x down、ctrl+x xPaneField:ctrl+x x
ctrl+x enter の chord には 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 モードの相互作用
/config のエディタモード設定で Vim モードを有効にすると、キーボードショートカットと Vim モードは独立して動作します。
- Vim モードはテキスト入力レベルで入力を処理します:カーソル移動、モード、モーション
- キーボードショートカット はコンポーネントレベルでアクションを処理します(todo の切り替えやメッセージの送信など)
- vim モードでは、Escape キーは INSERT モードから NORMAL モードに切り替えます。
chat:cancelはトリガーされません - ほとんどの Ctrl+key ショートカットは Vim モードを通過してキーバインディングシステムに渡されます
- Vim キーはキーバインディングファイルを通じて再マップできません。
jjを Escape にマップするような 2 キーの INSERT モードシーケンスをマップするには、vimInsertModeRemaps設定を使用してください - Vim NORMAL モードでは、
?はヘルプメニューを表示します(Vim の動作) - Vim NORMAL モードでは、
/は履歴検索を開きます。標準モードの Ctrl+R と同じです
Other 行では、Vim モードで Escape を押しても質問はすぐにはキャンセルされません。スクリーンリーダーモードの場合を除き、この行はフォーカスするたびに INSERT モードで開始されます。Other 行で Escape を押すと、行が NORMAL モードに切り替わるか、入力途中の Vim コマンドが破棄され、質問は開いたままになります。質問をキャンセルするには、NORMAL モードで Escape をもう一度押してください。
1 回のキー操作で質問をキャンセルする
Vim モードで 1 回のキー操作で質問をキャンセルするには、Select コンテキストで別のキーを select:cancel にバインドします。この方法では、1 つのオプションを選択する質問の Other 行からキャンセルできます。スクリーンリーダーモードや、複数のオプションを選択できる質問では、バインドしたキーではキャンセルされないため、代わりに Escape でキャンセルしてください。
Ctrl または Alt と組み合わせて押すキーを選んでください。修飾キーなしの文字や数字は代わりに Other 行に入力され、設定したバインディングには届きません。たとえば Ctrl+Q をバインドするには、~/.claude/keybindings.json に次の内容を追加します。
Other 行で Ctrl+Q を押します。行が INSERT モードでも NORMAL モードでも、質問は閉じます。
検証
Claude Code はキーバインディングを検証し、以下の警告をデバッグログに書き込みます。- 解析エラー(無効な JSON または構造)
- スペルミスのあるモディファイア(例:
ctl+k)。Claude Code はバインディング全体を無視します。モディファイアを修正してください(この例ではctrl+k)。 - キー文字列内の
+の隣にあるスペース(例:ctrl+ k)。Claude Code はこの文字列を、ctrl+の後にkが続くコードとして読み取ります。ctrl+単独に一致するキー入力はないため、このバインディングは発火しません。スペースを削除してください。 - 無効なコンテキスト名
- 無効なアクション値(アクションが文字列または
nullではない場合など) - 不明なアクション名(登録されたアクションのタイプミスなど)。Claude Code はバインディングをスキップし、そのキーのデフォルトバインディングを有効に保ちます。
- 予約済みショートカットの競合
- 同じコンテキスト内の重複バインディング
--debug で起動して、詳細を確認してください。