Claude Codeのキーバインド設定(keybindings.json)完全ガイド
Claude Codeのキーバインドをkeybindings.jsonでカスタマイズする方法を、設定ファイルの場所・書式・よく使うリバインド例・vimモードまで詳しく解説します。
🎯 この記事で学べること
- 1keybindings.jsonの場所とJSONの基本構造を理解できます
- 2コンテキストとアクションの考え方を把握し、安全にリバインドできます
- 3よく使うカスタマイズ例(送信キー変更・無効化など)を実装できます
- 4チョード(連続キー)バインドの書き方がわかります
- 5Vimモードや反映されない時の対処法を身につけられます
読了時間: 約9分
キーバインドをカスタマイズする意義
こんにちは!今日はClaude Codeの**キーバインド設定(keybindings.json)**をじっくり解説していきます。
Claude Codeには豊富なキーボードショートカットが標準で用意されていますが、人によっては「このキー、別のものに割り当てたいな」と思うことがありますよね。

Claude Codeのショートカット、便利なんだけど指の届きにくいキーがあるんだよね...。変えられないの?

変えられるよ!keybindings.jsonっていう設定ファイルを書けば、自分の好きなキーに割り当て直せるんだ。

え!VS Codeのキーバインド設定みたいな感じ?

まさにそのイメージ。JSONで「どのキーで・どの動作を・どの画面のときに」を書くだけ。 今日はその書式と、つまずきやすいポイントを順番に見ていこう!
キーバインドのカスタマイズが効いてくる場面は、たとえばこんなときです。
- 標準の送信キー(Enter)以外で送信したい、改行と送信を入れ替えたい
- tmuxやscreenのプレフィックスキーと競合するショートカットを避けたい
- 普段VS CodeやVimで慣れている操作感にClaude Codeを寄せたい
- 誤爆しやすいキー(うっかり押すと画面がクリアされる等)を無効化したい
💡 ポイント: キーバインドは「効率化」の最後の一押しです。まずは標準ショートカットを覚え、どうしても合わないものだけをリバインドするのが、設定を壊さないコツです。
keybindings.jsonの場所と基本書式
ファイルの場所
設定ファイルはユーザーのホームディレクトリ配下にあります。
~/.claude/keybindings.json
ファイルがまだ存在しない場合は、自分で新規作成すればOKです。Claude Code内から/keybindingsコマンドを実行すると、この設定ファイルを開けます。
編集はエディタで直接行ってもよいですが、まずは/keybindingsでファイルを開き、保存し直す流れが確実です。手で作る場合は文字コードをUTF-8、拡張子を.jsonにしてください。
JSONの基本構造
keybindings.jsonは、トップレベルにbindingsという配列を持つオブジェクトです。配列の各要素が「あるコンテキストでのキー割り当て」を表します。
{
"$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"
}
}
]
}
各フィールドの意味は次の通りです。
| フィールド | 役割 |
|---|---|
$schema | エディタの補完・検証に使われるスキーマURL。付けておくと安心 |
$docs | 公式ドキュメントへのリンク(任意だが推奨) |
bindings(外側) | コンテキストごとの設定をまとめる配列 |
context | そのキー割り当てが有効になる画面・状態 |
bindings(内側) | 「キー → アクション」の対応表 |
ポイントは、外側のbindingsが配列、内側のbindingsがオブジェクトという二段構えになっていることです。ここを取り違えると後述の検証でエラーになります。
コンテキストとは
「コンテキスト」は、そのキーバインドが効く画面や状態のことです。たとえばChatはチャット入力欄にフォーカスがある状態、Confirmationは権限確認ダイアログが出ている状態を指します。同じctrl+eでもコンテキストによって別の動作に割り当てられます。
主なコンテキストは以下の通りです。
| コンテキスト | 有効になる状況 |
|---|---|
Global | フォーカスに関係なく常時有効 |
Chat | チャット入力欄にフォーカスがあるとき |
Confirmation | 権限確認ダイアログが表示されているとき |
Autocomplete | 補完メニューが表示されているとき |
HistorySearch | 履歴検索(Ctrl+R)中 |
Transcript | トランスクリプト(ログ)を表示中 |
ModelPicker | モデルピッカーを開いているとき |
MessageSelector | rewind用のメッセージ選択UIを開いているとき |
変更したいコンテキストだけをkeybindings.jsonに書けばOKです。書かれていないコンテキストは標準設定のまま使われます。最小限の上書きにとどめるのが、トラブルを避けるコツです。
アクションとは
「アクション」は実際に実行される動作で、カテゴリ:動作名という形式の文字列です。代表的なものを挙げます。
| アクション | 標準キー | コンテキスト | 動作 |
|---|---|---|---|
chat:submit | enter | Chat | プロンプトを送信 |
chat:newline | ctrl+j | Chat | 改行を挿入 |
chat:clearInput | ctrl+l | Chat | 入力欄をクリア |
chat:cycleMode | shift+tab | Chat | 権限モードを切り替え |
chat:modelPicker | meta+p | Chat | モデルピッカーを開く |
chat:thinkingToggle | meta+t | Chat | 拡張思考のトグル |
chat:fastMode | meta+o | Chat | 高速モードのトグル |
chat:externalEditor | ctrl+g ほか | Chat | 外部エディタで入力を編集 |
history:search | ctrl+r | Global | 履歴検索を開く |
app:toggleTodos | ctrl+t | Global | タスクリストの表示切替 |
app:toggleTranscript | ctrl+o | Global | トランスクリプト表示切替 |
正確な動作の標準割り当ては環境やバージョンで変わることがあります。手元の割り当ては/doctor(後述)や公式ドキュメントで確認できます。ここに無い細かな既定キーを推測で決め打ちせず、設定で変更可能という前提で扱うのが安全です。
キーストロークの記法
キーの表記ルールを押さえておきましょう。修飾キーは+でつなぎます。
| 記法 | 意味 |
|---|---|
ctrl+k | Ctrl + K(controlも同義) |
shift+tab | Shift + Tab |
alt+enter | Alt + Enter(opt / optionも同義) |
meta+p | Cmd / Command(cmd / commandも同義) |
ctrl+shift+p | Ctrl + Shift + P |
特殊キーの名前は次の通りです。
| 記法 | キー |
|---|---|
escape / esc | Escape |
enter / return | Enter / Return |
tab | Tab |
space | スペース |
backspace / delete | Backspace / Delete |
up / down / left / right | 矢印キー |
ターミナルではaltとmetaが同一に扱われます。macOSでOptionキーがメタキーとして働かない場合は、ターミナル側の設定が必要です。設定方法はキーボードショートカット完全ガイドを参照してください。
よく使うリバインド例
ここからは実際の設定例を見ていきます。コピーして自分用に書き換えてください。
例1: 外部エディタのキーを変える
標準の外部エディタ呼び出し(ctrl+g)をctrl+eに移動したい場合は、古いキーをnullで無効化し、新しいキーを追加します。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+g": null,
"ctrl+e": "chat:externalEditor"
}
}
]
}
ここが重要なポイントです。ユーザーのバインドは標準設定の後ろに追加されるだけなので、新しいキーを足しただけだと古いキーも生き残ります。完全に「引っ越し」させたいなら、古いキーをnullで消すことを忘れないでください。
例2: 改行と送信のキーを使い分ける
「Enterは改行、別のキーで送信」にしたい人向けの例です。chat:newlineにEnterを割り当て、送信をmeta+enter(Cmd/Option + Enter)に寄せます。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"meta+enter": "chat:submit"
}
}
]
}
送信まわりのキーは誤爆の影響が大きい部分です。いきなり全部入れ替えるより、まずは送信キーを1つ追加して挙動を確かめ、慣れてから標準キーを無効化する、と段階的に進めると安全です。
例3: 誤爆しやすいキーを無効化する
「うっかり押すと困る」キーは、値をnullにすれば無効化できます。たとえば入力欄クリア(ctrl+l)を無効にするなら次のようにします。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+l": null
}
}
]
}
例4: グローバルなトグルを足す
タスクリストの表示切替(app:toggleTodos)に、標準キーとは別のキーを追加することもできます。Globalコンテキストに足せば、どの画面からでも使えます。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Global",
"bindings": {
"ctrl+shift+t": "app:toggleTodos"
}
}
]
}
チョード(連続キー)の設定
VS Codeのように、複数のキーを順番に押す割り当て(チョード)も書けます。スペース区切りで複数のキーストロークを並べます。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Global",
"bindings": {
"ctrl+k ctrl+t": "app:toggleTodos"
}
}
]
}
"ctrl+k ctrl+t"は「Ctrl+Kを押してからCtrl+Tを押す」という意味です。キーとキーの間には短いタイムアウトがあり、それを超えるとチョードはリセットされる仕様です(具体的な待ち時間は環境やバージョンで異なります)。
チョードは「単独のキーは温存しつつ、プレフィックス経由で機能を増やしたい」ときに便利です。ctrl+x ctrl+eのように、修飾キー+プレフィックスを起点にした多段の割り当てもできるので、単独キーを使い切ってしまった場合の逃げ道になります。
予約済み・競合に注意するキー
どんなキーでも自由に割り当てられるわけではありません。次のキーはターミナルやOSが先に処理するため、リバインドできない、または競合します。
| キー | 状況 |
|---|---|
ctrl+c | 中断(SIGINT)。再割り当て不可 |
ctrl+d | 終了(EOF)。再割り当て不可 |
ctrl+m | 端末上でEnterと同一のため不可 |
ctrl+z | プロセス一時停止(SIGTSTP)。競合の恐れ |
ctrl+\ | 終了シグナル(SIGQUIT)。動作しない |
cmd+c / cmd+v / cmd+x | macOSのコピー / 貼り付け / 切り取り |
cmd+q / cmd+w | macOSのアプリ終了 / ウィンドウを閉じる |
cmd+space / cmd+tab | Spotlight / アプリ切替 |
tmux(プレフィックスCtrl+B)やscreen(プレフィックスCtrl+A)を併用している場合、それらのキーをClaude Code側に割り当てると競合します。マルチプレクサのプレフィックスを変えるか、Claude Code側で別のキーを選びましょう。詳しくはキーボードショートカット完全ガイドのトラブルシューティング節を参照してください。
Vimモード
「キーバインドそのものをVim風にしたい」という人には、Claude Code標準のVimモードがあります。これはkeybindings.jsonとは別の仕組みで、入力欄の操作をVim流(ノーマル / インサート)にするものです。
有効化
Claude Code内で次のコマンドを実行するとトグルできます。
/vim
有効にすると、入力欄でEscからノーマルモードに入り、h / j / k / lの移動、ddの行削除、yyのヤンクなどVimの基本操作が使えます。具体的な操作一覧はキーボードショートカット完全ガイドのVimモード節にまとめてあります。
keybindings.jsonとの関係
VimモードとカスタムキーバインドはどちらもClaude Codeの操作系に関わるため、組み合わせるとキーの取り合いが起きることがあります。とくにノーマルモードの英字キー(d、y、pなど)と、Chatコンテキストに足したカスタムバインドが重ならないよう注意してください。
Vimモードで土台を作り、どうしても足りない操作だけkeybindings.jsonで補う、という役割分担が扱いやすいです。両方を一度に大改造すると、どちらが原因か切り分けにくくなります。
反映されない時の対処
設定したのに効かない、というときは次の順で確認しましょう。
1. JSONの構文を疑う
keybindings.jsonはJSONなので、末尾カンマ・クォート漏れ・括弧の閉じ忘れがあると全体が読み込まれません。エディタの構文チェックや$schemaの補完を活用してください。
2. 構造を確認する
ありがちなのが、外側と内側のbindingsの取り違えです。
{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor"
}
}
]
}
外側のbindingsは配列([...])、内側はオブジェクト({...})です。"bindings" must be an arrayのようなエラーが出たら、ここを見直します。
3. /doctorで検証する
Claude Codeの/doctorコマンドには「Keybinding Configuration Issues」という検証項目があり、設定ファイルの問題点を指摘してくれます。
| メッセージ例 | 原因 | 対処 |
|---|---|---|
"bindings" must be an array | 外側のbindingsが配列でない | 配列にする |
Unknown context "X" | コンテキスト名の誤り | 正しいコンテキスト名に直す |
Duplicate key "X" | 同一コンテキストでキー重複 | 重複を削除する |
Could not parse keystroke "X" | キー記法の誤り | +区切り・正しいキー名にする |
Invalid action for "X" | アクション値が不正 | 文字列またはnullにする |
Errorは修正必須、Warningは競合の可能性を示すもの(動く場合もある)と覚えておきましょう。
4. 予約キーでないか確認する
前述の予約済みキー(ctrl+cなど)に割り当てていないかを確認します。/doctorは予約キーへの割り当ても警告してくれます。
5. 古いキーが残っていないか
「新しいキーは効くのに、古いキーも反応してしまう」場合は、ユーザーバインドが追加である性質を思い出してください。引っ越しのつもりなら、古いキーをnullで無効化する必要があります。
よくある質問
keybindings.jsonはどこに置けばいい?

