Claude CodeのCtrl+Gで外部エディタにプロンプトを開く
Ctrl+Gは$VISUAL/$EDITORで指定した外部エディタでプロンプトを編集し、保存すると入力欄に戻す機能です。使える場面・前回の返信を表示する設定・キー割り当ての変え方をまとめます。
Claude Codeの入力欄でCtrl+Gを押すと、入力中のプロンプトが手元の外部エディタで開きます。編集して保存すれば、その内容がそのまま入力欄に戻ります。長いプロンプトを書くとき、ターミナルの1行編集では折り返しやカーソル移動が面倒になりがちですが、使い慣れたエディタの検索・置換・複数行選択がそのまま使えます。呼び出すエディタはClaude Code側の設定では選べず、シェルの環境変数で決まるとみられます。ここを知らずに使うと、開いたエディタが想定と違って戸惑うことがあります。
呼び出すエディタは$VISUALと$EDITORで決まるとみられる
Ctrl+G(またはreadline由来の別名Ctrl+X Ctrl+E)は、システムの既定のテキストエディタでプロンプトを開きます。Claude Code自体にエディタを選ぶ設定項目はなく、シェルの$VISUALと$EDITORという2つの環境変数で決まると考えられます。公式ドキュメントにCtrl+Gと$VISUAL/$EDITORを直接結び付けた記述はありません。ただしClaude Codeの他の外部エディタ呼び出し(claude agentsのトランスクリプト表示)はシェルの$VISUAL/$EDITORに従うよう修正された経緯があり、同じ設計とみられます。
$VISUALと$EDITORはUnix系シェルで古くから使われてきた環境変数です。画面全体を使う対話型エディタを$VISUALに、行指向の軽いエディタを$EDITORに分けて設定する慣習がありますが、今のターミナルエディタはほとんどが画面全体を使うため、両方に同じ値を入れておけば混乱しません。今どちらが設定されているかはシェルで確認できます。
echo "$EDITOR"
echo "$VISUAL"未設定なら、起動ファイルに1行足して恒久的に設定します。
export EDITOR="vim"
export VISUAL="vim"GUIエディタを使いたい場合は、保存してプロセスが終了するまで呼び出し元を待たせる起動オプション付きで登録するのが一般的な運用です(VS Codeならcode --wait)。v2.1.216のchangelogでは、GUIエディタをCtrl+Gで開いている間のマウス・フォーカスの乱れが修正されており、ターミナル系だけでなくGUIエディタも対象に含まれることが読み取れます。
Ctrl+X Ctrl+Eという組み合わせ自体は目新しいものではありません。GNU readlineがedit-and-execute-commandという名前で古くから割り当ててきたキーで、bashの行編集でも入力中のコマンドラインを外部エディタで書き直すのに使われています。Claude Codeはv2.1.83でこれをそのまま別名として追加しており、readlineの操作に慣れた手はキー割り当てを覚え直さずに済みます。
前回の返信をコメント付きで編集画面に出す
/configのShow last response in external editorをオンにすると、Ctrl+Gで開くエディタの先頭にClaudeの直前の返信が#コメントとして挿入されます。返信を見ながら次のプロンプトを書けて、保存時にはコメント行がすべて取り除かれ、その下の本文だけが送信されます。この設定はv2.1.110で追加されました。
設定キーはexternalEditorContextで、既定値はfalseです。~/.claude.jsonに直接書いても有効になります。
{
"externalEditorContext": true
}オンにした状態でエディタを開くと、バッファの先頭に区切り線と返信本文が#コメントとして並び、そのあとに空の入力行が続きます。マーカー行より下がそのままプロンプトになるので、コメントの内容を消し忘れても送信内容には混じりません。
このキーは~/.claude.jsonに保存される「Global config」のスコープを持ち、プロジェクトごとの.claude/settings.jsonには書けません。個人の作業スタイルに紐づく設定として扱われており、/configから切り替えればどのプロジェクトでも同じ挙動になります。長い返信を受けたあとに、その内容を踏まえた追加指示や訂正を書くことが多い人ほど、直前の文脈が編集画面に出ている恩恵が大きくなります。
入力欄のスペルチェックとは守備範囲が別
Claude Codeの入力欄には、入力中の単語をリアルタイムで下線表示するスペルチェック機能も別に用意されています。ただしこの機能は入力ボックスの中でのみ動作し、シェルモード・Ctrl+Rの履歴検索・音声入力中は何もチェックしません。Ctrl+Gで外部エディタに切り替えた瞬間もこの下線表示の対象外になり、そこから先は完全にエディタ自身の校正機能に委ねられます。aspell・hunspell・ispellのいずれかを導入してspellcheck設定をオンにしていても、外部エディタ側の校正拡張とは独立に動くので、両方を併用しても取り合いは起きません。プロンプト入力のスペルチェック機能自体の設定方法はClaude Code v2.1.235 — プロンプト入力のスペルチェック追加を含む19項目の更新にまとめています。
入力欄以外でもCtrl+Gは使える
Ctrl+Gが効くのはメインのChat入力欄だけではありません。公式ドキュメントとchangelogを突き合わせると、対応する場面には差があります。
| 場面 | Ctrl+Gの扱い | 補足 |
|---|---|---|
| メイン入力欄(Chat) | Ctrl+Gの扱い既定バインド。Ctrl+X Ctrl+Eも同じ動作 | 補足通常のプロンプト編集 |
claude agentsのdispatch入力(agent view) | Ctrl+Gの扱いChatコンテキストのchat:externalEditorを継承しCtrl+Gが効く | 補足コードCtrl+X Ctrl+Eは単一キー入力前提のagent viewでは発火しない |
| プラン承認ダイアログ | Ctrl+Gの扱いフッターにctrl+g to edit in <editor>と表示 | 補足承認前の内容をその場で編集できる |
AskUserQuestionの「その他」入力欄 | Ctrl+Gの扱いv2.1.9以降で対応 | 補足選択式の質問でも自由記述を外部エディタで書ける |
フッターに表示される<editor>の部分には、実際に検出されたエディタ名が入ります。押す前に何が開くか確認したいときは、ここを見れば$VISUAL/$EDITORの設定が反映されているか判断できます。
AskUserQuestionの「その他」欄は、あらかじめ用意された選択肢のどれにも当てはまらないときに自由記述で答えるための入力欄です。公式ドキュメントはこの用途を「custom response」と呼び、Ctrl+Gの説明でも「プロンプトまたはcustom responseを編集する」という書き方をしています。選択式の質問に長い前提条件や複数行の反例を添えて答えたいときに使うと、狭い1行入力より書きやすくなります。この対応はv2.1.9からで、比較的早い段階でメイン入力欄以外にも展開されていたことが分かります。
キー割り当ての変え方とつまずきやすい点
Ctrl+Gの実体はchat:externalEditorというアクション名で、~/.claude/keybindings.jsonから任意のキーに変更できます。次の例はCtrl+Eに割り当て直し、代わりにCtrl+Uを無効化する設定です。
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/en/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+e": "chat:externalEditor",
"ctrl+u": null
}
}
]
}既定ではCtrl+GとCtrl+X Ctrl+Eの両方がchat:externalEditorにバインドされています。片方だけ残して使い分けたい場合も、それぞれ個別にnullで解除します。設定ファイルへの変更はClaude Codeの再起動なしに自動で検知・反映されるため、保存してすぐに新しいキーで試せます。
実際に使ってみるとつまずきやすい点がいくつかあります。
- agent viewでは
Ctrl+X Ctrl+Eが効かない: agent viewのキー入力は単一キーストローク前提のため、2打鍵のキーの組み合わせは発火しません。バックグラウンドセッションの管理画面ではCtrl+Gだけを使います - バックグラウンドセッションと相性の悪いエディタがあった:
claude agentsで起動するバックグラウンドセッションには、通常のターミナルセッションと違って自分専用の制御端末が最初から結び付いていません。emacs -nwやmicroのように/dev/ttyを直接開いて動作するエディタは、この違いが原因で「Emacs quit unexpectedly」のようなエラーを起こしていました。v2.1.251で修正済みです - keybindings.jsonでのリマップが一部反映されないことがあった:
claude agents側でCtrl+Gのリマップ設定が無視される不具合があり、v2.1.257で専用のAgentsコンテキストが整備されて解消しました - エディタが起動に失敗しても以前は気づきにくかった: v2.1.6でエラー表示が追加され、
$EDITORの指定ミスなどで起動できないときに画面上で分かるようになりました Ctrl+Xから始まるキーの組み合わせは他の機能とプレフィックスを共有する:Ctrl+X Ctrl+Eと、バックグラウンドサブエージェントを全停止するCtrl+X Ctrl+Kは、どちらも先頭のCtrl+Xを共有します。片方だけnullで解除してもCtrl+X自体は残るため、単独のキーとして別のアクションに再利用したいときは、同じプレフィックスを持つキーの組み合わせをすべて解除する必要があります
Ctrl+Gはこう追加・改善されてきた
初出から現在の形になるまで、いくつかの節目があります。
| バージョン | 公開日 | 変更 |
|---|---|---|
| v2.0.10 | 公開日2025年10月8日 | 変更Ctrl+Gでシステムの既定のテキストエディタにプロンプトを開く機能を追加 |
| v2.1.6 | 公開日2026年1月13日 | 変更エディタの起動失敗時にエラー表示を追加 |
| v2.1.9 | 公開日2026年1月16日 | 変更AskUserQuestionの「その他」入力欄でもCtrl+Gに対応 |
| v2.1.83 | 公開日2026年3月25日 | 変更readlineネイティブの別名Ctrl+X Ctrl+Eを追加 |
| v2.1.110 | 公開日2026年4月15日 | 変更前回の返信をコメントとして表示するexternalEditorContextを追加 |
1年足らずの間に、単なるエディタ呼び出しから「戻る前提の編集体験」へと機能が積み増されてきました。
こういう場面で効果が大きい
ここまでの機能を踏まえると、Ctrl+Gが生きる場面は次のように絞れます。
- 数十行にわたる指示や、複数のコードスニペットを貼り合わせて渡したいとき
- 直前の返信を読み返しながら訂正や追加条件を書きたいとき(
externalEditorContextと組み合わせる) AskUserQuestionの「その他」欄に、選択肢では表現しきれない条件を複数行で書きたいとき- ターミナルの折り返し表示では読みにくい、長いエラーメッセージやログを整形しながら貼り付けたいとき
逆に、一言二言で終わる指示ではエディタの起動そのものが遠回りになります。入力の長さと複雑さ、そして見直したい情報量の多さで使い分けるのが実用的です。
Ctrl+Gと同じ入力まわりの操作としては、過去のプロンプトを対話的に呼び戻すCtrl+Rもあわせて覚えておくと効率が上がります。使い方の違いはCtrl+R履歴検索でClaude Codeの過去プロンプトを再利用するにまとめてあります。Ctrl+G以外のショートカット全般や、keybindings.jsonのコンテキスト一覧・表記ルールを俯瞰したい場合はClaude Codeショートカット一覧 — 既定操作とkeybindings.jsonでのカスタマイズが早見表になっています。
Ctrl+Gは特別な設定なしでも今すぐ使えますが、$VISUAL/$EDITORを明示し、externalEditorContextを自分の使い方に合わせてオンオフしておくと、長いプロンプトを書くたびの手間がはっきり減ります。設定自体は環境変数1行と/configの項目1つだけなので、一度決めてしまえば以降は手を止めずに済みます。