Claude Media
Claude Codeのkeybindingsでchordを組む — 複数キー連続入力の書き方

Claude Codeのkeybindingsでchordを組む — 複数キー連続入力の書き方

Claude Codeのkeybindings.jsonでスペース区切りのchordsを組む書き方と、3秒ルール、既定のctrl+x系chord、プレフィックスの解除手順をまとめます。

Claude Codeのkeybindings.jsonでは、ctrl+k ctrl+sのようにスペースで区切ってキー入力を並べると、複数キーを順に押して1つの操作を呼び出せます。この連続入力がchord(コード)です。修飾キーの組み合わせが足りなくなったとき、同じキーを「接頭辞」にして操作を増やせるのが利点になります。

この記事が扱うのは、chordの書き方・3秒の待ち時間・既定で入っているchord・接頭辞の扱いです。既定ショートカットの一覧と基本的なkeybindings.jsonの手順はClaude Codeショートカット一覧にあります。

chordはスペース区切りで書き、3秒以内に押し切る

chordは、キーストロークをスペースで区切った並びです。公式の例は次の1行です。

ctrl+k ctrl+s   Press Ctrl+K, release, then Ctrl+S

Ctrl+Kを押して離し、続けてCtrl+Sを押す、という意味になります。同時押しのctrl+shift+cのような書き方は+でつなぎ、順番に押すchordは空白でつなぐ、と覚えると混同しません。

制限時間は3秒です。各キーストロークは直前のキーから3秒以内に押す必要があり、超えるとchordはキャンセルされて、その旨の短い通知が出ます。途中まで押して迷ったときは、そのまま待てば取り消されます。

3秒の値を変える設定は、keybindingsの公式ページには記載がありません。長めに待ちたい用途では、キーを押す順番を体に覚えさせる前提で組むことになります。

キー名や修飾キーの書き方は、単独のバインドと同じです。修飾キーにはctrl・shift・alt(opt、metaも同義)・cmdがあり、特殊キーはescape・enter・tab・space・矢印キーなどを使います。キー名は大文字小文字を区別せず、Kとkは同じバインドです。

自作のchordを1本追加する

設定ファイルは~/.claude/keybindings.jsonです。/keybindingsを実行すると、ファイルが作られて開きます。書き換えた内容は、Claude Codeを再起動しなくても自動で検出されて反映されます。

次の例は、Chatコンテキストにchordを3つ追加する形です。キーの組み合わせは説明用に選んだもので、割り当て先のアクション名は実在するものを使っています。

{
  "$schema": "https://www.schemastore.org/claude-code-keybindings.json",
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+k ctrl+p": "chat:modelPicker",
        "ctrl+k ctrl+t": "chat:thinkingToggle",
        "ctrl+k ctrl+e": "chat:externalEditor"
      }
    }
  ]
}

書き方は単独のキーと変わりません。bindingsの中で、キーの文字列をchordの形にするだけです。chat:modelPickerは既定でMeta+P、chat:thinkingToggleは既定でMeta+Tに割り当てられているアクションです。

同じctrl+kを接頭辞にしてctrl+p・ctrl+t・ctrl+eと分岐させる形にすると、モデル・思考・エディターといった「設定系の操作」を1つのキーの下にまとめられます。Ctrlだけで揃うので、Meta系のキーに頼りません。

既定で入っているchordはctrl+xが接頭辞

Claude Codeには、最初からchordが入っています。接頭辞はすべてctrl+xで、コンテキストごとに次のとおりです。

chordコンテキストアクション必要なバージョン
ctrl+x ctrl+kコンテキストChatアクションchat:killAgents必要なバージョン記載なし
ctrl+x ctrl+eコンテキストChatアクションchat:externalEditor必要なバージョン記載なし
ctrl+x enterコンテキストChatアクションchat:queueSubmit必要なバージョンv2.1.247以降
ctrl+x ctrl+sコンテキストChatアクションchat:sendNow必要なバージョンv2.1.275以降
ctrl+x ctrl+bコンテキストTaskアクションtask:background必要なバージョン記載なし
ctrl+x bコンテキストDiffPanelアクションapp:cycleDiffBase必要なバージョンv2.1.260以降

