Claude Code(Windows Terminal)で Shift + Enter を改行にする方法
Windows Terminalの PowerShell から Claude Code を起動すると、改行が Ctrl + Enter に割り当てられていて、他のアプリと操作感が違って戸惑ったときの覚書。
この記事はClaudeアプリで生成。
なぜ Shift + Enter が効かないのか
Claude Code は本来 Shift + Enter での改行に対応しています。
にもかかわらず効かないのは、Windows Terminal がデフォルトで Enter と Shift + Enter にまったく同じバイト列(エスケープシーケンス)を送ってしまうからです。
その結果、Claude Code 側では両者を区別できず、Shift + Enter を押しても「Enter(=送信)」と同じ扱いになってしまいます。
これは Windows Terminal に限らず、多くのターミナルが抱える古くからの仕様です。
iTerm2 や WezTerm などは独自にこの問題を解決していますが、Claude Code の /terminal-setup コマンドの対応リストに Windows Terminal は含まれていません。
そのため、Windows Terminal では自分で設定を追加する必要があります。
解決策:settings.json を設定
ポイントは、Shift + Enter を押したときに CSI u という現代的なキー入力エンコード(\u001b[13;2u)を送るよう Windows Terminal に教えてあげることです。
これにより Claude Code が Shift + Enter を「ただの Enter」と区別できるようになります。
設定ファイルを開く
Windows Terminal で次の手順で設定ファイルを開きます。
- 設定(Ctrl + ,)を開く
- 左下の「JSON ファイルを開く」をクリック
settings.json がエディタで開きます。
新しい形式(actions と keybindings が分離している場合)
最近の Windows Terminal では、コマンドの定義(actions)とキー割り当て(keybindings)が 2つの配列に分離しています。
この場合は、両方に1つずつ追記します。
1. actions 配列に追記
actions 配列の中に、次のオブジェクトを追加します。直前の要素の末尾にカンマが必要な点に注意してください。
{"command":{"action": "sendInput","input": "\u001b[13;2u"},"id": "User.sendInput.ShiftEnterNewline"}
たとえば、配列の最後の要素の後ろにカンマを足してから追記すると、次のような形になります。
{"command":{"action": "splitPane","split": "right","splitMode": "duplicate"},"id": "User.splitPane.FEF0D40B"},{"command":{"action": "sendInput","input": "\u001b[13;2u"},"id": "User.sendInput.ShiftEnterNewline"}],
2. keybindings 配列に追記
次に keybindings 配列で、上で付けた id と shift+enter を結びつけます。こちらも直前の要素の末尾にカンマを足してから追記してください。
{"id": "User.sendInput.ShiftEnterNewline","keys": "shift+enter"}
反映と確認
Windows Terminal は設定ファイルの変更を保存すると即座に反映するため、再起動は不要です。
Claude Code 上で Shift + Enter を押して改行されれば成功です。
もし反映されない場合は、念のため新しいウィンドウを開いて試してみてください。
なお、Claude Code を起動したまま設定を変更したい場合は、Claude Code 自身に「Windows Terminal の settings.json に Shift + Enter の sendInput アクションを追加して」と頼めば、ファイルを探して編集してくれます。