VS Code・Cursor・Windsurf・Alacritty・Zed の内蔵端末で Claude Code を使い始めて、Shift+Enter を押したら改行のつもりが送信されてしまった人向け
VS Code・Cursor・Windsurf・Alacritty・Zed の内蔵端末で Claude Code を起動して、長めのコード貼り付け + 補足コメントの2行投稿をしたいのに Shift+Enter が送信に化けてしまう場面で叩く。Apple Terminal で Option+Enter を改行扱いにしたい場合や、iTerm2 で /copy コマンドをクリップボードに通したい場合にも同じコマンドを使う。tmux や screen の中ではなく、素のホスト端末で1回だけ実行すれば設定は残る。tmux の中でも Shift+Enter を使いたいなら ~/.tmux.conf に3行を別途書き足す必要あり
VS Code の中の黒い画面で Claude Code を立ち上げて、コードを貼り付けた直後に Shift+Enter で2行目に補足コメントを足そうとしたら、改行どころかメッセージが送信されて慌てた人向けのコマンドです。/terminal-setup をその端末で1回叩いておくと、設定ファイルに「Shift を押しながら Enter を押したら改行扱いね」というルールを書き足してくれて、以後ふつうに2行目が打てるようになります。
1点だけ強く言っておきます。これは「全端末で同じことが起きる魔法」ではありません。
そもそも、なぜ Shift+Enter で改行できる端末とできない端末があるのか
原因は Claude Code 側ではなく、端末アプリ側の設計です。Shift を押しながら Enter を押したときの信号を、端末が Claude Code にきちんと「これは Shift+Enter だよ」と伝えるか、それとも「ただの Enter だよ」と縮めて伝えるかが、アプリによって違います。
iTerm2 や Ghostty、Kitty、WezTerm、Warp、Apple Terminal、Windows Terminal は最初から伝えてくれる側です。だから何も設定しなくても改行できます。一方、VS Code・Cursor・Windsurf・Alacritty・Zed はそのままだと縮めて伝えてしまう側で、自前の設定ファイルに「Shift+Enter のときは改行扱い」と書いて教え直す必要があります。/terminal-setup が代わりにその書き換えをやってくれる、というのが正体です。
そしてもう1グループあります。gnome-terminal と JetBrains の IDE です。具体的には PyCharm や Android Studio あたり。これらは設定をいじっても Shift+Enter を Claude Code に伝える経路自体がなくて、何をやっても無理です。改行したいときは Ctrl+J またはバックスラッシュ \ を打ってから Enter を押す、という別の手段に切り替えます。
大事な前提:今いる場所が「素のホスト端末」かどうか
/terminal-setup は、今あなたが叩いている画面の元になっている端末アプリの設定ファイルを書き換えにいきます。だから tmux や screen のように「端末の中でもう1段画面を切り替えるツール」の内側で叩いても、書き換え対象が見つからずに無意味になります。tmux を使っているなら、まず Ctrl+B → D などで tmux を抜け、素の VS Code 内蔵端末や iTerm2 の素の画面で /terminal-setup を叩いてください。
ただし、tmux の外で /terminal-setup を正しく叩いたとしても、tmux の中で作業を続ける限りは Shift+Enter がまだ効きません。tmux 自体が Shift+Enter の信号を外に通してくれないためです。tmux の中でも Shift+Enter を使いたい場合は、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'
/terminal-setup 自体は tmux の設定ファイルには触らないので、この3行は別途自分の手で書く必要があります。
「VS Code でコードを貼って2行目を書き足したい」を例に、実際に叩く手順
シナリオはこうです。VS Code の内蔵端末で claude と打って Claude Code を起動した。GitHub から拾ってきた30行ほどのスクリプトを貼り付けて、その下に「このコードのどこを直したい」を補足したい。ふつうに改行するつもりで Shift+Enter を押したら、コードだけが送信されて Claude が解析を始めてしまった。慌てて止める ―― という流れです。
ステップ1: いったん Claude Code を止めて、内蔵端末に戻る
送信されかけたメッセージは Esc で割り込み停止します。プロンプトに戻ったら、Ctrl+C を2回連打して Claude Code 本体を終了させてください。VS Code の内蔵端末の素のプロンプト、つまり $ マークが出ている状態に戻ります。
ステップ2: claude を再起動して /terminal-setup を叩く
同じ内蔵端末でもう一度 claude と打って Claude Code を起動し、入力欄に /terminal-setup と打ち込みます。1秒ほどで VSCode terminal Shift+Enter key binding installed のようなメッセージが返ってきます。
以下は VS Code で叩いたときの出力例です。Alacritty や Zed で叩いた場合は mouseWheelScrollSensitivity の行は出ません。
> /terminal-setup
✓ VSCode terminal Shift+Enter key binding installed
✓ terminal.integrated.mouseWheelScrollSensitivity set in settings
何をやってくれたかというと、VS Code の keybindings.json に「Claude Code が動いている端末内で Shift+Enter が押されたら、改行を表す信号を流す」というルールを書き足し、settings.json にマウスホイールのスクロール感度の値を1つ書き足してくれた、ということです。後者は全画面モードで使ったとき、スクロールがガタつかないようにするためのおまけです。
同じ /terminal-setup を Alacritty で叩いた場合は、ホームフォルダ配下の alacritty.toml に Shift+Enter のキー割り当てが書き足されます。古いバージョンの Alacritty では alacritty.yml という拡張子のことがありますが、扱いは同じです。Zed の場合は keymap.json に同じ内容が書き足されます。中身は端末ごとに違いますが、目的は全部同じで「Shift+Enter を改行として扱う」のルール追加です。
ステップ3: コードを貼り直して、Shift+Enter で改行を試す
そのまま貼り直して、最後の行のあとで Shift+Enter を押してみます。今度は送信されず、カーソルが2行目の頭に降りるはずです。確認できたら、補足コメントを書いて、最後に通常の Enter で送信します。
> def hello():
print("hi")
[ここで Shift+Enter を押すと改行が入る]
このコードのうち print の中身を、関数に渡された名前で出すように直したい
ステップ4: 動かなかったときの逃げ道を覚えておく
Shift+Enter がまだ動かない場合や、そもそも JetBrains の PyCharm 内蔵端末を使っているような場合は、Ctrl+J または「\ を打ってから Enter」で改行が入ります。これはどの端末でも追加設定なしで効く保険の手段です。ここで初心者がやりがちな勘違いがあって、「\ を入れてから Enter」だと「バックスラッシュ + 改行」がそのまま送信されると思いがちですが、Claude Code 側で「行の末尾の \ + Enter は改行扱い」と解釈してくれます。送信時には \ は消えます。
つまり /terminal-setup は何をしてくれるのか
- やってくれる - VS Code 系: VS Code・Cursor・Windsurf では
keybindings.jsonに Shift+Enter を改行扱いするルールを書き足し、さらにsettings.jsonにマウスホイールのスクロール感度の値も書き足す - やってくれる - Alacritty:
alacritty.tomlに Shift+Enter を改行扱いするルールを書き足す。古いalacritty.yml形式の場合もそちらに書き足す。スクロール感度の追加はなし - やってくれる - Zed:
keymap.jsonに Shift+Enter を改行扱いするルールを書き足す。スクロール感度の追加はなし - やってくれる - iTerm2 と Apple Terminal: iTerm2 ではクリップボードアクセスの設定を有効化する。Apple Terminal では Option キーを Meta キー扱いにし、音のベルを画面フラッシュに切り替える
- やってくれない: gnome-terminal と JetBrains IDE への対応。これらは Shift+Enter を伝える経路自体がないので、コマンドを叩いても何も起きない
- 意味が薄い場面: もともと Shift+Enter が効く Ghostty、Kitty、WezTerm、Warp、Windows Terminal で叩いても、特に何も変わらない。害もない
使いどころ3シナリオ(具体題材で再現)
シナリオ1: VS Code で長めのコードレビューを依頼したいとき
ECサイトの決済処理の関数、50行くらいあるやつを Claude Code に貼って「ここのバリデーション、抜けてる条件ない?」と聞きたい、という場面です。1メッセージにコード本体 + 自分の懸念点 + 期待する出力フォーマットを並べたいので、改行は必須になります。VS Code 内蔵端末で /terminal-setup を1回叩いておけば、以後そのプロジェクトでも別プロジェクトでも Shift+Enter で改行が打てます。設定は VS Code 全体に効くので、プロジェクトを切り替えても再実行は不要です。
シナリオ2: Apple Terminal で Claude Code を初めて起動した直後
Mac 標準のターミナルで claude を初めて起動すると、最初に「Option+Enter for newlines and visual bell を有効にしますか」という確認が出ます。ここで Yes と答えたなら、その瞬間に /terminal-setup が裏で自動で走っています。以後 Option+Enter で改行できて、Claude が反応するときの「ピーン」という音が画面の一瞬の白フラッシュに変わります。あとから手動で /terminal-setup を叩いても害はなく、「もう設定済みです」というメッセージが出るだけです。
シナリオ3: iTerm2 で /copy を使ってクリップボードに長文を入れたいとき
iTerm2 はそもそも Shift+Enter で改行できるので、改行目当てなら /terminal-setup は要りません。ただし /copy コマンドを使いたい場合、つまり Claude の出力をクリップボードに送りたい場合は、iTerm2 側の「Applications in terminal may access clipboard」という設定を有効にする必要があり、これは /terminal-setup が一発でやってくれます。叩いたあと、iTerm2 を一度終了して再起動するのを忘れないでください。再起動しないと設定が反映されません。
初心者が踏みやすい落とし穴
- tmux や screen の中で叩いても無意味。書き換え対象であるホスト端末本体、つまり VS Code 本体や iTerm2 本体の設定ファイルに、中間層から手が届かないためです。先に tmux を抜けてから叩いてください
- tmux の外で正しく叩いた後でも、tmux の中では Shift+Enter は効かない。tmux 自体が Shift+Enter の信号を通さない設計のため、別途
~/.tmux.confにset -g allow-passthrough onなど3行を書き足してtmux source-file ~/.tmux.confで読み直す必要があります。/terminal-setupはここまでは面倒を見てくれません - gnome-terminal と JetBrains IDE は対応外。PyCharm や Android Studio の内蔵端末では、何度叩いても Shift+Enter は動きません。
Ctrl+Jまたは「\を打ってから Enter」で改行する運用に切り替えるのが正解です - 既存のキー設定は壊さない。
keybindings.jsonやsettings.json、alacritty.toml、keymap.jsonにすでに自分でカスタムしたキー設定があっても、上書きはしません。Shift+Enter のルールがすでに書かれていればalready configuredと表示されて何もしないので、何度叩いても安全です - iTerm2 では Shift+Enter は関係ない。iTerm2 はもともと改行が効く側です。
/terminal-setupが iTerm2 でする仕事は/copyのためのクリップボードアクセス権を有効化することで、別の話題です。設定反映には iTerm2 の再起動が必須 - Apple Terminal の初回起動の確認で「Yes」と答えた人は、すでに
/terminal-setupが裏で走り終わっている。改めて手動で叩いても害はないが、「既に設定済み」と返ってくるだけで何も変わりません - VS Code・Cursor・Windsurf 以外で「スクロールが軽くなった気がしない」のは仕様。マウスホイール感度の改善が走るのは VS Code 系の3つだけで、Alacritty や Zed では Shift+Enter の改行ルールしか追加されません
書き方
/terminal-setup
やってみるとこうなる
入力
/terminal-setup
出力例
✓ VSCode terminal Shift+Enter key binding installed
✓ terminal.integrated.mouseWheelScrollSensitivity set in settings
(Alacritty で叩いた場合)
✓ Alacritty Shift+Enter key binding installed in alacritty.toml
(Zed で叩いた場合)
✓ Zed Shift+Enter key binding installed in keymap.json
(既に設定済みの場合)
VSCode terminal Shift+Enter key binding already configured
このページに出てきた言葉
- 端末(ターミナル)
- 黒い画面で文字のコマンドを打ち込むアプリ。Mac の「ターミナル」、Windows の「コマンドプロンプト」「PowerShell」、VS Code・Cursor の内蔵端末など
- Shift+Enter
- 送信せずに改行だけを入れたいときに押すキーの組み合わせ。端末によっては元から効くが、効かない端末では <code>/terminal-setup</code> で書き換えが必要
- Ctrl+J
- どの端末でも追加設定なしで改行を送れる古典的なキー。Shift+Enter が動かない端末での代替手段
- keybindings.json
- VS Code・Cursor・Windsurf で「どのキーを押したら何が起きるか」を覚えておく設定ファイル。<code>/terminal-setup</code> はここに Shift+Enter のルールを書き足す
- settings.json
- VS Code 全体の動作設定をまとめて覚えておく設定ファイル。<code>/terminal-setup</code> はマウスホイールのスクロール感度 <code>terminal.integrated.mouseWheelScrollSensitivity</code> の値もここに足す
- alacritty.toml
- 独立端末アプリ Alacritty の設定ファイル。ホームフォルダの <code>.config/alacritty/</code> に置かれることが多い。古いバージョンでは <code>alacritty.yml</code> という拡張子だった。<code>/terminal-setup</code> はここに Shift+Enter のキー割り当てを書き足す
- keymap.json
- 高速エディタ Zed の中で「どのキーを押したら何が起きるか」のルールを覚えておく設定ファイル。<code>/terminal-setup</code> はここに Shift+Enter を改行扱いするルールを書き足す
- tmux / screen
- 1つの端末ウィンドウの中で画面を分割したり後で同じ画面に戻ってこれるようにする補助ツール。この中で <code>/terminal-setup</code> を叩いてもホスト端末に手が届かず無意味
- ~/.tmux.conf
- tmux 自身の設定ファイル。ホームフォルダ直下に置く。tmux の中で Shift+Enter を使いたい場合、<code>/terminal-setup</code> とは別に、ここに <code>set -g allow-passthrough on</code> など3行を手で書き足す必要がある
- ホスト端末
- tmux などの中間ツールを挟まない、おおもとの端末アプリ本体のこと
- JetBrains IDE
- PyCharm、IntelliJ IDEA、Android Studio など JetBrains 社のコード書き専用アプリ。内蔵端末は Shift+Enter を Claude Code に伝える経路自体がなく、<code>/terminal-setup</code> でも対応できない