Claude Codeのキーボードショートカットは、~/.claude/keybindings.json を書くことで自分の手に合わせて変更できます。Claude Codeで /keybindings を実行すると設定ファイルが作成され、開かれます。保存すると変更は自動で検出され、Claude Codeを再起動する必要はありません。内容はClaude Code公式ドキュメントのキーボードショートカットのページ(2026年10月8日に確認)に基づいています。
この記事は、設定ファイルの作り方、コンテキストの考え方、既定のショートカット、キーの書き方、既定キーを外す方法、変更できないキー、うまく動かないときの確認順を、コード例つきで整理します。出力の見た目を変える話はClaude Codeの出力スタイルの使い方|切替方法とカスタム作成、画面下部の表示はClaude Codeのステータスライン設定|/statuslineの使い方が扱っています。ここでは「どのキーで何が動くか」だけに絞ります。Claude Code全体の始め方はClaude Code 使い方 |インストール・5つの機能を初心者向けに解説・2026年の最新情報から読めます。
keybindings.jsonとは何か
【完全無料】AI×SNSで成果を出す100大特典を受け取る
AIの使い方を、SNS運用の実務につなげたい方へ。LINEで特典の案内を受け取れます。
keybindings.jsonは、Claude Codeの操作とキー入力の対応をJSONで上書きする設定ファイルで、既定の場所は ~/.claude/keybindings.json です。
公式ドキュメントによると、ファイルは bindings 配列を持つオブジェクトで、配列の各ブロックが「どの場面(コンテキスト)で」「どのキーが」「どの操作に対応するか」を持ちます。操作の名前は chat:submit(メッセージを送信)のように 名前空間:アクション の形です。
ファイルの先頭に置ける項目は3つです。$schema はエディタの補完用のJSON Schema URL、$docs は説明ページのURLで、どちらも省略できます。実際に動作を決めるのは bindings だけです。
設定は「既定のショートカットを一つずつ書き換える」ものではなく、「変えたいキーだけを書き足す」ものと考えると扱いやすくなります。書いていないキーは既定のまま動きます。
設定ファイルの作り方と最小の書き方
設定ファイルは、Claude Codeで /keybindings を実行すると作成され、同じコマンドで開き直せます。
まずは同ページにある最小の例を見ます。チャット入力欄で Ctrl+E を外部エディタの起動に割り当て、Ctrl+S の割り当てを外す例です。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor",
"ctrl+s": null
}
}
]
}
見るべき点は3つです。context でキーが効く場面を決めること、bindings の左がキー・右が操作名であること、右を null にするとそのキーの割り当てが外れることです。同じJSONの中に、場面ごとのブロックを何個でも並べられます。
編集のたびに再起動しなくてよいので、次の流れで試すのが現実的です。キーを1つだけ追加して保存し、その場で押して動作を確かめ、問題なければ次のキーを足します。一度に何個も足すと、どれが原因で動かないのか切り分けにくくなります。
| 書く場所 | 役割 | 省略 |
|---|---|---|
$schema |
エディタで入力補完を効かせるためのJSON Schema URL | できる |
$docs |
説明ページのURLを書き残す欄 | できる |
bindings |
コンテキストごとのブロックを並べる配列 | できない |
コンテキストの選び方で効く場面が決まる
コンテキストは「そのキー割り当てがどの画面状態で有効か」を表す名前で、同じキーでも場面ごとに別の操作を割り当てられます。
同ページには、Global(アプリ全体)、Chat(メインの入力欄)、Autocomplete(補完メニューが開いている間)、Confirmation(権限や確認のダイアログ)、Transcript(トランスクリプト表示)、HistorySearch(履歴検索)など、多数のコンテキストが一覧になっています。ここでは日常の操作に関わるものを抜き出します。
| コンテキスト | 有効になる場面 | 代表的な操作名 |
|---|---|---|
Global |
アプリ全体 | app:interrupt、app:toggleTranscript |
Chat |
メインの入力欄 | chat:submit、chat:newline、chat:externalEditor |
Autocomplete |
補完メニューが開いている間 | autocomplete:accept、autocomplete:dismiss |
Confirmation |
権限・確認のダイアログ | confirm:yes、confirm:no |
Transcript |
トランスクリプト表示 | transcript:exit |
HistorySearch |
履歴検索(Ctrl+R) | historySearch:execute |
Task |
タスクの前面実行中 | task:background |
MessageSelector |
巻き戻しメニューのメッセージ選択 | Selectの操作を流用 |
コンテキストの選び間違いは、設定が「効かない」原因の筆頭です。たとえば送信キーを変えたいのに Global に書いても、送信の操作は Chat のものなので期待どおりには動きません。操作名の先頭(chat: や confirm:)と、その操作が属するコンテキストを揃えて書くのが基本です。
同ページは、各アクションの表を「Actions available in the Chat context」のようにコンテキストごとに分けています。変えたい操作が見つかった表の見出しが、そのまま書くべき context です。
Chatとグローバルの既定ショートカット
Chatコンテキストは入力欄の操作をまとめたもので、送信・改行・外部エディタ・モード切替などの既定キーがここに集まっています。
以下は公式ドキュメントに載っている既定値の抜粋です。macOSでMetaはOptionキーに当たります。
| 操作名 | 既定のキー | 内容 |
|---|---|---|
chat:submit |
Enter | メッセージを送信 |
chat:newline |
Ctrl+J | 送信せずに改行 |
chat:cancel |
Escape | 現在の入力を取り消し |
chat:externalEditor |
Ctrl+G、Ctrl+X Ctrl+E | 外部エディタで開く |
chat:stash |
Ctrl+S | 入力中のプロンプトを一時退避 |
chat:undo |
Ctrl+_、Ctrl+Shift+- | 直前の操作を取り消し |
chat:cycleMode |
Shift+Tab | 権限モードを順に切り替え |
chat:modelPicker |
Meta+P | モデル選択を開く |
chat:fastMode |
Meta+O | ファストモードの切替 |
chat:thinkingToggle |
Meta+T | 拡張思考の切替 |
chat:imagePaste |
Ctrl+V(WindowsとWSLはAlt+Vも) | クリップボードの画像を貼り付け |
同ページの注記では、Shift+Tab は、Node 24.2.0未満・22.17.0未満、またはBun 1.2.23未満でVTモードのないWindowsでは既定が Meta+M になります。モードの切り替え方はClaude Codeのプランモードの使い方|/planで計画を承認する手順、権限そのものの設計はClaude Codeの権限設定(permissions)の使い方で扱っています。
プラグインの画面では、Plugin コンテキストの plugin:toggle(Space)、plugin:install(I)、plugin:favorite(F)が既定です。プラグイン自体の導入と自作はClaude Codeのプラグインの使い方|インストール・自作・配布までに整理されています。
このほか、同ページには、実行中のメッセージを待ち行列に入れて送る chat:queueSubmit(既定は Ctrl+X Enter、v2.1.247以降)と、待ち行列ごと即時に送る chat:sendNow(既定は Ctrl+Enter と Ctrl+X Ctrl+S、v2.1.275以降)も載っています。使っているバージョンが古い場合は、これらの操作名を書いても効きません。
入力欄の外側で効くのが、アプリ全体の操作(Global)、履歴の移動、トランスクリプトの切替です。
同ページでは、Globalの app:interrupt が Ctrl+C(現在の処理を中断)、app:exit が Ctrl+D(800ミリ秒以内に2回押して確定)、app:toggleTranscript が Ctrl+O(詳細なトランスクリプトの切替)と載っています。app:toggleTranscript は、長い出力の途中経過を確認したいときに役立つ操作です。
履歴は history:search が Ctrl+R、history:previous が Up、history:next が Down です。履歴検索の中では別のコンテキスト(HistorySearch)に切り替わり、historySearch:next は Ctrl+R、historySearch:accept は Escape と Tab、historySearch:execute は Enter、historySearch:cancel は Ctrl+C です。
トランスクリプトの表示中は Transcript コンテキストになり、transcript:exit が q、Ctrl+C、Escape に割り当てられています。ただし同ページによると、transcript:toggleShowAll(既定 Ctrl+E)は従来の描画方式だけで有効で、全画面描画の場合は「すべて表示」の切替がありません。
入力した内容を消してしまったときの復元は、キー割り当てというより操作手順の話なので、Claude Codeで消した入力を戻す方法|Ctrl+CとEsc2回の復元手順にまとめられています。巻き戻しの機能はClaude Codeの/rewind使い方|チェックポイントで巻き戻す手順が詳しい記事です。
キーの書き方と修飾キー・コード
キーの書き方は、修飾キーとキー名を + でつなぐ形式で、大文字と小文字は区別されません。
公式ドキュメントの修飾キーの書き方は次のとおりです。
| 書き方 | 意味 |
|---|---|
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 で書くのが無難です。
特殊キーは escape(または esc)、enter(または return)、tab、space、up・down・left・right、pageup・pagedown、home・end、backspace・delete と書きます。大文字の扱いは「K と k、ctrl+K と ctrl+k は同じ」で、Shiftと文字を組み合わせたいときは shift+k と書きます。
複数のキーを順番に押す「コード(chord)」は、キーを空白で区切って ctrl+k ctrl+s のように書きます。各キーは前のキーから3秒以内に押す必要があり、遅れるとコードが取り消され、短い通知が出ます。
非US配列についても同ページに記述があります。Ctrlのショートカットはキー名をラテン文字で書きます。キリル文字などの配列では、ターミナルがKittyキーボードプロトコルで物理キーの位置を報告する場合に、US配列上の位置で照合されます。AZERTYのようにラテン文字を並べ替えた配列では、そのキーが入力する文字で照合されます。
既定のキーを外す(nullで割り当てを解除)
既定の割り当てを外すには、そのキーに null を書き、他の操作に使い回せる状態にします。
前掲の例にもありましたが、"ctrl+s": null と書くと、そのコンテキストでの Ctrl+S の割り当てが外れます。同ページは、これがコード(複数キーの連続)でも同じように使えると説明しています。
ここで押さえたいのは、同じキーが複数のコンテキストに存在する点です。Ctrl+S は Chat では chat:stash、HistorySearch では historySearch:cycleScope(全画面描画での検索範囲の切替)、Agents では agents:switchView に割り当てられています。Chat だけで外しても、他のコンテキストの割り当ては残ります。
また、エージェントビュー(claude agents)では、Agents コンテキストが割り当てているキーは、Chat や Global の同じキーの割り当てより優先されます。同ページの例では、エージェントビューで Ctrl+S を押すと、既定の chat:stash ではなくセッションのグルーピング切替が動きます。
外した結果を確認するには、実際にそのキーを押して何も起きないことを見ます。意図しない操作が残っていれば、そのキーを使う別のコンテキストを探し、同じように null を書きます。
実例1: 外部エディタと改行のキーを入れ替える(仮の例)
長い指示を書く人は、改行と外部エディタの起動を押しやすいキーに寄せると、入力の手間を減らせます。
次は「仮の例」として、日本語の長文プロンプトを書くことが多い利用者を想定した設定です。送信は Enter のままにして、改行を Ctrl+J から shift+enter に増やし、外部エディタは Ctrl+G のまま使います。
{
"bindings": [
{
"context": "Chat",
"bindings": {
"shift+enter": "chat:newline"
}
}
]
}
この仮の例で押さえるのは、既定の割り当て(改行の Ctrl+J)を消さずに、新しいキーを足している点です。置き換えたい場合は、元のキーに null を書きます。足すだけなら、元のキーも従来どおり使えます。
ターミナルによっては shift+enter を通常の Enter と区別して送らないことがあります。同ページも chat:sendNow の説明で、拡張キーを報告しないターミナルは Ctrl+Enter を通常の Enter として届ける、と述べています。保存して試し、改行にならなければ、そのターミナルでは別のキーを選びます。
外部エディタを日常的に使うなら、chat:externalEditor の既定は Ctrl+G と Ctrl+X Ctrl+E の2つです。ここで挙げた Ctrl+X のコードは、後の章で扱う「Ctrl+Xの接頭辞」を共有します。
| やりたいこと | 書く内容 | 確認すること |
|---|---|---|
| 改行キーを増やす | Chatに "shift+enter": "chat:newline" |
実際に押して改行になるか |
| 元の改行キーを無効にする | Chatに "ctrl+j": null も書く |
元のキーで反応しないか |
| 外部エディタのキーを変える | Chatに "ctrl+e": "chat:externalEditor" |
他の操作と衝突しないか |
実例2: 確認ダイアログと巻き戻しメニューを調整する
確認ダイアログは Confirmation、巻き戻しメニューのメッセージ選択は MessageSelector というコンテキストで、それぞれ個別にキーを変えられます。
確認の操作は confirm:yes(既定 Enter)と confirm:no(既定 Escape)です。同ページの例では、y と n をそれぞれ割り当てます。
{
"bindings": [
{
"context": "Confirmation",
"bindings": {
"y": "confirm:yes",
"n": "confirm:no"
}
}
]
}
同ページは2点を補足しています。1つは、y や n のような単独の文字を割り当てても、ダイアログ内のテキスト欄に文字としては入力できることです。もう1つは、v2.1.280より前は y と n が既定で割り当てられていたため、それ以前に /keybindings で作ったファイルには両方の行が入っており、削除するまで有効なままだという点です。古いファイルを使い続けている人は、中身を一度確認してください。
さらに、ダイアログは「はい・いいえ」を尋ねない場面でも、決定と取り消しに confirm:yes と confirm:no を使います。単独の文字を割り当てると、その文字を表示しないダイアログでも反応することがあります。
巻き戻しメニューについては、同ページが「MessageSelector には独自の操作も既定の割り当てもない」と説明しています。メッセージの移動と選択はSelectの操作とその既定キーで行われ、このリストだけキーを変えたいときは MessageSelector のブロックでSelectの操作を割り当てます。たとえば o でハイライトしたメッセージを選ぶ設定は、次のとおりです。
{
"bindings": [
{
"context": "MessageSelector",
"bindings": {
"o": "select:accept"
}
}
]
}
v2.1.283より前は、このリストはSelectの割り当てを無視して独自の操作(messageSelector:up など)を持っていました。古い名前を書いたファイルも、同じ働きのSelectの操作として動き続けると説明されています。
Ctrl+Xから始まるコードを整理する
Ctrl+Xはコードの接頭辞として複数の既定操作に使われており、単独キーとして使いたい場合は、同じ接頭辞のコードをすべて外す必要があります。
公式ドキュメントに載っている、ctrl+x を接頭辞とする既定のコードは、コンテキスト別に次のとおりです。
| コンテキスト | 既定のコード | 必要なバージョン |
|---|---|---|
Chat |
ctrl+x ctrl+k、ctrl+x ctrl+e |
記載なし |
Chat |
ctrl+x enter |
v2.1.247以降 |
Chat |
ctrl+x ctrl+a、ctrl+x tab |
v2.1.260以降 |
Chat |
ctrl+x ctrl+s |
v2.1.275以降 |
Task |
ctrl+x ctrl+b |
記載なし |
DiffPanel |
ctrl+x b |
v2.1.260以降 |
Pane |
ctrl+x left、right、up、down、x |
記載なし |
PaneField |
ctrl+x x |
記載なし |
同ページによれば、一部のコードだけを外すと、接頭辞を押したときに残りのコードを待つ状態(chord-wait)に入ります。そのため、ctrl+x を単独の割り当てとして取り戻すには、上の表のコードをすべて null にしたうえで、ctrl+x に操作を割り当てます。公式の例では、Chat コンテキストの ctrl+x に chat:newline を割り当てています。
しかも、あるコンテキストのコードは、他のコンテキストでも接頭辞を押さえたままにします。同ページは「各コードは、それを定義するコンテキストごとに外す必要がある」と述べています。Chat のコードだけ外して終わりにすると、Task や Pane のコードが接頭辞を握り続けます。
同ページには、バックグラウンドのサブエージェントをまとめて止める chat:killAgents(既定 Ctrl+X Ctrl+K)も載っています。3秒以内に2回押して確定し、そのセッションでのアーティファクトの自動返信も止まります。サブエージェントを多用する人は、このコードが押しやすいかを確認しておくと安心です。サブエージェントの作り方はClaude Codeのサブエージェント使い方|設定ファイルの書き方と使い所で扱っています。
バージョンの列が示すとおり、新しいコードほど新しい版にしか存在しません。自分のClaude Codeのバージョンと公式ドキュメントの記載を見比べてから書くと、読み返したときに迷いません。
変更できないキーとターミナル側の競合
Claude Codeが固定で扱うキーは再割り当てできず、ターミナルやマルチプレクサ側が先に使うキーは、設定以前に届かないことがあります。
公式ドキュメントは、再割り当てできないキーを次のように示しています。
| キー | 理由 |
|---|---|
| Ctrl+C | 固定の中断・取り消し |
| Ctrl+D | 固定の終了 |
| Ctrl+M | Claude Codeが常にEnterとして受け取る |
| Ctrl+[ | 常にEscapeとして受け取る(Kittyキーボードプロトコルのターミナルではv2.1.242以降) |
| Ctrl+I | 常にTabとして受け取る |
| Ctrl+H | ASCIIのバックスペースを送る。Windowsでの扱いはターミナルと環境変数による |
| Caps Lock | ターミナルのアプリに届かない |
多くのダイアログでは、Ctrl+CまたはCtrl+Dを2回押すとダイアログが閉じ、Claude Code自体は終了しません。1回目の押下のあとに出るヒントが、2回目で閉じるのか終了するのかを示します。
ターミナル側の競合として、同ページはCtrl+B(tmuxの接頭辞で、送るには2回押す)、Ctrl+A(GNU screenの接頭辞)、Ctrl+Z(Unixのプロセス停止、SIGTSTP)を挙げています。Claude Code側には task:background(既定 Ctrl+B)があるので、tmuxを使う人は、Ctrl+Bを2回押す、またはCtrl+X Ctrl+Bのコードを使う、といった工夫が要ります。
その場合、割り当てを自分のファイルで書き換える前に、まず既定のコード(Ctrl+X Ctrl+B)が使えないかを確認するのが近道です。
バージョンやvimモードで挙動が変わる点
キー設定の挙動は、Claude Codeのバージョンと、vimモードが有効かどうかで変わります。
同ページでは、vimモード(/config のEditor mode)が有効でも、キーバインドとは独立して動くと説明されています。vimモードは入力欄の中のカーソル移動やモード切替を受け持ち、キーバインドはトグルや送信などコンポーネント単位の操作を受け持ちます。
具体的には、vimモードでEscapeを押すと、INSERTからNORMALへの切替になり、chat:cancel は発動しません。多くのCtrl+キーはvimモードを通過してキーバインド側に届きます。一方、vimのキーそのものはkeybindings.jsonでは再割り当てできません。jj のような2キーの並びをEscapeに割り当てたい場合は、別の設定である vimInsertModeRemaps を使うと同ページにあります。
全画面描画(fullscreen rendering)でも違いがあります。全画面では Scroll コンテキストが有効になり、scroll:lineUp(wheelup)や scroll:top(Ctrl+Home)、選択範囲の拡張(Shift+矢印)などが使えます。履歴検索も、全画面ではCtrl+Rが検索ダイアログを開き、そこでCtrl+Sが検索範囲(セッション、プロジェクト、すべて)を切り替えます。
こうした差は、同じキー設定でも画面モードで動きが変わる理由になります。うまく動かないときは、まず自分がどの描画方式で、どのバージョンかを確認します。コンテキスト管理など、セッションを長く使うときの考え方はClaude Codeの/compact使い方|コンテキスト管理と自動圧縮の設定が参考になります。
設定が効かないときの確認手順
設定が効かないときは、JSONの構文、コンテキスト名、操作名、予約キー、重複の順に確認すると、原因を絞り込めます。
同ページによると、Claude Codeはキー設定を検証し、次の問題をデバッグログに警告として書き出します。構文エラー(不正なJSONや構造)、修飾キーの綴り間違い(ctl+k など)、存在しないコンテキスト名、操作名として不正な値、未登録の操作名、予約済みショートカットとの衝突、同じコンテキスト内の重複です。
注意したいのは、問題ごとに結果が異なることです。修飾キーを綴り間違えると、認識できない部分が捨てられ、残ったキー(ctl+k なら k)に割り当てが適用されます。未登録の操作名の場合は、そのバインドが読み飛ばされ、同じキーの既定の割り当てが有効なまま残ります。つまり、綴り間違いは「何も起きない」より「意図しないキーに効く」形で現れることがあります。
詳細を見るには、Claude Codeを --debug つきで起動します。警告の内容を読んだら、該当の行だけを直して保存し、再起動なしで動作を確かめます。
| 症状 | 疑うこと | 確認方法 |
|---|---|---|
| 設定がまったく反映されない | JSONの構文エラー | --debug の警告、エディタの構文チェック |
| 押しても別の動きをする | 修飾キーの綴り間違い | ctrl、shift、alt などの綴りを見直す |
| 既定の動作が残る | 操作名の綴り間違い、別コンテキストの割り当て | 操作名を公式の表と照合する |
| 特定のキーだけ届かない | 予約キー、ターミナルやtmuxの先取り | 予約キーの表とターミナルの設定を見る |
| Cmdを使った設定が動かない | ターミナルがSuperを報告しない | ctrl か meta に書き換える |
手順を決めて進めるために、変更を入れる前に元のファイルのコピーを別の場所に残しておくと、戻すのが簡単です。ファイルは小さなJSONなので、別の場所にコピーを置くだけでも十分な備えになります。
よくある質問(FAQ)
- Q1. keybindings.jsonはどこにありますか?
- 同ページでは
~/.claude/keybindings.jsonです。Claude Codeで/keybindingsを実行すると、作成または開くことができます。 - Q2. 設定を変えたら再起動が必要ですか?
- 必要ありません。同ページに、変更は自動で検出されて適用されるとあります。
- Q3. 既定のショートカットを無効にするには?
- 該当コンテキストのブロックで、キーの値を
nullにします。ただし同じキーが別のコンテキストにも割り当てられている場合は、そちらでもnullを書く必要があります。 - Q4. Ctrl+Cを別の操作に変えられますか?
- 変えられません。Ctrl+CとCtrl+Dは固定で、再割り当てできないキーとして同ページに載っています。
- Q5. CmdキーでのショートカットがMacで動きません。
- Cmdの系統は、Superの修飾キーを報告するターミナルでだけ検出されます。多くのターミナルは送らないため、
ctrlかmetaで書き直すと動く場合があります。 - Q6. 綴りを間違えるとどうなりますか?
- 修飾キーの綴り間違いは認識できない部分が捨てられ、残ったキーに適用されます。未登録の操作名は、そのバインドが読み飛ばされて既定の割り当てが残ります。詳細は
--debugで確認できます。 - Q7. 日本語入力中のキー操作に影響しますか?
- 同ページにあるのは、Ctrlのショートカットのキー名をラテン文字で書くことと、配列ごとの照合の違いです。日本語入力の変換中の挙動については記載がないため、使っている入力環境で実際に押して確かめてください。
まとめ
Claude Codeのキーボードショートカットは、/keybindings で作る ~/.claude/keybindings.json を書くことで変えられます。保存すれば再起動なしで反映され、書いていないキーは既定のまま動きます。
設定の核心は3つです。場面を表すコンテキストを正しく選ぶこと、namespace:action の操作名を公式の表と合わせること、既定の割り当てを外すときは null を使うことです。Ctrl+Xのコードや、複数のコンテキストに現れるCtrl+Sのように、同じキーが別の場所で使われている点も忘れないでください。
うまく動かないときは、JSONの構文、コンテキスト名、操作名、予約キー、ターミナル側の競合の順に確認し、--debug の警告を読みます。まずは1つのキーだけ変えて動作を確かめ、少しずつ増やすのが安全な進め方です。
あわせて読みたい・姉妹メディア
