Ctrl+X Ctrl+E(コントロールエックス・コントロールイー)

キーバインド
Ctrl+X Ctrl+E
コントロールエックス・コントロールイー
Claude Codeのプロンプト入力欄を、$EDITORで指定した普段使いのエディタで開いて編集するキーバインド。Ctrl+Gと完全に同じ機能で、こちらはbashやzshに古くからあるreadlineという入力部品由来の押し方。エディタで保存して閉じると、書いた内容がそのままClaude Code側の入力欄に戻ってくる

Claude Codeのプロンプト入力欄で長文を書くのが辛い人、$EDITORに普段使うエディタを設定済みの人向け

100行を超える長文プロンプトや、SQL文・テーブル設計案・移行手順みたいに構造化された下書きをClaudeに渡したい場面、あるいはClaudeの前回応答を引用しながら次の指示を書きたい場面で叩く。プロンプト入力欄の細い1行で書こうとすると30行目あたりで何を書いていたか見失う、その手前で外部エディタに逃がす

Claude Codeのプロンプト入力欄は、横に長く打ち込んでいくとすぐ折り返しが連続して、何を書いていたか見失います。Ctrl+X Ctrl+E はその入力欄を、普段使っているエディタでまるごと開けるキーバインドです。100行のSQLや、構造化された設計案を書く場面で、これを知っているかどうかで体感が変わります。

もう1つ知っておきたいのは、これは Ctrl+G と完全に同じ機能だという点です。公式ドキュメントの表でも1行にまとめられていて、Ctrl+X Ctrl+E の方は readline 由来の歴史的な押し方として併記されています。

噛み砕くと

イメージは「ホテルの部屋の小さな机で長文を書こうとしてる時、フロントに頼んで会議室を貸してもらう」感じです。小さい机は、メモ書きや1〜2行の指示にはちょうどいいですが、100行の表や手順書を広げる場所じゃありません。

Ctrl+X Ctrl+E は、その机を一旦離れて、広い会議室にあたる普段使ってるエディタに資料を持ち込んで作業し、書き上がったら机に持ち帰る動線が、ワンキーで完成します。

大事な前提:パソコン側にどのエディタで開くかを教えていないと、何も起きない

このキーバインドは「パソコンが起動時に覚えてる設定値」の中の $EDITOR という項目を見て、そこに書かれているアプリを起動します。$EDITOR が空っぽだと、押しても無反応か、エラーで終わります。

確認は1行で済みます。ターミナルで次を叩くだけです。

$ echo $EDITOR

何か文字列が返ってきたら設定済み、空っぽなら未設定。未設定なら、まずはここを通してから Ctrl+X Ctrl+E に進む。

「料理ブログのレシピDB移行で100行のプロンプトを書く」を例に、実際の手順を見る

題材は、料理ブログのレシピDB移行です。旧テーブルから新テーブルにデータを移すために、Claudeへの指示として、SQL文の中で使うテーブル設計案・制約一覧・移行手順を100行のプロンプトで渡したい、というシナリオです。

ステップ1: $EDITOR をセットする(初回だけ)

VS Code を使う前提で進めます。ターミナルで次を打ちます。

$ export EDITOR="code -w"

ポイントは -w の方です。これは wait の頭文字で、「ファイルを閉じるまで待て」という指示です。これを付けないと VS Code はファイルを開いた瞬間にコマンドだけ即座に返してきて、Claude Code 側が「もう編集終わったんだな」と判断して空のプロンプトで戻ってきます。-w を付けると、VS Code がファイルを閉じるまでブロック状態を保ちます。ここで初心者がやりがちな勘違いです。

ステップ2: Claude Code を起動して、軽くプロンプトを書き始める

$ claude

入力欄が出たら、まず短く要件だけ書きます。

レシピDBの移行プランをまとめたい

この時点ではまだ短文です。ここから一気に100行に膨らませる前に、外部エディタに切り替えます。

ステップ3: Ctrl+X Ctrl+E を押す

