Ctrl+R履歴検索でClaude Codeの過去プロンプトを再利用する
Ctrl+Rで過去のプロンプトを対話的に検索し呼び出す手順です。フルスクリーン表示・Vimモードでの挙動の違いと、Ctrl+Oのトランスクリプト検索との使い分けを扱います。
Ctrl+Rを押すと、過去に入力したプロンプトを対話的に検索し、そのまま入力欄に呼び戻せます。似た指示を何度も打つ作業や、数セッション前に書いた長いプロンプトを探すときに、上矢印で1件ずつ遡るより速く目的の1行にたどり着けます。入力途中のプロンプトを一時退避したいならCtrl+Sでのプロンプトスタッシュが使えます。
この記事の挙動はv2.1.287のドキュメントと、同バージョンのclaude --versionの出力で確認した範囲に基づきます。ただし検索の画面操作そのものはモデルを呼ぶ対話セッションが必要なため、手元で実行して確かめたわけではありません。キー名と既定値は、公式のキーバインド一覧とインタラクティブモードの章を突き合わせた内容です。
検索から呼び出しまでの操作手順
クラシックレンダラーでの一連の流れです。
Ctrl+Rで過去のプロンプトを呼び戻す
- 1
検索を開く
Ctrl+Rを押すとインライン検索が始まります。 - 2
語を入力する
探したい語を打つと、一致箇所がハイライトされます。
- 3
古い一致へ進む
Ctrl+Rをもう一度押すたびに、より古い一致へ移ります。 - 4
入力欄に確定する
TabまたはEscで一致内容を入力欄に置き、そのまま編集を続けます。 - 5
すぐ送信する
Enterなら編集を挟まずに即座に送信します。 - 6
やめる
Ctrl+Cで元の入力に戻ります。検索語が空の状態のBackspaceも同じキャンセル扱いです。
検索は新しい順に走り、同じ内容が複数回あれば最新の1件に畳んで表示します。履歴の読み込みが終わる前でも、確定やキャンセルはその場で反映されます。
探しているのに出てこないとき
「確かに打ったはずの指示が見つからない」ときは、まず2通りを疑います。
1つ目は、探している対象がプロンプトではないケースです。Claudeの返答やツールの出力に出ていた文字列は、Ctrl+Rの検索対象に入っていません。それを探すなら、次の節で扱うCtrl+Oのトランスクリプトビューアが対象です。
2つ目は、フルスクリーン表示でスコープが狭まっているケースです。ダイアログの検索範囲が「このセッション」や「このプロジェクト」に絞られていると、範囲外の入力は出てきません。クラシックレンダラーのインライン検索は常に全プロジェクトを対象にするので、この絞り込み自体が起きません。
検索語は、覚えている言い回しの全文より、その指示にしか出てこない短い語を1つ入れるほうが当たりやすくなります。「auth」や「マイグレーション」のような語が向いています。
保存単位は作業ディレクトリごとです。Claude Codeは入力したプロンプトをこの単位で持ち、上矢印のナビゲーションもこれに沿います。同じプロンプトを2回続けて送っても記録は1件なので、上矢印は同じ行で足踏みせず、直前と異なる入力へ進みます。
/clearで新しいセッションを始めても履歴は消えません。呼び出し順は新しいセッションの入力が先で、古いセッションの入力がその後ろに続きます。会話そのものは保持されていて、/resumeで開き直せます。
貼り付けたテキストを含むプロンプトの再送
呼び戻したプロンプトに貼り付けた内容が含まれていれば、再送時には貼り付けた全文が送られます。貼り付けた内容がその間に自動削除の対象になっていた場合は、[Pasted text #N]という表示用の文字列そのものは送られません。
貼り付けた内容の実体は~/.claude/paste-cache/に保存されます。後のセッションで呼び戻して再送しても全文が届くのは、このためです。cleanupPeriodDaysより古いキャッシュは削除され、欠けた貼り付けがあれば通知が出ます。通常のプロンプトで文字が残っていればプレースホルダーだけを外して残りを送り、外すと空になるプロンプトは送信を取り消して元の文字を入力欄に残します。
長いテキストを貼って使い回す運用では、呼び出した直後の入力欄を一度目視してから送ると取りこぼしに気づけます。そもそも貼り付けは、800文字超または3行超になると[Pasted text #1 +120 lines]のようなプレースホルダーに畳まれます。大きなファイルやログは、貼らずに保存してファイルのパスで渡すほうが、トランスクリプトも読みやすいままです。
上矢印とCtrl+R、どちらで探すか
上矢印は履歴を1件ずつ戻る操作です。10ターン前のプロンプトを探すなら10回押す必要があり、会話が長引くほど手数は増えます。
Ctrl+Rはキーワード一致で一足飛びに探せます。何ターン前かを忘れていても、固有の単語を1つ覚えていれば1回の検索で届きます。逆に直前や2つ前の入力を微修正して送り直すだけなら、上矢印のほうが手数は少なく済みます。
判断の軸は、探したい入力が何ターン前かを覚えているかどうかです。覚えているなら上矢印を必要な回数だけ、忘れていて単語だけ覚えているならCtrl+Rです。頻繁に使う長文プロンプトはCLAUDE.mdやSkillへ切り出す選択肢もあります。その場限りの言い回しを再利用したいだけなら、Ctrl+Rのほうが小回りが利きます。
上矢印側には、見落としやすい挙動があります。入力が複数行にまたがる(折り返しや改行を含む)ときは、最初のUpでカーソルが入力欄の中を動き、先頭や末尾の行に着いてから、もう一度押して初めて履歴ナビゲーションに入ります。長文を打っている最中にUpを押して履歴が出てこないのは、この仕様のためです。
もう1つ、Escを2回押して消した下書きは履歴に保存され、Upで呼び戻せます。送信待ちのメッセージがあるときは、先頭行でのUpが履歴ではなくキューの取り戻しに使われます。
フルスクリーン表示ではCtrl+Rの動きが変わる
Claude Codeには従来のクラシックレンダラーと、フルスクリーン表示(TUI)の2種類の描画モードがあります。どちらで始まるかは環境で決まります。機能フラグを取得するセッションで2026年5月6日以降に初めて使い始めた場合は、フルスクリーンで起動します。Bedrockなど機能フラグを取得しない環境では、そのマシンの初回起動がv2.1.239以降ならフルスクリーンです。
tui設定や環境変数、起動時に出る切り替えダイアログでも変わります。ダイアログは、答えたかどうかにかかわらず3回の起動で表示を終えます。今どちらで動いているかは、引数なしの/tuiで確かめるのが確実です。
Ctrl+Rの検索画面はレンダラーで別物
クラシックレンダラー
入力欄の位置でそのまま検索が始まります。対象は常に全プロジェクトで、範囲を絞る手段はありません。TabかEscで確定、Enterで確定して送信、Ctrl+Cでキャンセルです。
フルスクリーン表示
独立したダイアログが開き、入力するたびに一致が絞り込まれます。Up/Downで候補を移動し、Ctrl+Sで範囲を「このセッション → このプロジェクト → 全プロジェクト」と切り替えます。EnterかTabで入力欄に置き、Escでキャンセルします。
同じプロジェクト内の履歴だけを見たいなら、スコープを切り替えられるフルスクリーン表示が向いています。ダイアログも直近のプロンプトから先に並べ、選んだスコープの古い入力は読み込み次第追加されます。新しい順で、重複は最新の1件に畳む基本ルールはクラシックと同じです。
キーを変えたいとき:keybindings.jsonのhistorySearch
Ctrl+Rの検索キーは、/keybindingsで開く~/.claude/keybindings.jsonから変えられます。ファイルの変更は再起動なしで反映されます。検索中のキーはHistorySearchというコンテキストにまとまっており、既定値は次のとおりです。
| アクション | 既定のキー | 動作 |
|---|---|---|
history:search | 既定のキーCtrl+R | 動作検索を開く(HistorySearchの外で使う) |
historySearch:next | 既定のキーCtrl+R | 動作次の一致へ |
historySearch:accept | 既定のキーEscape, Tab | 動作入力欄に確定 |
historySearch:cancel | 既定のキーCtrl+C | 動作キャンセル |
historySearch:execute | 既定のキーEnter | 動作確定して実行 |
historySearch:cycleScope | 既定のキーCtrl+S | 動作スコープ切り替え |
書き方は、コンテキスト名のブロックの中にキーとアクションを並べる形です。次の例は、次の一致へ進むキーをCtrl+Gにも割り当てる書式です。
{
"bindings": [
{
"context": "HistorySearch",
"bindings": {
"ctrl+g": "historySearch:next"
}
}
]
}この設定は書式を示す仮の例です。どのキーが空いているかはターミナルやOSの割り当てに左右されるので、自分の環境で試してください。
注意点が2つあります。historySearch:next・accept・cancel・executeの既定値はクラシックレンダラーのインライン検索向けで、cycleScopeはフルスクリーン表示でだけ効きます。フルスクリーンのダイアログ側のEnter・Tab・Escは固定で、再割り当てできません。ショートカット全体の一覧はClaude Codeショートカット一覧にあります。
Vimモードでは/が同じ動作をする
VimモードのNORMALモードでは、/キーがCtrl+Rと同じ逆履歴検索を開きます。bash/zshのvi-modeに合わせた挙動で、キーボードから手を離さずに検索へ入れます。
検索プロンプトが空の状態では、Esc→i→/でコマンドメニューを開く手順のヒントが表示されます。コマンドメニューの起動キーだと思って/を押すと検索が開くので、NORMALモードの/は検索専用と覚えておくと迷いません。
NORMALモードでカーソルが入力欄の先頭または末尾にあり、それ以上動かせない場合は、j/kや矢印キーも履歴のナビゲーションに切り替わります。空の入力欄で←を押すとagent viewを開く操作になり、これはNORMALモードとINSERTモードの両方で共通です。
Ctrl+R・Ctrl+O・上矢印は目的が違う
似た働きに見える操作でも、探す対象は別々です。
| 操作 | 探す対象 | 向いている場面 |
|---|---|---|
Ctrl+R | 探す対象過去に自分が送ったプロンプトの文字列 | 向いている場面数十件前の指示をキーワードで探したいとき |
Ctrl+O(トランスクリプトビューア)/ フルスクリーンでの/検索 | 探す対象今の会話に表示されているツール実行結果や応答の中身 | 向いている場面直前の会話で実行したコマンドの出力を再確認したいとき |
Up/DownまたはCtrl+P/Ctrl+N | 探す対象直前のプロンプトから1件ずつ | 向いている場面1つ前・2つ前に打った内容へすぐ戻りたいとき |
!コマンドのTab補完 | 探す対象!で実行した過去のシェルコマンドのみ | 向いている場面直前に打ったシェルコマンドを打ち直したいとき |
Ctrl+Oはプロンプト履歴ではなく、現在のセッションで起きたツール呼び出しや応答を対象にします。既定ではCalled slack 3 timesのように1行へ折りたたまれているMCP呼び出しも、ビューアを開くと展開されます。各応答にはタイムスタンプと使用したモデルも付きます。
フルスクリーン表示では、トランスクリプトモードで/を押すと会話内を検索でき、n/Nで次や前の一致へ飛べます。端末側のCmd+fやtmuxの検索から会話が見えないのは、会話がネイティブのスクロールバックではなく別画面に描かれているためです。トランスクリプトモードで[を押すと全文がスクロールバックに書き出され、そこから端末の検索を使えます。書き出しは、Escかqでトランスクリプトモードを抜けるまで続きます。
{と}で前後のプロンプトへ飛べるので、自分が打った入力を会話側から辿る手段にもなります。vを押すと会話を一時ファイルに書き出し、$VISUALか$EDITORで開きます。
「前に何を打ったか」ならCtrl+R、「Claudeが何を返したか」ならCtrl+O、と分けると迷いません。
よくある質問
検索中に入力欄のスペルチェックは効きますか
効きません。入力欄の綴り誤りへの下線は、シェルモードとCtrl+R履歴検索の最中、音声入力の間は行われません。検索語の綴りが違っていても下線は出ないので、一致しないときは語を短くして試します。
!コマンドのTab補完はどの範囲のシェルコマンドを対象にしますか
!の後ろでTabを押すと補完されるのは、現在のプロジェクトで過去に!を付けて実行したシェルコマンドです。Ctrl+Rが検索するプロンプト履歴とは別の一覧なので、シェルコマンドを打ち直したいときは!+Tab、プロンプトを探したいときはCtrl+Rを使います。
まとめ
履歴検索で困るのは、検索そのものより「どのレンダラーで、どの範囲が対象か」を取り違えたときです。まず/tuiで描画モードを確かめ、範囲を絞りたければフルスクリーンのCtrl+S、キーが合わなければHistorySearchの割り当てを見直す、という順で切り分けられます。