Claude Media
Claude CodeのCtrl+Enterでキューを待たずに送信する — Enterとの違い

Claude CodeのCtrl+Enterでキューを待たずに送信する — Enterとの違い

Ctrl+Enterはキュー済みのメッセージと下書きを、ターンの終わりを待たずに送信するキーです。Enterでの通常のキューイングや、実行中の処理がバックグラウンドへ移せるかどうかとの関係を解説します。

Ctrl+Enter(send-now)で何ができるか

Ctrl+Enterは、キューに積んだメッセージと入力中の下書きを、ターンの終わりを待たずにその場で送信するキーです。公式のキーバインド名はchat:sendNowで、Ctrl+X Ctrl+Sという組み合わせキーにも同じ動作が割り当てられています。何もキューされていない状態でこのキーを押すと、下書きがそのまま送信されるだけです。v2.1.275以降で使えます。

使い方: Enterで積んでからCtrl+Enterで送る

Ctrl+Enterが意味を持つのは、あらかじめEnterでメッセージがキューに積まれているときです。作業中に追加の指示をキューし、ターンの区切りを待たずに渡したくなったらCtrl+Enterを押します。

> 大きめのリファクタを進めて
# Claudeが作業を開始
> ついでにテストも直しておいて
# → Enterでキューに積まれる(即座には渡らない)
#
# ここでCtrl+Enterを押す
# → キューした「ついでにテストも直しておいて」がすぐに送信される

複数件をキューしていた場合はまとめて送り出されます。書きかけの下書きがあれば、キューされた分の後ろに続けて一緒に送信されます。送信済み・キュー中のどちらのエントリも、Claudeが応答を始めるまでは入力欄の上でグレー表示のままです。Ctrl+Enterを押した直後もこの見た目は変わらないため、実際に処理が始まったかどうかは応答が返ってくるまで画面上では判断できません。

接続したIDEやdiffパネル(/diffで開く差分ビュー)からコードの選択範囲を添えてキューした場合、その選択はEnterを押した時点のものに固定されます。Ctrl+Enterを押すまでの間に別の箇所を選び直しても、実際に送信される選択範囲は変わりません。

実行中のターンはどう扱われるか

Ctrl+Enterを押した瞬間にClaudeが何をしているかで、進行中のターンの扱いが変わります。

シェルコマンド・サブエージェント・その他バックグラウンドへ移動できる処理を実行中なら、その処理はバックグラウンドで動いたまま、キューしたメッセージは同じターンの中でClaudeに渡ります。応答の生成だけをしている、あるいはバックグラウンドへ移せない処理を実行中なら、Ctrl+Enterはターンを中断し、キューしたメッセージを次に送ります。v2.1.281より前は、どちらの状況でも必ずターンを中断する挙動でした。

バックグラウンドへ移せる処理・移せない処理

「バックグラウンドへ移動できる処理」の範囲は、バックグラウンド実行が対象にしているものと同じです。Bashツールの呼び出しとサブエージェントが該当し、Ctrl+Bで手動でバックグラウンド化した処理も含まれます。webpackやviteのようなビルドツール、npm・yarn・pnpmといったパッケージマネージャー、jest・pytestのテストランナー、開発サーバー、dockerやterraformのような長時間処理が典型例です。こうした処理が動いている間にCtrl+Enterを押すと、処理は止まらずに続き、キューしたメッセージだけが同じターンでClaudeに渡ります。

一方、Claudeが応答の文章を生成しているだけの状態や、バックグラウンドへ移す仕組みを持たない処理を実行中は、この区別が働きません。Ctrl+Enterはターンそのものを中断し、キューしたメッセージを次に送ります。長い出力の説明文を読んでいる最中に急ぎの追加指示を送りたい場合、待たずに割り込ませたいならこの状態で構いません。

> npmのテストスイートを実行して
# npm testがBashツールとして実行中(バックグラウンドへ移せる処理)
> ログの出力形式も直しておいて
# Enterでキューに積まれる
#
# ここでCtrl+Enterを押す
# → npm testはバックグラウンドで動き続け、
#   「ログの出力形式も直しておいて」は同じターンの中でClaudeに渡る

Enterでのキューイングとの違い

Enterとの役割分担は明確です。Claude Codeでメッセージをキューに入れる方法で扱ったEnterは、ターンを妨げずにメッセージを積む操作です。メッセージはツール呼び出しが終わった時点で同じターンの中でClaudeに渡りますが、コマンドや!のシェルコマンドはターンが終わるまで渡されません。Ctrl+Enterは、その区切りを待たずに積んだ分を今すぐ渡したいときに使います。

キー動作
Enter動作メッセージをキューに積む(ツール呼び出しの区切りで同じターン内に渡る。コマンド類はターン終了後)
Ctrl+Enter動作キューの中身と下書きを、待たずにその場で送信する
Esc動作進行中のターンを中断し、キューの内容を含めて即送信する

Ctrl+EnterとEscはどちらも「待たせない」点は共通しますが、目的が違います。Escは今の方向性が違うと気づいて止めたいときに、Ctrl+Enterは方向性自体は正しくキューした内容を早く届けたいときに使います。

シェルモードと使えない環境での扱い

シェルモード(!から始まる入力)の最中は、Ctrl+Enterを押してもコマンドがキューに積まれるだけで、即座には実行されません。通常のチャット入力とは挙動が変わる例外です。