この表のほかに、Chatコンテキストのctrl+x ctrl+aとctrl+x tabも既定のchordで、どちらもv2.1.260以降で使えます。この2つの割り当て先は、公式のキーバインド一覧の表からは確認できませんでした。

ctrl+x ctrl+bは、tmuxの接頭辞Ctrl+Bと衝突する問題を避けるための代替として用意されています。tmuxを使っていて、バックグラウンド化のCtrl+Bが効かないときは、このchordが使えます。ctrl+x ctrl+sも同じ考え方で、端末が拡張キーを報告しない環境ではCtrl+Enterが通常のEnterとして届くため、どの端末でも動くのはこちらです。

ctrl+x ctrl+eは外部エディターを開くchordで、単独のctrl+gと並ぶ2つ目の割り当てです。ただしAgent viewでは、キー入力が1ストロークごとに処理されるため、このchordではエディターが開きません。

接頭辞を単独のキーとして使い直すには全部解除する

既定のchordは、nullを割り当てると解除できます。chordにも同じ書き方が使えます。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+x ctrl+k": null
      }
    }
  ]
}

ここで落とし穴になるのが接頭辞です。接頭辞を共有するchordを一部だけ解除しても、残りが1つでもあれば、そのキーを押した時点でchord待ちの状態に入ります。ctrl+xを単独のキーとして使いたいなら、共有するchordをすべて解除しなければなりません。

さらに、chordはアクティブなコンテキストのどれかにあれば接頭辞を予約したままにします。そのため、解除はchordを定義しているコンテキストごとに行います。ctrl+xの場合は、Chatだけでなく、TaskとDiffPanelにも既定のchordがあります。

ctrl+xを丸ごと取り戻して、たとえばchat:newlineに割り当てる設定は次のとおりです。

{
  "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 ctrl+s": null,
        "ctrl+x tab": null,
        "ctrl+x": "chat:newline"
      }
    }
  ]
}

解除の対象は、公式が列挙している8つです。新しいバージョンで既定のchordが増えると、この一覧に足りないものが出る可能性があります。解除したはずなのにchord待ちに入るときは、ctrl+xを接頭辞とする既定のchordが増えていないかを、公式のキーバインド一覧で確かめてください。

未解決のchordとテキスト入力欄の関係

chordの2打目には、少し特別な扱いがあります。ダイアログやパネルの中にあるテキスト欄(Claudeの質問に答える「Other」欄など)では、素の文字キーは、そのまま入力欄に入り、バインドとは照合されません。

ただし例外があり、CtrlやAltを伴うキー、EnterやEscapeのような文字を入力しないキー、そして「すでに始まっているchordの2打目」は、入力欄にフォーカスがあってもバインドが働きます。つまり、素の文字を2打目に使うchord(ctrl+x bのbなど)も、始まったあとなら期待どおりに届きます。

メインのプロンプトでは、すべてのキーがアクティブなコンテキスト(Chatなど)と照合されます。バインドに取られなかったキーだけが、文字として入力されます。

Vimモードの2キーは別の設定で組む

VimモードでjjをEscapeに割り当てたいとき、chordのj jと書けばよさそうに見えますが、そうはなりません。Vimのキーはkeybindings.jsonでは再割り当てできず、INSERTモードの2キー連続入力には専用の設定vimInsertModeRemapsが用意されています。

比較keybindings.jsonのchordvimInsertModeRemaps
書く場所keybindings.jsonのchord~/.claude/keybindings.jsonvimInsertModeRemaps~/.claude/settings.json
待ち時間keybindings.jsonのchord3秒vimInsertModeRemaps1秒
割り当て先keybindings.jsonのchord各コンテキストのアクションvimInsertModeRemapsEscapeのみ("<Esc>")
キーの条件keybindings.jsonのchord修飾キー・特殊キーも可vimInsertModeRemaps印字可能な文字2つ

