Claude Codeでどこまでできる?

Claude Codeの使い方や連携を、実際に試してわかりやすく伝えるサイト

Claude Codeのキーバインド設定を変える方法—不便な操作だけ自分好みに直す

,
CC-095

Claude Codeをしばらく使っていると、キーボード操作に違和感が出てくる。Enterを押したら、書き途中の長文がそのまま送信されてしまった、Ctrl+Kが効かない——そういう「あるある」の正体は、キーバインド設定で解決できることが多い。全部を変えるのではなく、不便だと感じた1箇所だけを直す方法をまとめた。

この記事でやること

Claude Codeに最初から用意されているショートカットキーを押さえたうえで、自分が不便に感じている操作だけを設定ファイルに書いて変える手順をまとめる。全部カスタマイズするのではなく、気になる1箇所から始める方針で進める。

先に確認すること(前提条件)

始める前に押さえておくことが3つある。

バージョンの確認

Claude Code v2.1.18以降がインストール済みであること。ターミナルで次のコマンドを実行して、バージョン番号が表示されればOKだ。

claude --version

テキストエディタの準備

設定ファイルはJSON形式なので、JSONを開けるエディタ(メモ帳でも可)があれば問題ない。

設定ファイルの場所

Windowsでは %USERPROFILE%\.claude\keybindings.json に置かれる。~/.claude/keybindings.json という表記と同じ場所だ。これはステータスライン設定など他のカスタマイズファイルと同じディレクトリ構造になっている。

リセット方法

元に戻したくなったら、ファイルの内容を {"bindings":[]} に書き換えればデフォルトに戻る。空ファイルにするとJSONエラーになるので注意したい。

長文を入力しているつもりでEnterを押したら、そのまま送信されてしまった——こういう経験がある人は少なくない。これこそがキーバインド設定を自分好みに変える一番の動機になる。

最初に覚えるショートカット(基本6個)

変更の前に、デフォルトで何が割り当てられているかを押さえる。まずはこの6個を覚えれば十分だ。

操作 キー
送信 Enter
改行 Ctrl+J
入力キャンセル Escape
履歴検索 `Ctrl+R`
タスクリスト切替 `Ctrl+T`
外部エディタで開く `Ctrl+G`(または `Ctrl+X Ctrl+E`)

ここで一つ意外なのが、Enterが送信Ctrl+Jが改行という組み合わせだ。多くのチャットツールではShift+Enterで改行なので、Claude Codeに来ると最初は戸惑う。この「Enter = 送信」という挙動が、キーバインド設定に手を出すきっかけになる人も少なくない。

なお、Ctrl+C(割り込み)やCtrl+D(終了)など、一部のキーは変更できない。これについては後のセクションで詳しく触れる。

1個だけ変更してみる(最小の完成例)

大まかな流れは3ステップで終わる。

  1. /keybindings コマンドで設定ファイルを開く
  2. 変更したい操作を1つだけ書く
  3. 保存する(再起動は不要、保存した瞬間に反映される)

実際にやってみる。ターミナルで /keybindings と入力すると、設定ファイルが開く。初回はファイルがないため、新規作成される。

最初の完成例として、チャット入力中に Ctrl+E で外部エディタを開く設定を書いてみる。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+e": "chat:externalEditor"
      }
    }
  ]
}

構造はシンプルだ。

  • bindings 配列の中にブロックを並べる
  • 各ブロックは context(その設定が有効になる場面)と bindings(キーとアクションの対応)でできている
  • context は大文字始まりで書く。ここでは Chat(チャット入力中に有効)

このファイルを保存したら、チャット画面で Ctrl+E を押してみる。エディタが立ち上がれば成功だ。外部エディタを使えば、長い依頼文をエディタ側で落ち着いて編集できる。Claude Codeの出力そのものを取り出したい場合は、これまでどおり /copy/export を使う方が分かりやすい。

context には Chat のほかに Global(いつでも有効)がある。補完中や設定画面用のコンテキストもあるが、まずは ChatGlobal の2つで十分に思えるはずだ。

キーストロークの書き方(設定ファイルの記法)

設定ファイルに書けるキーの指定方法を整理する。

修飾キー

ctrl+alt+shift+meta+ のいずれかをキーの前に付ける。例えば ctrl+kalt+s のように書く。

大文字の指定

Shiftを使う場合は shift+a のように書く。

コード(複数キーの連続入力)