拡張キーを認識しないターミナルでは、Ctrl+EnterはただのEnterとして届き、下書きをキューに積む動作に化けてしまいます。拡張キーの報告に対応しているかどうかはターミナルの実装次第で、SSH越しの接続や対応していない端末では、Ctrl+Enterと素のEnterを区別して送ることができません。Ctrl+X Ctrl+Sはどのターミナルでも同じ動作をするため、こちらを覚えておくと環境差に振り回されません。Shift+Enterでの改行設定も、拡張キーをターミナルが報告できるかどうかに挙動が左右される点は共通しています。

キーバインドをカスタマイズする

chat:sendNowは予約済みショートカットではないため、~/.claude/keybindings.jsonで割り当てを変更できます。

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+enter": null,
        "ctrl+j": "chat:sendNow"
      }
    }
  ]
}

この例ではCtrl+Enterへの割り当てを解除し、代わりにCtrl+J(既定では改行挿入)へ移しています。Ctrl+X Ctrl+Sの方は残したいなら、ctrl+enterだけをnullにすれば十分です。設定ファイル全体の構造とコンテキストの一覧はClaude Codeショートカット一覧にまとめています。

参考までに、次の7つはリマップの対象外です。

  • Ctrl+C(中断)
  • Ctrl+D(終了)
  • Ctrl+M(常にEnterとして扱われる)
  • Ctrl+[(常にEscapeとして扱われる)
  • Ctrl+I(常にTabとして扱われる)
  • Ctrl+H(バックスペースのASCIIコードを送る)
  • Caps Lock

Ctrl+Enterはこの一覧に含まれません。通常のショートカットと同じ手順で変更できます。

Ctrl+X自体を単独のキーとして再利用したい場合は、もう一段注意が要ります。同じプレフィックスを共有するコードを1つでも残すと、Ctrl+Xを押した時点でコード待ち状態に入ってしまうためです。Chatコンテキストだけでもctrl+x ctrl+k・ctrl+x ctrl+e・ctrl+x enter・ctrl+x ctrl+a・ctrl+x ctrl+s・ctrl+x tabの6つが既定で登録されています。加えてTaskコンテキストのctrl+x ctrl+b、DiffPanelコンテキストのctrl+x bも同じプレフィックスを使うため、Ctrl+X Ctrl+S(send-nowの代替バインド)を含めこれら全部を解除しない限りCtrl+Xは解放されません。

似た名前のアクションにchat:queueSubmit(既定Ctrl+X Enter)があります。Claudeの作業中はキューに積み、ターンを決して中断しない送信方法です。通常のEnter(chat:submit)と違い、補完候補がハイライトされていても下書きをそのまま送信します。v2.1.247以降で使えます。

Vimモードを有効にしている場合でも、Ctrl+Enterの動作は変わりません。ほとんどのCtrl系ショートカットはVimのモード管理を素通りしてキーバインドシステムにそのまま届くため、INSERTモードとNORMALモードのどちらでも同じように送信されます。Vimの操作キー自体(h/j/k/lなど)がkeybindings.jsonでリマップできないのとは対照的に、Ctrl+Enterは通常のキーバインドとしてそのまま扱われます。

この機能はどう進化してきたか

Ctrl+Enterとその周辺のキーは、一度に追加されたわけではありません。公式ドキュメントのバージョン要件を並べると、キューまわりの操作は複数バージョンにわたって段階的に整備されてきたことが分かります。

バージョン変更内容
v2.1.247変更内容Ctrl+X Enter(chat:queueSubmit)を追加。作業中でもターンを中断せずに下書きを送信できるようになった
v2.1.260変更内容ctrl+x b・ctrl+x ctrl+a・ctrl+x tabのコードを追加
v2.1.275変更内容Ctrl+Enter/Ctrl+X Ctrl+S(chat:sendNow)を追加。キューを待たずに送信できるようになった
v2.1.281変更内容バックグラウンドへ移せる処理を実行中なら、Ctrl+Enterはターンを中断せず処理を継続させながらキューを渡すよう変更。それ以前はどんな状況でもターンを中断していた

v2.1.275でCtrl+Enter自体が生まれ、その6バージョン後のv2.1.281で「中断せずに済む場面」が広がった形です。バックグラウンドで動くビルドやテストを止めずにメッセージだけ先に届けたい、という使い方は比較的新しいバージョンで初めて成立するようになりました。長時間のビルドやテストのたびに作業が中断されるのは実務上のストレスが大きく、この変更はその摩擦を減らす方向の調整と見ることもできます。古いバージョンのまま運用していると、ビルド中にCtrl+Enterを押した途端にビルドごと止まってしまい、意図と違う結果に驚くことがあります。

まとめ

Ctrl+Enterは、Enterで積んだキューをターンの終わりを待たずに送信するキーです。実行中の処理がバックグラウンドへ移せるかどうかで、ターンが中断されるか継続されるかが変わり、キューの先頭が!のシェルコマンドのときだけは必ず中断されます。拡張キーに対応しないターミナルではCtrl+X Ctrl+Sが同じ動作の代替になり、予約済みショートカットではないためkeybindings.jsonで割り当ても変更できます。積んだ内容を早く届けたいのか、それとも方向転換したいのかを基準にすれば、Ctrl+EnterとEscは迷わず使い分けられます。使っているClaude Codeのバージョンがv2.1.275より前だと、このキー自体がまだ存在しない点にも注意が必要です。

この記事を共有:XはてブLinkedIn