設定例は次のとおりです。

{
  "editorMode": "vim",
  "vimInsertModeRemaps": { "jj": "<Esc>" }
}

1打目のjは、いったん普通に入力されます。1秒以内に2打目を押すと、そのjが取り消されてNORMALモードに切り替わり、入力欄には何も残りません。1秒を超えるか別のキーが続くと、2文字はそのまま文字として残ります。この設定はv2.1.208以降で、ユーザー設定・--settingsフラグ・管理設定からだけ読み込まれます。プロジェクトの.claude/settings.jsonに書いても無視されるため、取得したリポジトリがキー入力を書き換えることはありません。Vimモード全体の操作はClaude CodeのVimモードにまとめています。

chordを組むときに避けたいキー

chordの途中や接頭辞に使いにくいキーは次のとおりです。

  • 予約済みのキー: Ctrl+C(中断)・Ctrl+D(終了)・Ctrl+M(常にEnterとして届く)・Ctrl+[(常にEscapeとして届く)・Ctrl+I(常にTabとして届く)・Caps Lockは変更できません。Ctrl+Hも、Windowsでの扱いが端末と環境変数に左右されます
  • 端末側の接頭辞: Ctrl+Bはtmux、Ctrl+AはGNU screenの接頭辞と重なります。Ctrl+Zはプロセスの一時停止(SIGTSTP)にあたります
  • cmd系の修飾キー: cmd・super・winは、Kitty keyboard protocolやxtermのmodifyOtherKeysに対応した端末でしか検出されません。どこでも動かすならctrlかmetaで組みます
  • 非US配列: Ctrlのショートカットは、有効な配列がキリル文字などでも、キー名をラテン文字で書きます

2打目も1打目と同じくctrlかmetaの修飾キーで組むと、cmd系のように端末の対応状況に左右されることがありません。複数行入力のキー設定で端末ごとの違いに当たる場合は、Claude Code複数行入力のShift+Enter対応表が参考になります。

Claude Codeにchordの設定を書かせる

keybindings.jsonはJSONなので、Claude Codeに追加を頼めます。頼むときは、割り当てたいアクションと、避けたい既存のキーを具体的に伝えるのが確実です。

~/.claude/keybindings.json に、Chatコンテキストで
ctrl+k ctrl+p を chat:modelPicker に割り当てるchordを追加して。
既存のバインドと、ctrl+x 系の既定chordは変えないこと。

書き終えたら、実際にctrl+kを押して3秒以内にctrl+pを押し、モデルピッカーが開くかどうかを確かめます。3秒待ってからの2打目でキャンセル通知が出ることも、あわせて試しておくと挙動がつかめます。

chordが反応しないときは、アクション名の綴り違いを疑います。登録されていないアクション名のバインドは、読み込み時に警告付きでスキップされ、そのキーは既定の割り当てのままになります。v2.1.246より前は、未知のアクション名がそのキーを気づかないうちに無効化していました。同じコンテキスト内の重複バインドや、予約済みショートカットとの衝突も警告の対象です。警告の詳細は、claude --debugで起動するとデバッグログで確認できます。

よくある質問

chordの3秒を過ぎるとどうなりますか

Claude Codeがchordをキャンセルし、キャンセルしたことを示す短い通知が出ます。最初の1打目からやり直します。

chordに使えるキーの数に上限はありますか

keybindingsの公式ページには、chordの長さの上限に関する記載はありません。公式の例と既定のchordは、すべて2キーです。

まとめ

chordは、スペースで区切った複数のキーストロークで、3秒以内に順に押すと動きます。既定のchordはすべてctrl+xを接頭辞にしていて、ctrl+xを単独のキーに戻すには、Chat・Task・DiffPanelの各コンテキストにあるchordをすべてnullで解除しなければなりません。Vimのjjのような2キーは、chordではなくvimInsertModeRemapsの役目です。

キーバインドの機能そのものが追加されたバージョンの背景はClaude Code v2.1.18のリリースノートで確認できます。

この記事を共有:XはてブLinkedIn