メインコンテンツへスキップ
中級9分で読める

Claude Codeのキーバインド設定(keybindings.json)完全ガイド

Claude Codeのキーバインドをkeybindings.jsonでカスタマイズする方法を、設定ファイルの場所・書式・よく使うリバインド例・vimモードまで詳しく解説します。

効率化Claude Codeキーバインドkeybindings設定効率化

🎯 この記事で学べること

  • 1
    keybindings.jsonの場所とJSONの基本構造を理解できます
  • 2
    コンテキストとアクションの考え方を把握し、安全にリバインドできます
  • 3
    よく使うカスタマイズ例(送信キー変更・無効化など)を実装できます
  • 4
    チョード(連続キー)バインドの書き方がわかります
  • 5
    Vimモードや反映されない時の対処法を身につけられます

読了時間: 約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モデルピッカーを開いているとき
MessageSelectorrewind用のメッセージ選択UIを開いているとき

変更したいコンテキストだけをkeybindings.jsonに書けばOKです。書かれていないコンテキストは標準設定のまま使われます。最小限の上書きにとどめるのが、トラブルを避けるコツです。

アクションとは

「アクション」は実際に実行される動作で、カテゴリ:動作名という形式の文字列です。代表的なものを挙げます。

アクション標準キーコンテキスト動作
chat:submitenterChatプロンプトを送信
chat:newlinectrl+jChat改行を挿入
chat:clearInputctrl+lChat入力欄をクリア
chat:cycleModeshift+tabChat権限モードを切り替え
chat:modelPickermeta+pChatモデルピッカーを開く
chat:thinkingTogglemeta+tChat拡張思考のトグル
chat:fastModemeta+oChat高速モードのトグル
chat:externalEditorctrl+g ほかChat外部エディタで入力を編集
history:searchctrl+rGlobal履歴検索を開く
app:toggleTodosctrl+tGlobalタスクリストの表示切替
app:toggleTranscriptctrl+oGlobalトランスクリプト表示切替

正確な動作の標準割り当ては環境やバージョンで変わることがあります。手元の割り当ては/doctor(後述)や公式ドキュメントで確認できます。ここに無い細かな既定キーを推測で決め打ちせず、設定で変更可能という前提で扱うのが安全です。

キーストロークの記法

キーの表記ルールを押さえておきましょう。修飾キーは+でつなぎます。

記法意味
ctrl+kCtrl + K(controlも同義)
shift+tabShift + Tab
alt+enterAlt + Enter(opt / optionも同義)
meta+pCmd / Command(cmd / commandも同義)
ctrl+shift+pCtrl + Shift + P

特殊キーの名前は次の通りです。

記法キー
escape / escEscape
enter / returnEnter / Return
tabTab
spaceスペース
backspace / deleteBackspace / Delete
up / down / left / right矢印キー

ターミナルではaltmetaが同一に扱われます。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+xmacOSのコピー / 貼り付け / 切り取り
cmd+q / cmd+wmacOSのアプリ終了 / ウィンドウを閉じる
cmd+space / cmd+tabSpotlight / アプリ切替

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の操作系に関わるため、組み合わせるとキーの取り合いが起きることがあります。とくにノーマルモードの英字キー(dypなど)と、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で無効化する必要があります。

よくある質問

Q.1

keybindings.jsonはどこに置けばいい?

先生
A.

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

Q.2

設定したキーが効きません。何を見ればいい?

先生
A.

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

Q.3

既存のキーバインドを無効にできますか?

先生
A.

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

Q.4

Ctrl+CやCmd+Cはリバインドできますか?

先生
A.

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

Q.5

Vimモードとキーバインドのカスタマイズはどちらがおすすめ?

先生
A.

用途によります。入力欄の操作感を丸ごと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のマルチエージェントワークフローもあわせてどうぞ!