Ctrl を押しながら X、続けて Ctrl を押しながら E。指癖としては「Ctrl を押しっぱなしで X と E を順に叩く」と1動作で終わります。

VS Code が立ち上がり、さっきの「レシピDBの移行プランをまとめたい」が1行入った状態でファイルが開く。一時ファイル扱いで、画面上は名前のないテキストファイル。

ステップ4: VS Code 側で100行に育てる

ここからは普段のエディタ操作です。インデント、コピペ、検索置換、複数カーソル、好きに使えます。たとえばこんな感じに書き足していきます。

レシピDBの移行プランをまとめたい。

【旧テーブル】recipes
- id (INT, PRIMARY KEY)
- title (VARCHAR 255)
- body (TEXT)
- created_at (DATETIME)

【新テーブル】recipes_v2
- id (BIGINT, PRIMARY KEY, AUTO_INCREMENT)
- slug (VARCHAR 200, UNIQUE NOT NULL)
- title (VARCHAR 255, NOT NULL)
- body_markdown (MEDIUMTEXT)
- cuisine (VARCHAR 50, NULLABLE)
- difficulty (TINYINT, 1-5)
- published_at (DATETIME, NULLABLE)
...

こんな調子でテーブル設計案・制約一覧・移行手順を書き連ねて、気がつくと100行になっています。プロンプト入力欄でやろうとしたら絶対に途中で見失うやつです。

ステップ5: 保存して閉じる

VS Code でファイルを保存し、タブを閉じます。Mac なら Cmd+S、Windows なら Ctrl+S です。タブを閉じた瞬間、Claude Code 側のプロンプト入力欄にこの100行がそのまま戻ってきています。手元の入力欄をのぞくと、書いた内容が全部入っています。

ステップ6: Enter で Claude に投げる

あとはいつも通り Enter を押すだけです。100行のプロンプトが Claude に渡って、移行用SQLや手順スクリプトが返ってきます。

Ctrl+X Ctrl+E でできること・できないこと

  • できること: 書きかけのプロンプトを $EDITOR で指定したエディタで開いて、保存して閉じれば Claude Code 側に内容が戻る
  • できること: /config の「Show last response in external editor」をONにしておくと、エディタを開いた時点で Claude の前回応答が # 始まりのコメント行として先頭に貼られる。コメント部分は保存時に自動で消えるので、引用しながら次の指示を書ける
  • できないこと: $EDITOR が設定されていない状態で勝手にエディタを探す動作。こちらで1度通す必要がある
  • 意味が薄い場面: 1〜2行の短い指示。入力欄の中で Shift+Enter\+Enter で改行する方が速い

使いどころ3シナリオ(具体題材で再現)

シナリオ1: 100行超のSQLや構造化プロンプトを書きたい

料理ブログのレシピDB移行、家計簿アプリのテーブル再設計、社内ツールのAPIスキーマ定義書。どれも「テーブル名・カラム名・型・制約」が縦に長く並び、途中でインデント揃えや検索置換が要ります。入力欄の細い1行で書こうとすると30行目あたりで認知が崩壊します。外部エディタなら検索置換・複数カーソル・シンタックスハイライトが全部使えて、書き上がりが段違いです。

シナリオ2: 前回の Claude の応答を引用しながら次の指示を書きたい

Claude が出してきたコード案に対して「ここを変えて、ここはこのまま、ここは別案を3つ出して」と細かく指示したい時。/config で「Show last response in external editor」をONにしておくと、Ctrl+X Ctrl+E を押した瞬間、エディタの上半分に Claude の前回応答が # コメントで貼られた状態で開きます。コメント部分を見ながら、その下に具体的な書き換え指示を並べていけます。# のままにしておけば保存時に Claude Code 側で自動的に削除されるので、コメントを消す手間が要りません。

シナリオ3: 書きかけのプロンプトを一旦寝かせて、別の作業の合間に育てたい

長文プロンプトの下書きを VS Code の方で開きっぱなしにしておけば、Slack を見たり、別の資料を読んだりしながら、思いついた時に追記できます。閉じない限り Claude Code 側は待ち状態のままなので、急がず腰を据えて練れます。これ、地味に効きます。