ctrl+x ctrl+k のようにスペースで区切って書くと、順番に押すコード入力になる。

特殊キー

enterescapetabupdown などが使える。

無効化(アンバインド)

アクションの代わりに null を指定すると、そのキーを無効にできる。

1ブロックに複数キーをまとめる

同じコンテキストの設定は1つのブロックにまとめられる。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+e": "chat:externalEditor",
        "ctrl+r": "history:search"
      }
    }
  ]
}

contextの補足

  • Chat:チャット入力中に有効
  • Global:いつでも有効

Ctrl+Kが効かない問題 設定ファイルに ctrl+k を書いたのに反応しない——という経験をした人は少なくない。原因は、Claude Code側の既定操作や、利用しているターミナル環境との競合にあることが多い。Ctrl+K は行末削除などの入力編集操作として使われることがあるため、うまく動かない場合は Ctrl+EAlt+E など、別のキーに変える方が早い。修飾キーを組み合わせる際は、ターミナルとの競合に気をつける必要がある。

冒頭で触れた「Enterで送信されてしまう問題」について。Enterの送信動作自体はキーバインドで変えられないが、Ctrl+J で改行できるので、長文をよく書くならこの組み合わせに慣れておくと入力の感覚が変わる。

よくあるカスタマイズ例

実際によく使われる3つのパターンを紹介する。

パターン1: 外部エディタを別のキーに割り当てる

デフォルトの Ctrl+G ではなく Ctrl+E で開きたい場合は、前のセクションで紹介したJSONをそのまま使える。ctrl+e の部分を好みのキーに変えればよい。

パターン2: 履歴検索のキーを変更する

Ctrl+R の代わりに Ctrl+H で履歴検索を開きたい場合。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+h": "history:search"
      }
    }
  ]
}

パターン3: 不要なショートカットを無効化する

タスクリストの切替(Ctrl+T)を使わないので無効にしたい場合。null を指定する。

{
  "bindings": [
    {
      "context": "Global",
      "bindings": {
        "ctrl+t": null
      }
    }
  ]
}

どの例も1キーだけのシンプルな設定だ。複数の変更をまとめたい場合は、前のセクションで紹介したように1つのブロックにまとめて書けばよい。

うまくいかない時だけ確認ポイント

設定を保存したのに反映されない、キーが効かない——そんな時の切り分け方をまとめる。

JSONの書式エラー

カンマの忘れや括弧の対応ミスがあると、ファイルが読み込まれない。保存前にカッコの数を数えるだけでも大半は防げる。設定ファイルが正しく読み込まれない場合、/doctorコマンドを使って設定ファイルの検証ができる。

ターミナル側でキーが奪われている

キーを押しても何も起きない場合、ターミナル自体がそのキーを処理している可能性がある。

キー 競合するツール
Ctrl+K Windows Terminalで「行末まで削除」として処理されやすい
Ctrl+B tmuxのプレフィックスと競合する
Ctrl+A screenのプレフィックスと競合する

この場合、別のキーに変更するか、ターミナル側のショートカット設定を見直す必要がある。

変更できない予約済みキー

次のキーは予約済みで、キーバインド設定で再割り当てできない。

  • Ctrl+C:割り込み(実行中の処理を止める)
  • Ctrl+D:EOF(セッションを終了する)
  • Ctrl+M:Enterと同等の動作

これらを設定ファイルに書いても反映されない。Ctrl+C をコピーに割り当て直しても効かないのはこのためだ。

Vimモードを使っている場合

Vimキーバインドを有効にしていると、Escapechat:cancel ではなく INSERTモードからNORMALモードへの切替になる。この挙動に気づかないと「Escapeでキャンセルできない」と混乱しやすい。

最後に確認すること

設定が終わったら、実際にキーを押して意図した動作になるか確認する。ダメならJSONの書式を見直す。

デフォルトに戻したくなったら、ファイルの内容を {"bindings":[]} に書き換えればよい。

「Enterで送信されてしまう」問題は、まず Ctrl+J で改行する使い方に慣れるのが一番安全だ。Enter周りの割り当てを変えることも考えられるが、ターミナル環境によって挙動差が出やすいので、Windows初心者はまず標準の Ctrl+J を使う方が迷いにくい。それでも不便なら Ctrl+E に外部エディタを割り当ててみる——これだけでも入力の感覚が変わる。

関連記事