ホームディレクトリ配下の~/.claude/keybindings.jsonです。ファイルがなければ新規作成して構いません。Claude Code内で/keybindingsコマンドを実行すると、この設定ファイルを直接開けます。
設定したキーが効きません。何を見ればいい?

まずJSONの構文(末尾カンマやクォート漏れ)を確認し、次に外側のbindingsが配列・内側がオブジェクトになっているかをチェックします。/doctorコマンドの「Keybinding Configuration Issues」で具体的なエラー箇所を確認できます。
既存のキーバインドを無効にできますか?

できます。該当キーの値をnullにすればそのバインドが無効化されます。なお、新しいキーを追加しただけでは古いキーも残るため、完全に置き換えたいときは「古いキーをnull・新しいキーを追加」の両方を書いてください。
Ctrl+CやCmd+Cはリバインドできますか?

できません。Ctrl+C(中断)やCtrl+D(終了)はターミナルが処理する予約キーで、Cmd+CなどはmacOSのシステム操作に予約されています。これらに割り当てると/doctorが警告・エラーを出します。別のキーを選びましょう。
Vimモードとキーバインドのカスタマイズはどちらがおすすめ?

用途によります。入力欄の操作感を丸ごとVim流にしたいなら/vimでVimモードを使い、特定の操作だけ好みのキーに変えたいならkeybindings.jsonを使うのが扱いやすいです。両方を併用する場合は、ノーマルモードの英字キーとカスタムバインドが競合しないよう注意してください。
まとめ
今回はClaude Codeの**キーバインド設定(keybindings.json)**を体系的に学びました。
要点をまとめます。
| 項目 | 覚えておくこと |
|---|---|
| 場所 | ~/.claude/keybindings.json(/keybindingsで開ける) |
| 構造 | 外側bindingsは配列、内側bindingsはオブジェクト |
| 単位 | 「コンテキスト × キー → アクション」で考える |
| 無効化 | 値をnullにする |
| 引っ越し | 古いキーをnull・新しいキーを追加(両方必要) |
| チョード | スペース区切り(例: ctrl+k ctrl+t) |
| 検証 | 効かないときは/doctorで確認 |
まずは効きにくい1キーだけをリバインドして挙動を確かめ、慣れてきたら少しずつ自分好みに育てていくのがおすすめです。標準のショートカット自体を先に押さえておきたい人はキーボードショートカット完全ガイドを、セッションのやり直しを極めたい人はrewindとforkを、複数エージェントの並行作業に興味がある人はcmuxのマルチエージェントワークフローもあわせてどうぞ!
おすすめコース
関連記事
cmuxでClaude Code / Gemini CLI / Cursorを並列実行するマルチエージェント開発
cmuxでClaude CodeやGemini CLI、Cursorを並列実行するマルチエージェント開発の方法を、通知での進捗管理や実践ワークフローを交えて詳しく解説します。
Claude Codeのキーボードショートカット完全ガイド
Claude Codeで使える全キーボードショートカットを体系的に解説。基本操作からカスタマイズ、Vimモード、スラッシュコマンドまで、開発効率を最大化する方法を紹介します。
Claude Codeのrewindとfork:セッション管理を極める
Claude Codeのチェックポイント・rewind・fork・summarize機能を体系的に解説。コンテキスト管理を制して生産性を最大化する方法を学びます。