初心者が踏みやすい落とし穴

  • $EDITOR が未設定だと押しても何も起きない。最初に echo $EDITOR で中身を確認して、空っぽなら export EDITOR=nanoexport EDITOR=vimexport EDITOR="code -w" を通してから試す
  • VS Code を $EDITOR にする時は code -w 必須-w なしの code だけだと VS Code がコマンドを即座に返して、Claude Code 側が「閉じた」と判断して空のプロンプトで戻る。100行書いてもそれが反映されません
  • Ctrl+X Ctrl+K と混同しない。同じ Ctrl+X 始まりだが、こちらは「裏で動いてるサブエージェント全停止」で、3秒以内に2回押すと確定する完全に別物のキーバインドです。誤爆して慌てない
  • 保存せずに閉じるとプロンプト欄は元に戻る。エディタで100行書いても、保存しないままタブを閉じると Claude Code 側には変更が反映されません。書きかけを捨てないこと
  • 「Show last response in external editor」は /config から手動でONにする。デフォルトはOFFなので、ONにしない限り # コメント付きの前回応答 prepend は起きません
  • Sublime Text を使う場合も subl -w-w がないと VS Code と同じ罠を踏みます
  • Ctrl+G との関係は完全同義。機能差はなく、指癖で選ぶだけ。bash/zsh で readline に慣れている人は Ctrl+X Ctrl+E、新しく覚えるなら Ctrl+G の方が押す回数が少なくて済みます

書き方

Ctrl を押しながら X、続けて Ctrl を押しながら E。
または Ctrl+G で同じ動作。

やってみるとこうなる

入力

Ctrl+X Ctrl+E

出力例

プロンプト入力欄に書きかけだった内容が、$EDITOR で指定したエディタ(例: VS Code)で一時ファイルとして開く。
編集して保存・タブを閉じると、書いた内容がそのまま Claude Code 側のプロンプト入力欄に戻っている状態になる。
/config で「Show last response in external editor」をONにしてある場合、エディタを開いた時点でファイル先頭に Claude の前回応答が # コメント付きで貼られた状態になる。保存時に # コメント部は自動削除される。

このページに出てきた言葉

$EDITOR
パソコンが起動時に覚えてる設定値の1つで、「テキストファイルを開けと言われた時にどのアプリで開くか」を指定する場所。<code>echo $EDITOR</code>で中身を確認できる
readline
bashやzshで文字入力欄を扱うために古くから使われている部品。多くのターミナルアプリの入力欄がこの流儀(キーバインド)を引き継いでいる
prepend(プリペンド)
ファイルや文章の「先頭に貼り付ける」操作のこと。/config でShow last response in external editorをONにすると、Claudeの前回応答が外部エディタを開いた時点でファイル先頭にprependされる
エディタ
文章を書いたり書き換えたりするためのアプリ。Windowsの「メモ帳」、Macの「テキストエディット」、VS Code、vim、nanoなど
ターミナル
黒い画面で文字のコマンドを打ち込む画面。Windowsだと「コマンドプロンプト」「PowerShell」、Macだと「ターミナル」アプリ
vim / nano
ターミナルの中で動くエディタ。vimはキー操作だけで動かす設計で慣れると速い。nanoは画面下に操作方法が常時表示されていて初見でも閉じ方が分かる
-w スイッチ
VS Codeを<code>code -w</code>で起動した時に「ファイルを閉じるまで待つ」モードにする指示。これがないとVS Codeが即座にコマンドを返してきて、Claude Code側が「もう編集終わった」と判断してしまう。waitの頭文字
サブエージェント
Claude Codeが本体とは別に裏側で並行して走らせる小さな作業ユニット。Ctrl+X Ctrl+K で全停止できるが、Ctrl+X Ctrl+E(外部エディタ起動)とは別物

関連項目

公式ドキュメント

https://code.claude.com/docs/en/interactive-mode

-

← 戻る