Claude Code複数行入力 — ターミナル別Shift+Enter対応表とハマりどころ
Claude Codeで改行だけ入れて送信しない4つの方法と、Shift+Enterがターミナルごとに効いたり効かなかったりする理由をまとめます。
Claude Codeでは、Enterキーを押すとその場でメッセージが送信されます。改行だけ入れたいときはCtrl+Jか、\を打ってからEnterを押します。どちらもセットアップなしで全ターミナルで動きます。Shift+Enterも使えますが、ターミナルによって挙動が分かれ、何もしないと入力欄に文字を積んだままEnterで即送信されてしまうことがあります。
改行だけ入れる4つの方法
Claude Codeの入力欄で改行を挿入する方法は主に4つあります。用途とセットアップの要不要で使い分けます。
| 方法 | キー操作 | セットアップ | 備考 |
|---|---|---|---|
| クイックエスケープ | キー操作\ を打ってからEnter | セットアップ不要 | 備考全ターミナルで動く |
| 制御シーケンス | キー操作Ctrl+J | セットアップ不要 | 備考全ターミナルで動く。最も確実 |
| Shift+Enter | キー操作Shift+Enter | セットアップターミナル依存 | 備考次節の対応表を参照 |
| Optionキー | キー操作Option+Enter | セットアップmacOSで「Option as Meta」を有効化 | 備考ターミナルごとに設定場所が異なる(後述) |
どのターミナルでも確実に動くのはCtrl+Jです。新しい環境に切り替えるたびにShift+Enterの挙動を確認し直すのが面倒なら、これ1つを覚えておけば足ります。ペーストで複数行のコードブロックやログをそのまま貼り付けた場合は、貼り付け自体が改行を保持するため、この4つの操作は不要です。
ペーストで複数行を貼るときは操作不要
エディタで書いた複数行のプロンプトやログをそのままペーストする場合、Claude Codeはペースト内の改行をそのまま入力欄に反映します。Ctrl+Jや\+Enterのようなキー操作を挟む必要はなく、貼り付けた直後のEnterで初めて送信されます。ただしペーストが800字を超えるか2行を超えると、入力欄の表示は[Pasted text #1 +120 lines]のようなプレースホルダーに折りたたまれます。表示が短くなるだけで送信内容は変わりませんが、詳しい挙動はClaude Codeの貼り付け挙動にまとめています。
Shift+Enterが効くターミナル・効かないターミナル
Shift+Enterでの改行は、ターミナルエミュレーターが独自の拡張キーコードを送っているかどうかで結果が変わります。対応状況は3段階に分かれます。
| 対応状況 | 該当ターミナル |
|---|---|
| 何もせず動く | 該当ターミナルGhostty / Kitty / iTerm2 / WezTerm / Warp / Apple Terminal / Windows Terminal |
/terminal-setupが必要 | 該当ターミナルVS Code / Cursor / Devin Desktop / Alacritty / Zed |
対応なし(Ctrl+Jか\+Enterを使う) | 該当ターミナルgnome-terminal / JetBrains系IDE(PyCharm、Android Studioなど) |
VS Code・Cursor・Devin Desktop・Alacritty・Zedの統合ターミナルは、キーバインドを一度書き込むまでShift+Enterがそのままメッセージ送信として扱われます。gnome-terminalとJetBrains系IDEのターミナルは、そもそも拡張キーコードの伝達に対応していないため/terminal-setupでも解決せず、Ctrl+Jか\+Enterに頼るしかありません。
tmux配下で作業している場合は要注意です。外側のターミナルがShift+Enterに対応していても、tmuxを経由すると次節の設定を別途入れない限り効きません。
/terminal-setupを実行すると何が起きるか
対象ターミナルの中で/terminal-setupを実行すると、Shift+Enterなどのキーバインドがそのターミナルの設定ファイルへ書き込まれます。
/terminal-setup初回実行時はInstalled VSCode terminal Shift+Enter key bindingのような確認メッセージが表示されます。既に設定済みの場合はVSCode terminal Shift+Enter key binding already configuredと表示され、既存のバインドは上書きされません。tmuxやscreenの中からではなく、ホスト側のターミナルで直接実行する必要があります。設定ファイルへの書き込み先は起動元のターミナルを見て判定されるためです。
VS Code・Cursor・Devin Desktopでは、/terminal-setupがもう2つのエディタ設定も同時に変更します。1つはterminal.integrated.gpuAccelerationを"off"にする設定で、統合ターミナルで文字化けが起きるのを防ぎます。もう1つはterminal.integrated.mouseWheelScrollSensitivityの調整で、フルスクリーンレンダリングでのスクロールを滑らかにします。GPUアクセラレーションの変更を元に戻したい場合は、設定を"auto"へ戻してウィンドウを再読み込みします。
tmux内でShift+Enterを使うには
外側のターミナルがShift+Enterに対応していても、tmuxを経由すると素通りしません。tmuxが独自にキーイベントを解釈するため、~/.tmux.confに以下の3行を追記し、tmux source-file ~/.tmux.confで反映させる必要があります。
set -g allow-passthrough on
set -s extended-keys on
set -as terminal-features 'xterm*:extkeys'allow-passthroughは通知や進捗バーを外側のターミナルへ届けるための設定で、extended-keys関連の2行がShift+Enterと通常のEnterをtmuxに区別させます。この設定を入れずに「iTerm2ではShift+Enterが効くのに、tmuxの中に入った途端に効かなくなった」と感じるケースは典型的なハマりどころです。tmux配下ではCtrl+Jを使うほうが設定不要で確実です。
Vimキーバインド使用時の改行
/configのEditorモードやeditorMode設定をvimにしていても、複数行入力の扱いは通常のVimとは異なります。INSERTモードでEnterを押すと、標準のVimと違ってそのままメッセージを送信します。改行を挿入したいときは、NORMALモードでoやOを押して新しい行を開くか、INSERTモードのままCtrl+Jを使います。Vimのキーバインドに慣れているほど「INSERTモードでEnterを押せば改行できる」という前提でつまずきやすいポイントで、モーション操作の詳細はClaude Code Vimモードの使い方にまとめています。
EnterとShift+Enterの役割を入れ替える
改行と送信のキー割り当ては~/.claude/keybindings.jsonで変更できます。chat:submit(送信)とchat:newline(改行挿入)の2つのアクションが対象です。/keybindingsを実行すると設定ファイルが開きます。
/keybindings次の例は、Enterで改行しShift+Enterで送信するように、既定の動作を丸ごと入れ替えます。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"bindings": [
{
"context": "Chat",
"bindings": {
"enter": "chat:newline",
"shift+enter": "chat:submit"
}
}
]
}キーバインドファイルへの変更は保存した瞬間に反映され、Claude Codeの再起動は不要です。長文プロンプトを何行も書いてから最後にまとめて送信したい人には、この入れ替えが向いています。逆に一発の質問が多い人は既定のままのほうが扱いやすいでしょう。
contextはChat(メインの入力欄)のほかにGlobal(画面全体)など複数あり、Globalで割り当てると入力欄以外の画面でも同じキーが反応します。改行と送信の入れ替えは入力欄だけの操作なので、contextはChatのままにしておくと他の操作を意図せず上書きしません。設定例の$schemaはエディタの補完用、任意で加えられる$docsはドキュメントURLを指すフィールドです。
よくある質問
Ctrl+JとShift+Enter、どちらを覚えるべきか
ターミナルを固定して使うなら、そのターミナルに合わせてどちらでも構いません。複数のターミナル(ローカルのiTerm2とVS Code統合ターミナルなど)を行き来する人は、常に動くCtrl+Jを基本にするとターミナルごとの対応表を覚えずに済みます。SSH先やコンテナ内など、手元と違う環境に入ることが多い人ほど、この違いに気づかず戸惑いやすいところです。
gnome-terminalやJetBrains IDEのターミナルでは複数行入力を諦めるしかないか
諦める必要はありません。Ctrl+Jか\を打ってからEnterを押せば、これらの環境でも改行を挿入できます。両方とも拡張キーコードに依存しない方式なので、対応表に載っていないターミナルでも同様に動きます。新しく別のターミナルへ乗り換えたときも、まずこの2つを試せばShift+Enterの対応状況を調べる手間を省けます。
/terminal-setupを実行しても改行できるようにならない
実行したターミナルがそもそも対応リストに載っているか確認します。gnome-terminalとJetBrains系IDEのターミナルは拡張キーコードの伝達自体に対応しておらず、/terminal-setupでは解決しません。対応リストに載っているのに動かない場合は、tmuxやscreenの中から実行していないか確認してください。ホスト側のターミナルで直接実行する必要があり、これを守らないと設定が正しい場所に書き込まれません。
macOSでOption+Enterが反応しない
Option+EnterはmacOSの「Option as Meta」設定を有効にして初めて動きます。ターミナルごとに設定場所が異なり、Apple Terminalなら「Use Option as Meta Key」、iTerm2ならLeft/Right Optionキーを「Esc+」に設定します。Claude Codeの初回起動時にセットアップを承諾していれば、この設定は既に済んでいる場合があります。動くかどうか不安な場合も、Ctrl+Jを使えば設定状態に関係なく確実に改行できます。
Vimキーバインドを有効にしていると改行の操作は変わりますか
変わります。標準のVimではNORMALモードのo/Oで新しい行を開きますが、Claude CodeのVimモードはINSERTモードのEnterをメッセージ送信に割り当てたままです。改行したいときはNORMALモードのo/Oか、INSERTモードのままのCtrl+Jを使います。\+Enterも動きますが、Vimのキー操作に慣れているならCtrl+Jのほうが手が止まりません。
まとめ
Claude Codeでの改行は、Ctrl+Jか\+Enterを使えばどのターミナルでも即座に動きます。Shift+Enterは見た目上は同じ操作でも、ターミナルによって「そのまま動く」「/terminal-setupが必要」「そもそも対応していない」の3段階に分かれ、tmuxを経由するとさらに設定が要ります。頻繁にターミナルを切り替える環境ではCtrl+Jを基本にし、Shift+Enterはホーム環境だけの上乗せと考えると迷いません。キー割り当てそのものを変えたい場合はkeybindings.jsonでchat:submitとchat:newlineを入れ替えられます。ショートカット全般の一覧はClaude Codeショートカット一覧、tui設定を含む全体像はClaude Code設定ガイドで確認できます。