Claude Codeのデフォルトキー操作(Enter送信・Ctrl+J改行など)が手元の打ち方と合わない人向け
Claude Codeの「Enterで送信/Ctrl+Jで改行/Ctrl+Oで履歴ビュー」のようなデフォルトのキー対応が手元の打ち方と合わなくて変更したい時に <code>/keybindings</code> を叩いて、開いたファイルに <code>context</code> と <code>bindings</code> を書き込んで保存する。保存と同時に反映されてClaude Code側の再起動は要らない。
Claude Codeのデフォルトキー操作が手元の打ち方と合わない時、設定ファイルを開いて好きなキーに割り当て直すためのスラッシュコマンドが /keybindings です。送信が Enter で改行が Ctrl+J というデフォルトの組み合わせを、手元の打ちぐせに合わせて入れ替えたい人向けに用意されています。VS Code・Cursor など一部の端末では /terminal-setup を先に適用すると Shift+Enter で改行できるようになります。
料理ブログの下書きをClaude Codeのチャット欄に書いていて、「改行のつもりで Enter を押したら送信されてしまった」「Ctrl+J は親指の置き場と合わなくて打ちにくい」みたいな摩擦が出てくる場面で叩く設定コマンドです。
噛み砕くと
パソコンのキーボード設定を、アプリ単位で書き換える小さなノートを開くようなコマンドです。Claude Codeには「Enterで送信」「Ctrl+Jで改行」「Ctrl+Oで履歴ビューを開く」みたいな初期設定が入っていて、その対応表を1ファイルにまとめた ~/.claude/keybindings.json をエディタで開いてくれます。
普段使いのキーボードショートカット表に消しゴムをかけて書き直す感覚です。何かを実行するコマンドではなく、編集セッションへの入り口です。
大事な前提:このコマンドは v2.1.18 以降でしか動かない
キーバインド設定そのものが Claude Code v2.1.18 から追加された機能です。古いバージョンで叩いても何も起きません。手元のバージョンは次の1行で確認できます。
$ claude --version
2.1.18 より前の数字が返ってきたら、まず Claude Code を最新版にアップデートしてからこのコマンドを使ってください。
「料理ブログ cooking-blog」で実際の手順を見る
Hugoで作った料理ブログ ~/projects/cooking-blog でレシピ記事の下書きをClaude Codeに書かせていて、「改行したいのに Enter を押すと送信される」「デフォルトの改行キー Ctrl+J は親指の運びが悪くて打ちにくい」と感じたところから始めます。デフォルトでも改行自体は Ctrl+J で出せますが、ここでは Enter と Ctrl+J の役割を入れ替えてみます。VS Code・Cursor・Windsurf・Alacritty・Zed をお使いの場合は、先に /terminal-setup を当てておくと Shift+Enter でも改行できるようになります。
ステップ1: cooking-blog フォルダでClaude Codeを起動
ターミナルでフォルダに移動して、Claude Codeを立ち上げます。
$ cd ~/projects/cooking-blog
$ claude
チャット欄が出てきたら、適当に何か書いてみて打ちぐせを確認してください。たとえばレシピの見出しを書いている途中で改行しようと Enter を押すと、その時点で送信されます。これが「Enter送信」のデフォルト挙動です。改行を出したい時は Ctrl+J を押すと送信されずに次の行へ移ります。
ステップ2: /keybindings を叩いて設定ファイルを開く
チャット欄の先頭に /keybindings を打ち込んで Enter を押します。
> /keybindings
Claude Codeが ~/.claude/keybindings.json という設定ファイルを、お使いの環境のテキスト編集アプリで開きます。まだファイルがなければその場で作ってくれます。初回はほぼ空っぽの状態で開くはずです。
ステップ3: 改行と送信を入れ替える設定を書く
ここからが本番です。改行用の chat:newline を Enter に、送信用の chat:submit を Shift+Enter に入れ替えてみます。ファイルに次の内容を貼り付けて保存します。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"enter": "chat:newline",
"shift+enter": "chat:submit"
}
}
]
}
意味は「チャット入力欄のとき、Enter は改行、Shift+Enter は送信に変える」です。context が「どの画面のとき」、bindings 配下の文字列が「キー打鍵 → 対応する動作の名前」の対応表になっています。Shift+Enter を実際に端末から送るには、VS Code・Cursor などで /terminal-setup を一度当てておく必要があります。
ステップ4: 設定が反映されているか確認
ファイルを保存したら、Claude Code側の操作は何も要りません。再起動も不要です。チャット欄に戻ってレシピの下書きを書きながら Enter を押してみると、今度は送信されずに次の行へ移ります。送信したい時は割り当て直した chat:submit のキーを押します。前段の /terminal-setup を当て済みの環境なら Shift+Enter で送信できますが、当てていない環境では Shift+Enter は反応しないので、その時は keybindings.json で chat:submit を Ctrl+Enter 等に振り直してください。
これで料理ブログの記事下書きを、改行しながら一気に書ききって最後にまとめて送る打ち方ができるようになります。
つまり /keybindings は何をしてくれるのか
- やってくれる: 設定ファイル
~/.claude/keybindings.jsonをテキスト編集アプリで開く。なければ作る。書き換えて保存すると即時反映、Claude Codeの再起動不要 - やってくれる: 公式が用意している動作名の中から好きなものを、好きなキー打鍵に割り当て直す。動作名は
chat:submitchat:newlineapp:toggleTodostranscript:toggleShowAllのように20以上のグループに分かれている - やってくれない: 動作名そのものを新しく作ること。割り当てられるのは公式が定義済みのactionだけで、自前の関数は呼べない
- やってくれない: Ctrl+C・Ctrl+D・Ctrl+M・Caps Lock の割り当て変更。Ctrl+M はターミナル上で Enter と同じ信号として扱われるため、公式に「Reserved」として固定されている
- 意味が薄い場面: デフォルトのキー配置で特に不便を感じていないとき。動かす理由がないので設定ファイルを作らなくていい
使いどころ3シナリオ
シナリオ1: 料理ブログのレシピを長文で書きたいとき
cooking-blogのレシピ記事を書く時、材料リストと手順を一気に箇条書きで打ち込みたい場面があります。デフォルトのEnter送信だと、1行ごとに送信されて細切れの返答が返ってくる。改行は Ctrl+J で出せるものの、左小指の Ctrl と人差し指の J を同時押しするのは打ち続けると地味に疲れます。/keybindings で Enter を chat:newline、Shift+Enter を chat:submit に入れ替えると、料理本のように改行リズムで原稿を書いてからまとめて送れます。私はこの設定を入れてから、レシピ1記事ぶんの下書きを1往復で済ませられるようになりました。
シナリオ2: コピー&ペースト系を別キーに逃がしたいとき
ターミナルでテキストを選択して Ctrl+C でコピーする打ちぐせがある人だと、Claude Codeの「Ctrl+C で生成中断」と被って、生成途中の応答を何度も止めてしまうことがあります。ただし Ctrl+C は公式に Reserved 指定されているので変更できません。代わりに、普段Ctrl+Cで呼んでいた別アクションのほうを動かす逃がし方になります。たとえば既定で Escape に当たっている chat:cancel に Ctrl+Q を割り当てて、Escape を別用途に空ける、といった逃がし方が現実的です。
シナリオ3: 履歴ビューの操作キーを vim 風にしたいとき
Ctrl+O で履歴ビューを開いた後、既定で Ctrl+E に当たっている transcript:toggleShowAll や、既定で q・Ctrl+C・Escape の3つに当たっている transcript:exit を、vim 風に i と q に統一する、みたいな細かい調整もこのファイルでできます。料理ブログのチームに同じ設定ファイルを配って統一する、という運用にも使えます。
初心者が踏みやすい落とし穴
- JSONの書き間違いで設定がまるごと無効になる。カンマの抜け、末尾の余分なカンマ、ダブルクオートの閉じ忘れがあると、保存しても反映されません。
/doctorを叩くと、書式エラーや動作名の誤りを警告で教えてくれます - Shift+Enter はデフォルトでは効かない。Claude Code単体の初期設定では、改行は Ctrl+J、送信は Enter です。Shift+Enter で改行できるのは
/terminal-setupを VS Code・Cursor・Windsurf・Alacritty・Zed のいずれかに適用したあとの話で、それ以前は/keybindingsで Shift+Enter に何を割り当てても端末に飲み込まれて届きません - macOSで Option キーを使う書き方は端末側の設定が要る。
meta+pのような Meta 修飾を書いても、iTerm2やApple Terminalで「Use Option as Meta Key」をオンにしていないと打鍵自体が届きません。設定だけ書いても無反応な場合、まず端末側を確認してください - ターミナル多重化ツールにキーを横取りされる。tmuxの Ctrl+B、GNU screenの Ctrl+A、Unixの Ctrl+Z は、Claude Codeに届く前にそっちで吸われます。tmux環境で
task:backgroundを使うとき、既定の Ctrl+B が tmux に吸われるので2回連打が必要、という公式の注意がここです - Reserved の4つは何をどう書いても変わらない。Ctrl+C / Ctrl+D / Ctrl+M / Caps Lock は変更不可です。「Ctrl+Cを別用途にしたい」と思って設定を書いても適用されません。先に Reserved 一覧を確認してから組み立ててください
- chord(連打)の途中だけを空けると、残りの連打を待ってしまう。たとえば既定の
chat:killAgentsに割り当たっているctrl+x ctrl+kの片方だけをnullで外しても、Ctrl+X を押した瞬間に「次の打鍵を待つ」モードに入ります。Ctrl+X を単独キーとして使いたいなら、Ctrl+X 始まりの連打を全部nullで外す必要があります /terminal-setupと混同しがち。/terminal-setupは「VS Code・Cursor・Windsurf・Alacritty・Zed で Shift+Enter が効くようにする」ための、端末アプリ側の設定変更です。一方/keybindingsは Claude Code内のキー対応表を書き換えるもの。レイヤーが違うので、Shift+Enter を使いたいならまず/terminal-setupで端末側の下地を整えてから/keybindingsでClaude Code内の対応を調整する、の順が安全です
書き方
/keybindings
やってみるとこうなる
入力
> /keybindings
出力例
(テキスト編集アプリで <code>~/.claude/keybindings.json</code> が開く。ファイルが無ければ新規作成される。最小例は次の中身を保存することで、Enterで改行・Shift+Enterで送信に入れ替わる。Shift+Enter を実際に端末から送るには事前に <code>/terminal-setup</code> を当てておく必要がある)
<pre><code>{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"bindings": [
{
"context": "Chat",
"bindings": {
"enter": "chat:newline",
"shift+enter": "chat:submit"
}
}
]
}</code></pre>
このページに出てきた言葉
- context
- 設定ファイル内の指定項目。「どの画面でのキー打鍵か」を表す。Chat(チャット入力欄)/Transcript(履歴ビュー)/Global(全画面共通)など20種ほどある
- action
- Claude Code側の機能につけられた名前。<code>chat:submit</code> <code>chat:newline</code> <code>app:toggleTodos</code> のように <code>グループ名:機能名</code> の形で書かれていて、好きなキー打鍵に割り当て直せる
- Reserved
- 公式が割り当て変更を禁止しているキー打鍵。Ctrl+C / Ctrl+D / Ctrl+M / Caps Lock の4つ。書き換えても反映されない
- chord
- <code>ctrl+x ctrl+k</code> のように、空白区切りで2連打以上を1つの打鍵として扱う書き方
- Meta修飾
- <code>meta+p</code> のような形で書かれる修飾キー。macOSでは Option キー、Windows/Linux では Alt キーに対応する
- /terminal-setup
- VS Code・Cursor・Windsurf・Alacritty・Zed の端末アプリ側設定を書き換えて Shift+Enter の打鍵をClaude Codeまで届くようにするスラッシュコマンド。Claude Codeのデフォルト改行キーはあくまで Ctrl+J で、Shift+Enter で改行できるのはこのコマンドを当てた後の話