キーボードショートカット
Claude Codeのkeybindings.jsonを設定する: 17のコンテキスト、キーストローク構文、コードシーケンス、修飾キーの組み合わせ、デフォルトショートカットを即座に無効化する方法。
設定をやめて、構築を始めよう。
AIオーケストレーション付きSaaSビルダーテンプレート。
Claude Codeでカスタムキーボードショートカットを設定する。17のコンテキスト、キーストローク構文、keybindings.jsonの例をまとめたリファレンス。
筋肉記憶は Ctrl+K でコマンドパレットを開くと言っているが、Claude Codeは同意しない。使い慣れたショートカットに手を伸ばすたびに違うアクションが実行され、集中が途切れフローが壊れる。
この摩擦は積み重なる。Claude Codeのセッションで何時間も過ごす開発者は、キーボードショートカットに関して無意識の習慣を築く。デフォルトが自分のメンタルモデルと合わない場合、ツールを使うのではなくツールと戦うことになる。VS Code、Vim、Emacs、またはターミナル中心のワークフロー出身なら、すでに数年分のショートカットパターンが指に刻まれている。新しいものを覚えさせるのは認知コストの無駄だ。
Claude Codeはこの問題を完全にカスタマイズ可能なキーバインディングシステムで解決する。すべてのショートカットをコンテキスト別に整理された1つのJSONファイルで定義でき、コードシーケンス、修飾キーの組み合わせ、任意のデフォルト無効化をサポートする。変更は再起動なしで即座に反映される。設定方法と、Claude Codeを既存のワークフローの延長線上に感じさせる方法を説明する。
カスタムキーバインディングを始める
Claude Codeの中で /keybindings スラッシュコマンドを実行する。これにより ~/.claude/keybindings.json に設定ファイルが作成される(または開かれる)。Claude Codeの設定が初めての場合、このファイルは ~/.claude/ ディレクトリ内の他の設定ファイルと並んで配置される。
ファイル構造はシンプルだ:
{
"$schema": "https://platform.claude.com/docs/schemas/claude-code/keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor",
"ctrl+u": null
}
}
]
}3つのトップレベルフィールドがすべてを制御する:
$schema- オプション。ClaudeのJSON Schema URLを指定するとエディタが自動補完とバリデーションを提供する。追加する価値がある。$docs- オプション。クイックリファレンス用のドキュメントURL。bindings- すべてのカスタムショートカットが入る配列。各エントリは特定のコンテキストを対象とする。
$schema フィールドだけで設定が格段に楽になる。VS Codeや他のJSON Schemaサポートのあるエディタを使っていれば、すべての有効なアクションとコンテキスト名のインライン候補が表示される。
keybindings.json への変更は自動で検出され適用される。再起動は不要。編集して保存すれば新しいショートカットが即座に有効になる。
コンテキストの理解
すべてのバインディングはコンテキストに属し、そのショートカットがいつアクティブかをClaude Codeに伝える。Chat コンテキストにバインドされたショートカットは、メインのチャット入力に入力しているときだけ発火する。同じキーの組み合わせが異なるコンテキストで異なる動作をすることができる。
Claude Codeには17のコンテキストがある:
| コンテキスト | アクティブになる場面 |
|---|---|
Global | アプリのどこでも |
Chat | メインチャット入力エリア |
Autocomplete | オートコンプリートメニューが開いている |
Settings | 設定メニューが開いている |
Confirmation | パーミッションと確認ダイアログ |
Tabs | タブナビゲーションコンポーネント |
Help | ヘルプメニューが表示されている |
Transcript | トランスクリプトビューアー |
HistorySearch | 履歴検索モード (Ctrl+R) |
Task | バックグラウンドタスクが実行中 |
ThemePicker | テーマピッカーダイアログ |
Attachments | 画像/添付ファイルバーのナビゲーション |
Footer | フッターインジケーターのナビゲーション |
MessageSelector | 巻き戻しダイアログのメッセージ選択 |
DiffDialog | 差分ビューアーのナビゲーション |
ModelPicker | モデルピッカーの労力レベル |
Select | 汎用選択/リストコンポーネント |
Plugin | プラグインダイアログ(ブラウズ、検索、管理) |
Global コンテキストは特別だ。ここにあるバインディングは、どのダイアログやビューがアクティブかに関わらず、あらゆる場所で適用される。控えめに使う。Ctrl+K をグローバルにバインドすると、チャット中でも、オートコンプリートの候補を閲覧中でも、差分をレビュー中でも発火する。
完全なアクションリファレンス
アクションは namespace:action の命名形式に従う。各コンテキストで利用可能なすべてのアクションとデフォルトバインディングを以下に示す。
グローバルアクション
Claude Codeのどこでも動作する:
| アクション | デフォルト | 内容 |
|---|---|---|
app:interrupt | Ctrl+C | 現在の操作をキャンセル |
app:exit | Ctrl+D | Claude Codeを終了 |
app:toggleTodos | Ctrl+T | タスクリストの表示切替 |
app:toggleTranscript | Ctrl+O | 詳細トランスクリプトの切替 |
タスク管理機能を使う場合、app:toggleTodos は頻繁に使うアクションだ。Ctrl+T がターミナルと競合する場合はより使いやすいキーにバインドすることを検討する。
チャットアクション
最も多くの時間を費やすメインの入力エリア:
| アクション | デフォルト | 内容 |
|---|---|---|
chat:cancel | Escape | 現在の入力をキャンセル |
chat:cycleMode | Shift+Tab | パーミッションモードを循環 |
chat:modelPicker | Cmd+P / Meta+P | モデルピッカーを開く |
chat:thinkingToggle | Cmd+T / Meta+T | 拡張思考を切替 |
chat:submit | Enter | メッセージを送信 |
chat:undo | Ctrl+_ | 最後の操作を元に戻す |
chat:externalEditor | Ctrl+G | 外部エディタで開く |
chat:stash | Ctrl+S | 現在のプロンプトをスタッシュ |
chat:imagePaste | Ctrl+V (Windows では Alt+V) | 画像を貼り付け |
注: chat:cycleMode は、VTモードなしのWindows(Node 24.2.0/22.17.0以前、またはBun 1.2.23以前)ではデフォルトで Meta+M になる。これはClaudeができることとできないことを制御するパーミッション管理と直接連動する。
履歴アクション
コマンド履歴をナビゲートする:
| アクション | デフォルト | 内容 |
|---|---|---|
history:search | Ctrl+R | 履歴検索を開く |
history:previous | Up | 前の履歴アイテム |
history:next | Down | 次の履歴アイテム |
オートコンプリートアクション
オートコンプリートメニューが表示されたとき:
| アクション | デフォルト | 内容 |
|---|---|---|
autocomplete:accept | Tab | 候補を承認 |
autocomplete:dismiss | Escape | メニューを閉じる |
autocomplete:previous | Up | 前の候補 |
autocomplete:next | Down | 次の候補 |
確認アクション
パーミッションと確認ダイアログ:
| アクション | デフォルト | 内容 |
|---|---|---|
confirm:yes | Y, Enter | アクションを確認 |
confirm:no | N, Escape | アクションを拒否 |
confirm:previous | Up | 前のオプション |
confirm:next | Down | 次のオプション |
confirm:nextField | Tab | 次のフィールド |
confirm:previousField | (未割り当て) | 前のフィールド |
confirm:cycleMode | Shift+Tab | パーミッションモードを循環 |
confirm:toggleExplanation | Ctrl+E | パーミッション説明の切替 |
permission:toggleDebug | Ctrl+D | パーミッションデバッグ情報の切替 |
トランスクリプトアクション
| アクション | デフォルト | 内容 |
|---|---|---|
transcript:toggleShowAll | Ctrl+E | すべてのコンテンツ表示の切替 |
transcript:exit | Ctrl+C, Escape | トランスクリプトビューを終了 |
履歴検索アクション
| アクション | デフォルト | 内容 |
|---|---|---|
historySearch:next | Ctrl+R | 次のマッチ |
historySearch:accept | Escape, Tab | 選択を承認 |
historySearch:cancel | Ctrl+C | 検索をキャンセル |
historySearch:execute | Enter | 選択したコマンドを実行 |
タスクアクション
| アクション | デフォルト | 内容 |
|---|---|---|
task:background | Ctrl+B | 現在のタスクをバックグラウンドに移動 |
テーマ、ヘルプ、設定アクション
| アクション | コンテキスト | デフォルト | 内容 |
|---|---|---|---|
theme:toggleSyntaxHighlighting | ThemePicker | Ctrl+T | シンタックスハイライトの切替 |
help:dismiss | Help | Escape | ヘルプメニューを閉じる |
settings:search | Settings | / | 検索モードに入る |
settings:retry | Settings | R | 使用データの再読み込みを再試行 |
ナビゲーションアクション
タブ、添付ファイル、フッター、差分、モデルピッカー、セレクト、メッセージセレクターを網羅:
| アクション | コンテキスト | デフォルト | 内容 |
|---|---|---|---|
tabs:next | Tabs | Tab, Right | 次のタブ |
tabs:previous | Tabs | Shift+Tab, Left | 前のタブ |
attachments:next | Attachments | Right | 次の添付ファイル |
attachments:previous | Attachments | Left | 前の添付ファイル |
attachments:remove | Attachments | Backspace, Delete | 添付ファイルを削除 |
attachments:exit | Attachments | Down, Escape | 添付ファイルバーを終了 |
footer:next | Footer | Right | 次のフッターアイテム |
footer:previous | Footer | Left | 前のフッターアイテム |
footer:openSelected | Footer | Enter | 選択したアイテムを開く |
footer:clearSelection | Footer | Escape | 選択をクリア |
messageSelector:up | MessageSelector | Up, K | リストを上に移動 |
messageSelector:down | MessageSelector | Down, J | リストを下に移動 |
messageSelector:top | MessageSelector | Ctrl+Up, Shift+Up | 先頭にジャンプ |
messageSelector:bottom | MessageSelector | Ctrl+Down, Shift+Down | 末尾にジャンプ |
messageSelector:select | MessageSelector | Enter | メッセージを選択 |
diff:dismiss | DiffDialog | Escape | 差分ビューアーを閉じる |
diff:previousSource | DiffDialog | Left | 前の差分ソース |
diff:nextSource | DiffDialog | Right | 次の差分ソース |
diff:previousFile | DiffDialog | Up | 前のファイル |
diff:nextFile | DiffDialog | Down | 次のファイル |
diff:viewDetails | DiffDialog | Enter | 詳細を表示 |
modelPicker:decreaseEffort | ModelPicker | Left | 労力レベルを下げる |
modelPicker:increaseEffort | ModelPicker | Right | 労力レベルを上げる |
select:next | Select | Down, J, Ctrl+N | 次のオプション |
select:previous | Select | Up, K, Ctrl+P | 前のオプション |
select:accept | Select | Enter | 選択を承認 |
select:cancel | Select | Escape | 選択をキャンセル |
plugin:toggle | Plugin | Space | プラグインを切替 |
plugin:install | Plugin | I | プラグインをインストール |
キーストローク構文
Claude Codeはキーの組み合わせを定義するための読みやすい構文を使用する。
修飾キー
修飾キーは + で組み合わせる:
ctrlまたはcontrolでControlキーalt、opt、またはoptionでAlt/OptionshiftでShiftmeta、cmd、またはcommandでMeta/Command
例:
ctrl+k Single modifier + key
shift+tab Shift + Tab
meta+p Command/Meta + P
ctrl+shift+c Multiple modifiers大文字とShift
単独の大文字はShiftを意味する。バインディングに K と書くことは shift+k と書くことと同じだ。これは j と J(または k と K)が異なる動作をするVimスタイルのバインディングで特に便利だ。
重要な点: 修飾キー付きの大文字はShiftを意味しない。ctrl+K は ctrl+k と同一だ。修飾キーが存在する場合、大文字は純粋にスタイル上のものとして扱われる。
コードシーケンス
コードを使うと複数キーのショートカットを作成できる。キーストロークをスペースで区切る:
ctrl+k ctrl+s Press Ctrl+K, release, then press Ctrl+S
これにより、ショートカットのための名前空間が大幅に広がる。単一キーの組み合わせが不足してきた場合、コードを使えば既存のバインディングと競合せずに数百の可能性が開ける。
特殊キー
非文字キーにはこれらの名前を使う:
escapeまたはescenterまたはreturntabspaceup、down、left、rightbackspace、delete
デフォルトショートカットの無効化
任意のアクションを null に設定することで無効化できる:
{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+s": null
}
}
]
}これはデフォルトショートカットがターミナル、OS、またはClaude Codeと並行して使用するツールと競合する場合に便利だ。デフォルトを無効化してから、同じキーを別のアクションに再バインドすることもできる。
予約済みショートカット
2つのショートカットはハードコードされており、再バインドできない:
| ショートカット | 理由 |
|---|---|
| Ctrl+C | ハードコードされた割り込み/キャンセル |
| Ctrl+D | ハードコードされた終了 |
これらを再バインドしようとしないこと。Claude Codeは受け付けない。Ctrl+C は割り込み、Ctrl+D は終了というUnixの慣習であり、すべてのターミナルユーザーが期待するものだ。
ターミナルマルチプレクサの競合
tmux、GNU screen、または他のマルチプレクサの中でClaude Codeを実行している場合、プレフィックスキーの競合に注意する:
| ショートカット | 競合 |
|---|---|
| Ctrl+B | tmuxプレフィックス(通過させるには2回押す) |
| Ctrl+A | GNU screenプレフィックス |
| Ctrl+Z | Unixプロセスのサスペンド (SIGTSTP) |
デフォルトの task:background アクションは Ctrl+B を使用しており、tmuxと直接競合する。tmuxユーザーであれば即座に再バインドする:
{
"bindings": [
{
"context": "Task",
"bindings": {
"ctrl+b": null,
"ctrl+shift+b": "task:background"
}
}
]
}これはターミナルセッションのマルチプレクサの中でClaude Codeを実行する開発者にとって、最も一般的な混乱の原因の1つだ。
Vimモードとの相互作用
vimモードが有効な場合(/vim で切り替え)、キーバインディングとvimモードは異なるレイヤーで動作する:
- Vimモードはテスト入力を制御する: カーソル移動、モード(INSERT、NORMAL)、モーション、テキストオブジェクト
- キーバインディングはアプリケーションアクションを制御する: タスクリストの切替、メッセージの送信、モデルピッカーの開閉
重要な区別はEscapeキーだ。vimモードでは、EscapeはINSERTからNORMALモードへの切り替えをする。chat:cancel は発火しない。ほとんどの Ctrl+key ショートカットはvimモードを通過してキーバインディングシステムに届くため、NORMALモード中でも Ctrl+T でタスクリストを切り替えられる。
NORMALモードで ? を押すとヘルプメニューが表示される(標準的なvimの動作)。Claude Codeのヘルプではない。
プランニングモードを多用しvimモードも使う場合、chat:thinkingToggle をvimモーションと競合しないコードにバインドすることを検討する。vimモード、スラッシュコマンド、その他のインタラクティブ機能がどのように組み合わさるかの全体像については、インタラクティブモードガイドを参照する。
バリデーションと診断
Claude Codeはキーバインディングファイルを自動的にバリデーションし、以下について警告する:
- JSON構文または構造のパースエラー
- 17のサポートされるコンテキストと一致しない無効なコンテキスト名
- Ctrl+CまたはCtrl+Dを再バインドしようとした場合の予約済みショートカットの競合
- Ctrl+B、Ctrl+A、Ctrl+Zのターミナルマルチプレクサの競合
- 同じコンテキスト内の重複バインディング
/doctor を実行するとすべてのキーバインディングの警告を一度に確認できる。ショートカットが期待通りに動作しない理由を診断する最も速い方法だ。
実用的な設定例
一般的な問題を解決する実際の設定例を示す。
VS Codeユーザー向け設定
VS Code出身で使い慣れたショートカットが欲しい場合:
{
"$schema": "https://platform.claude.com/docs/schemas/claude-code/keybindings.json",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+k ctrl+s": "chat:stash",
"ctrl+shift+p": "chat:modelPicker",
"ctrl+g": "chat:externalEditor"
}
},
{
"context": "Global",
"bindings": {
"ctrl+shift+t": "app:toggleTodos"
}
}
]
}tmuxフレンドリーな設定
tmuxのプレフィックス競合をすべて回避する:
{
"$schema": "https://platform.claude.com/docs/schemas/claude-code/keybindings.json",
"bindings": [
{
"context": "Task",
"bindings": {
"ctrl+b": null,
"ctrl+shift+b": "task:background"
}
}
]
}最小限のディストラクション設定
誤って押してしまうショートカットを無効化する:
{
"$schema": "https://platform.claude.com/docs/schemas/claude-code/keybindings.json",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+s": null,
"ctrl+u": null
}
}
]
}コードベースのパワーユーザー設定
単一キーのコンボを節約しながら、頻度の低い機能にコードでアクセスする:
{
"$schema": "https://platform.claude.com/docs/schemas/claude-code/keybindings.json",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+k ctrl+t": "chat:thinkingToggle",
"ctrl+k ctrl+m": "chat:modelPicker",
"ctrl+k ctrl+e": "chat:externalEditor"
}
}
]
}最も使用頻度の高い単一キーショートカットをクリーンに保ちながら、他のすべてに素早くアクセスできる。
自分の設定を構築する
小さく始めること。すべてを一度に再マッピングしようとしない。実用的なアプローチを示す:
/keybindingsを実行して設定ファイルを作成する- 上位3つの問題点を特定する(競合するショートカット、不足しているショートカット、誤って発動するトリガー)
- まずそれを修正するピンポイントのバインディングで
/doctorを実行してバリデーションする- Claude Codeをフルセッションで使用し、残っている摩擦を記録する
- 必要に応じてバインディングを追加または調整してイテレートする
目標はすべてのショートカットをカスタマイズすることではない。筋肉記憶とClaude Codeの動作の間の摩擦をなくすことだ。ほとんどの開発者はわずか5〜10個のカスタムバインディングで完全に慣れ親しんだ感覚を得られる。ClaudeFastのCode Kitはスラッシュコマンドやフックと並んでキーバインディングフレンドリーなデフォルトを含む事前調整済みの settings.json とともに出荷されるため、ゼロから構築するのではなく堅実なベースラインから始められる。
より包括的なClaude Codeの設定を構築している場合、キーバインディングはCLAUDE.mdの設定やカスタムスラッシュコマンドと連携して完全にパーソナライズされた環境を作り出す。キーバインディングは物理的なインターフェースを担当し、設定ファイルは動作的なインターフェースを担当する。組み合わせることで、Claude Codeが自分のワークフローのために専用に作られたかのような感覚になる。
設定をやめて、構築を始めよう。
AIオーケストレーション付きSaaSビルダーテンプレート。