M.

Claude Code を「Ctrl+Enter / Cmd+Enter で送信」にする(Windows Terminal・iTerm2)

送信キーを全部 Ctrl+Enter(Mac は Cmd+Enter)にそろえて、脳のコンテキストを減らしたい。そう思って、Claude Code(CLI)を Enter で改行・Ctrl+Enter(Mac は Cmd+Enter)で送信 にしました。

Windows Terminal・iTerm2 のどちらも、ターミナル側と Claude Code 側の両方の設定が必要でした。

※ 2026-10-04 追記:Mac(iTerm2)の手順を記事の末尾に追加しました。

環境:Windows 10 / Windows Terminal 1.24 / PowerShell 7.6 / Claude Code 2.1.286

解決方法

1. Windows Terminal の settings.json

Ctrl+Enter を押したら「Ctrl+X → Enter」を送るようにします。

"actions": [
    {
        "command": { "action": "sendInput", "input": "\u0018\r" },
        "id": "User.sendInput.CtrlEnter"
    }
],
"keybindings": [
    { "id": "User.sendInput.CtrlEnter", "keys": "ctrl+enter" }
]

2. Claude Code の ~/.claude/keybindings.json

Enter を改行にします。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "enter": "chat:newline"
      }
    }
  ]
}

これで完了です。タブを開き直すと反映されます。

デメリット(動きへの影響)

  • Windows Terminal のすべてのタブで Ctrl+Enter が変わります。プロファイルごとには設定できません。
  • PowerShell では Ctrl+Enter でコマンドが実行されます。文字を選択したまま押すと、選択部分が切り取られてから実行されます。
  • PowerShell 本来の Ctrl+Enter(上に行を挿入)は使えなくなります。
  • WSL の bash など、ほかのシェルでも Ctrl+Enter の動きが変わります(Ctrl+X の意味がシェルごとに違うため)。
  • Claude Code で補完候補が出ているときに Ctrl+Enter を押すと、候補を確定せずにそのまま送信します。

参考:中身の挙動

なぜ両方の設定が必要か

Windows Terminal 1.24 + Windows 版 Claude Code では、Ctrl+Enter が Ctrl+Enter として認識されません(何も設定しないと改行になります)。Windows の入力の変換経路で修飾キーの情報が落ちるためと考えられ、Claude Code の設定だけでは解決できません。

そこで Windows Terminal 側で、Ctrl+Enter を別の信号「Ctrl+X → Enter」に置き換えています。

なぜ「Ctrl+X → Enter」なのか

Claude Code には、Ctrl+X → Enter で送信する割り当てが最初からあります(chat:queueSubmit)。これを使えば、Claude Code 側には送信キーを追加しなくて済みます。

この送信は、Claude が作業中なら割り込まずに順番待ちになります。普段の Enter 送信と同じ感覚です。

うまくいかなかった方法

方法結果
Claude Code に "ctrl+enter": "chat:submit" を書くだけCtrl+Enter として認識されない
Windows Terminal から \u001b[13;5u(Ctrl+Enter を表す信号)を送る何も起きない
Windows Terminal から ESC+Enter を送り、Alt+Enter を送信に割り当てる改行になる
Claude Code で Ctrl+J を送信に割り当てるEnter も Ctrl+Enter も改行になる

きれいな方法はまだ無い

2026年10月時点で、これといったベストプラクティスは見つかりませんでした。Windows Terminal か Claude Code のどちらかが Ctrl+Enter をそのまま扱えるようになれば、この回避策は要らなくなります。

追記:Mac(iTerm2)で「Cmd+Enter で送信」にする

Mac の iTerm2 でも、Enter で改行・Cmd+Enter で送信 にしました。仕組みは Windows と同じで、Cmd+Enter を「Ctrl+X → Enter」に置き換えます。

環境:macOS 15.7.1 / iTerm2 3.7.3 / Claude Code 2.1.289

1. iTerm2 の Key Bindings

Settings → Keys → Key Bindings(Profiles の中ではなく、上部の Keys タブ)で + を押し、次のように設定します。

項目値
Keyboard Shortcut⌘↩
ActionSend Hex Code
値0x18 0x0d(Ctrl+X → Enter)

2. Claude Code の ~/.claude/keybindings.json

Windows と同じです。Enter を改行にします。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "enter": "chat:newline"
      }
    }
  ]
}

Claude Code を再起動すると反映されます。Windows と同じく、Claude が作業中に送ると割り込まずに順番待ちになります。

なぜ両方の設定が必要か

ターミナルは Cmd キーをアプリに渡しません。そのため Claude Code に cmd+enter を書いても反応しません。iTerm2 側で Cmd+Enter を、Claude Code にもともと用意されている送信キー「Ctrl+X → Enter」に置き換えています。

ハマったところ

iTerm2 では Cmd+Enter が最初からフルスクリーン切替に割り当てられています。 割り当てが効いていないと、押すたびにウィンドウが最大化されます。全プロファイル共通の Keys → Key Bindings に入れたら、フルスクリーン切替より優先されました。

いきなり最終形にせず、まず値を 0x0d(Enter)にして「Cmd+Enter で送信できるか」を確かめてから、0x18 0x0d に変えると、どこで失敗したのか切り分けやすいです。

デメリット

  • iTerm2 のすべてのプロファイルで Cmd+Enter が変わります。Cmd+Enter でのフルスクリーン切替は使えなくなります。
  • シェルなど Claude Code 以外の画面で Cmd+Enter を押すと、Ctrl+X → Enter が送られます(Ctrl+X の意味はシェルごとに違います)。

参考文献

この記事は、2026年10月に はてなブログ から移設しました。

この記事をシェア

関連する記事

Claude Code に .env を読ませない deny 設定と、その限界

Claude Code に任せて作業するにあたり、.env や credentials を読ませないよう settings.json の permissions.deny を設定しています。実際の設定と、Bash コマンドのパターン指定ではすり抜けが防ぎきれない理由、ほかに重ねている対策をまとめます。

テーマから探す