Claude Code のキーボードショートカットは、設定ファイルで自由に付け替えられます。設定ファイルは ~/.claude/keybindings.json で、Claude Code のなかで /keybindings を実行すると作成または既存ファイルのオープンが行われます。ファイルを保存すると変更は自動で検出され、Claude Code を再起動する必要はありません。この記事は 公式ドキュメントの「Customize keyboard shortcuts」(2026年9月11日に確認)にもとづいています。
設定ファイルの形
設定ファイルは bindings という配列を持つオブジェクトです。配列の各要素を「ブロック」と呼び、1つのブロックが 1つのコンテキストと、キー打鍵からアクションへの対応表を持ちます。
| フィールド | 説明 |
|---|---|
$schema | 任意。エディタの補完用の JSON Schema の URL |
$docs | 任意。ドキュメントの URL |
bindings | コンテキストごとのブロックの配列 |
次の例は、チャット入力欄で Ctrl+E に「外部エディタで開く」を割り当て、Ctrl+U の既定の割り当てを外します。
{
"$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+u": null
}
}
]
}
ここで押さえるのは3点です。キーは小文字の文字列、値はアクション名の文字列、そして値を null にすると既定の割り当てが外れる、という形です。
コンテキスト: どの画面で効かせるか
同じ Ctrl+E でも、チャット入力中と差分ビューアを開いているときでは意味を変えたいことがあります。context はそのための仕組みで、そのブロックの割り当てがどの画面で有効かを決めます。
公式ドキュメントが挙げているコンテキストは次のとおりです。
| コンテキスト | 有効な場所 |
|---|---|
Global | アプリ全体 |
Chat | メインのチャット入力欄 |
Autocomplete | 補完メニューが開いているとき |
Settings | 設定メニュー |
Confirmation | 権限・確認ダイアログ |
Tabs | タブ移動の部品 |
Help | ヘルプメニュー表示中 |
Transcript | トランスクリプトビューア |
HistorySearch | 履歴検索モード(Ctrl+R) |
Task | バックグラウンドタスクの実行中 |
ThemePicker | テーマ選択ダイアログ |
Attachments | 選択ダイアログでの画像添付の移動 |
Footer | フッターのインジケータ移動(タスク・チーム・差分・アーティファクト) |
MessageSelector | 巻き戻し・要約ダイアログのメッセージ選択 |
DiffDialog | 差分ビューアの移動 |
DiffPanel | 差分パネルが開いているとき |
ModelPicker | モデル選択のエフォート段階 |
EffortSlider | /effort で開くエフォートのスライダー |
Select | 汎用の選択・一覧部品 |
Plugin | プラグインのダイアログ |
Agents | エージェントビュー(claude agents) |
Scroll | 全画面表示での会話スクロールとテキスト選択 |
バージョンによる差もあります。/doctor の診断画面向けの Doctor コンテキストと doctor:fix アクションは、v2.1.205 より前にだけ存在していました。
アクション: 何を起こすか
アクションは 名前空間:動作 という形の文字列です。名前空間はおおむねコンテキストに対応し、たとえばメッセージ送信は chat:submit、タスク一覧の表示切り替えは app:toggleTodos です。
Global コンテキストで使える主なアクションは次のとおりです。
| アクション | 既定 | 説明 |
|---|---|---|
app:interrupt | Ctrl+C | 実行中の処理を中断 |
app:exit | Ctrl+D | Claude Code を終了(800ms 以内に2回押すと確定) |
app:redraw | (未割り当て) | 端末の再描画を強制 |
app:toggleTodos | Ctrl+T | Claude の ToDo リストの表示切り替え。/tasks のバックグラウンドタスク画面とは別物 |
app:toggleTranscript | Ctrl+O | 詳細トランスクリプトの表示切り替え |
履歴移動は独立した名前空間です。history:search(既定 Ctrl+R)、history:previous(Up)、history:next(Down)の3つがあります。
Chat コンテキストのアクションは数が多く、日常的に触る部分です。主なものを挙げます。
| アクション | 既定 | 説明 |
|---|---|---|
chat:cancel | Escape | 入力中の内容を取り消す |
chat:clearInput | Ctrl+L | 入力と会話を保ったまま全画面を再描画。全画面表示では画面もクリアする |
chat:clearScreen | Cmd+K | chat:clearInput と同じ |
chat:killAgents | Ctrl+X Ctrl+K | このセッションのバックグラウンドサブエージェントを全部止め、以降アーティファクトの自動返信も切る |
chat:cycleMode | Shift+Tab | 権限モードを順に切り替える |
chat:modelPicker | Meta+P | モデル選択を開く |
chat:fastMode | Meta+O | ファストモードの切り替え |
chat:thinkingToggle | Meta+T | 拡張思考の切り替え |
chat:submit | Enter | メッセージを送信 |
chat:queueSubmit | Ctrl+X Enter | 順番待ちとして送信。Claude が作業中でもターンに割り込まず、キューに積まれる。補完候補が選択状態でも下書きを送る。v2.1.247 以降 |
chat:newline | Ctrl+J | 送信せずに改行を入れる |
chat:undo | Ctrl+_, Ctrl+Shift+- | 直前の操作を取り消す |
chat:externalEditor | Ctrl+G, Ctrl+X Ctrl+E | 外部エディタで開く |
1つのアクションに既定の割り当てが2つあることがある点に注意してください。chat:undo と chat:externalEditor がそれです。
キーの書き方(修飾キー・特殊キー)
修飾キーは + でつなぎます。名前には別名があり、どれを書いても同じです。
ctrl/control— Control キーshift— Shift キーalt/opt/option/meta— Windows・Linux では Alt、macOS では Optioncmd/command/super/win— macOS では Command、Windows では Windows キー、Linux では Super
cmd 系は多くの端末で使えません。Super 修飾を報告する端末(Kitty キーボードプロトコル対応や xterm の modifyOtherKeys モード)でしか検出されないためです。どの環境でも動かしたい割り当てには ctrl か meta を使ってください。
ctrl+k Ctrl + K
shift+tab Shift + Tab
meta+p macOS では Option + P、それ以外では Alt + P
ctrl+shift+c 修飾キーの組み合わせ
キー名の大文字と小文字は区別されません。K と k、ctrl+K と ctrl+k は同じものです。Shift と文字の組み合わせを割り当てたいときは shift+k と明示的に書きます。
特殊キーには次の名前を使います。
escape/esc、enter/return、tab、spaceup、down、left、rightpageup、pagedown、home、endbackspace、deletewheelup、wheeldown(マウスホイールのスクロール)
US 配列以外を使っている場合、Ctrl 系ショートカットのキー名はラテン文字で書きます。実際に押されたキーとの照合のしかたは配列の種類で変わります。キリル文字のような非ラテン配列では、Kitty キーボードプロトコルを使う端末が物理キーの位置を報告する場合、US 配列上の位置で照合されます(ロシア語配列で物理的な W キーを Ctrl と押すと ctrl+w になります)。位置を報告しない端末では、端末が送ってきたものがそのまま照合されるため、ASCII 制御コードならラテン文字のショートカットが動き、キリル文字として届いた打鍵はどの割り当てにも一致しません。AZERTY のようにラテン文字の並びを変えただけの配列では、キーが打つ文字で照合されるので、A と刻印されたキーを Ctrl と押せば ctrl+a になります。なお v2.1.247 より前は、Kitty キーボードプロトコルを使う端末(Ghostty・Kitty・WezTerm・iTerm2)で非ラテン配列のとき Ctrl 系が発火しませんでした。
和音(chord)で2打鍵にする
打鍵をスペースで区切ると、順番に押す和音になります。
ctrl+k ctrl+s Ctrl+K を押して離し、続けて Ctrl+S
次の打鍵は前の打鍵から3秒以内に行う必要があります。それより長く待つと和音は取り消され、その旨の短い通知が出ます。
和音は、単打鍵が足りなくなったときの逃げ道になります。Ctrl と文字の組み合わせは26通りしかなく、そのうち後述の予約キーは使えないので、実際に空いている枠はもっと少ないためです。
既定のショートカットを外す
アクションの代わりに null を書くと、その既定の割り当てが外れます。
{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+s": null
}
}
]
}
ここには和音のプレフィックスという落とし穴があります。ある接頭辞を単打鍵の割り当てとして使いたい場合、その接頭辞を共有する和音を1つ残らず外す必要があります。有効なコンテキストに和音が1つでも残っていると、その接頭辞は予約されたままです。しかも和音はそれを定義しているコンテキストごとに外す必要があります。
Claude Code が既定で ctrl+x を接頭辞にしている和音は、Chat の ctrl+x ctrl+k / ctrl+x ctrl+e / ctrl+x enter / ctrl+x ctrl+a / 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 自体を単打鍵として取り戻すには、これらを全部外します。
{
"bindings": [
{
"context": "Task",
"bindings": { "ctrl+x ctrl+b": null }
},
{
"context": "DiffPanel",
"bindings": { "ctrl+x b": null }
},
{
"context": "Chat",
"bindings": {
"ctrl+x ctrl+k": null,
"ctrl+x ctrl+e": null,
"ctrl+x enter": null,
"ctrl+x ctrl+a": null,
"ctrl+x tab": null,
"ctrl+x": "chat:newline"
}
}
]
}
一部だけ外した場合は、接頭辞を押すと残った和音のために待機状態に入ります。「外したはずなのに反応が一拍遅れる」と感じたら、外し漏れた和音が別のコンテキストに残っていないか確認してください。
変えられないキーと、ぶつかるキー
次のショートカットは割り当てを変更できません。理由はそれぞれ違います。
| ショートカット | 理由 |
|---|---|
| Ctrl+C | 中断・キャンセルとして固定されている |
| Ctrl+D | 終了として固定されている |
| Ctrl+M | Claude Code には常に Enter として届く |
| Ctrl+[ | 常に Escape として届く(Kitty キーボードプロトコルを使う端末では v2.1.242 以降) |
| Ctrl+I | 常に Tab として届く |
| Ctrl+H | ASCII のバックスペースバイトを送る。Windows での読み取り方は端末と CLAUDE_CODE_BS_AS_CTRL_BACKSPACE 環境変数で決まる |
| Caps Lock | 端末アプリケーションに届かない |
変更はできても、端末マルチプレクサとぶつかるものもあります。Ctrl+B は tmux のプレフィックス(2回押すと送られます)、Ctrl+A は GNU screen のプレフィックス、Ctrl+Z は Unix のプロセス一時停止(SIGTSTP)です。tmux や screen の上で作業するなら、この3つは避けるのが無難です。
vim モードとの関係
/config の Editor mode で vim モードを有効にしている場合、キーバインドと vim モードは別々の層で動きます。vim モードはテキスト入力の層(カーソル移動・モード・モーション)を、キーバインドは部品の層(ToDo の表示切り替え・送信など)を扱います。
- vim モードの Escape は INSERT から NORMAL への切り替えで、
chat:cancelは発火しません - ほとんどの Ctrl+キーは vim モードを通り抜けてキーバインド側に届きます
- vim のキー自体はキーバインドファイルでは変えられません。
jjのような INSERT モードの2打鍵を Escape に割り当てたい場合はvimInsertModeRemaps設定を使います - vim の NORMAL モードでは
?がヘルプ、/が履歴検索(標準モードの Ctrl+R と同じ)です
書き間違いをどう見つけるか
Claude Code はキーバインドファイルを検証し、次の場合に警告を出します。
- 構文エラー(JSON や構造が不正)
- コンテキスト名が存在しない
- アクションの値が不正(文字列でも
nullでもない) - アクション名が未知(登録済みアクションの打ち間違いなど)
- 予約済みショートカットとの衝突
- 同じコンテキスト内での重複
アクション名を打ち間違えた場合、Claude Code はその割り当てを読み飛ばし、そのキーの既定の割り当てをそのまま有効に保ちます。この挙動は v2.1.246 で入ったもので、それより前は未知のアクション名を書くとそのキーが黙って無効になっていました。古いバージョンで「割り当てたはずのキーが何も起こさない」場合は、まずアクション名の綴りを疑ってください。
警告はファイル読み込み時に報告され、それぞれデバッグログにも書かれます。詳細を見るには --debug を付けて起動します。
claude --debug
まとめ
キーバインドの変更は、/keybindings でファイルを開き、context と キー打鍵: アクション を書くだけです。保存すれば再起動なしで反映されます。つまずきやすいのは次の4点です。
- コンテキストを間違えると効かない — チャット入力なら
Chat、どこでもならGlobal cmd系は多くの端末で届かない — 環境を選ばない割り当てにはctrlかmeta- 接頭辞を取り戻すには和音を全部外す — しかも定義しているコンテキストごとに
- アクション名の打ち間違いは既定のまま通る — 疑わしいときは
--debugで警告を読む
あわせて読むなら、画面下部の表示を変えるステータスラインのカスタマイズ、対話モードの既定のキー操作をまとめた対話モードのキーボードショートカット、ファイル全体の設定項目を扱う設定と権限が近い話題です。
出典: Customize keyboard shortcuts - Claude Code Docs(2026年9月11日確認)