次: , 前: Search, 上: Search


10.1 インクリメンタルサーチ

インクリメンタルサーチでは、 探索文字列の最初の文字を打つとただちに探索を開始します。 探索文字列を入力するたびに、 Emacsは(それまでに入力した)文字列がどこでみつかるか表示します。 目的の箇所を特定するのに十分なだけの文字を打ってしまえば、 そこで終りにできます。 つぎに何をするかにもよりますが、 <RET>で探索を陽に終了する必要がある場合もあります。

C-s
前向きにインクリメンタルサーチする(isearch-forward)。
C-r
後向きにインクリメンタルサーチする(isearch-backward)。

C-sはインクリメンタルサーチを始めます。 C-sはキーボードから文字を読み取り、 打った文字が最初に現れる位置までカーソルを移動します。 たとえば、C-sに続けてFを打つと、 カーソルは最初に現れる`F'の直後に移動します。 さらにOを打つと、カーソルは最初に現れる`FO'の直後に移動します。 さらにOを打つと、探索を開始した場所以降で最初に現れる `FOO'の直後にカーソルが移動します。 各段階において、反転表示できる端末では、 探索文字列に一致するバッファ内のテキストを強調表示します。 また、各段階において、エコー領域に表示した現在の探索文字列も更新します。

探索する文字列を打ちまちがえたときには、<DEL>で取り消せます。 <DEL>を1回押すごとに、探索文字列の最後の文字を取り消していきます。 ただし、Emacsがつぎの入力文字を受け付け可能になるまで、 この取り消し操作は実行できません。 つまり、取り消そうと思っている文字をみつけるか、 もしくはみつけられなかったことが確定する必要があります。 それまで待てないなら、以下に説明するようにC-gを使ってください。

目的の箇所まで移動できたら、<RET>を打ちます。 すると、探索を終了しカーソルはその箇所に留まります。 また、探索に関係ないコマンドを打っても、 探索を終了し、そのコマンドを実行します。 したがって、C-aと打てば、探索を終了し、カーソルを行頭に移動します。 <RET>が必要な場面は、 つぎに入力したいコマンドが、印字文字、<DEL>、<RET>、および、 探索で特別な意味を持つその他の各種コントロール文字 (C-qC-wC-rC-sC-yM-yM-rM-s)である場合だけです。

`FOO'を探してそれがみつかった場合でも、 予期していた`FOO'ではないこともあるでしょう。 最初の`FOO'以降に、2つめの`FOO'があることを 忘れていたような場合です。 このようなときには、さらにC-sを打てば、 探索文字列のつぎの出現箇所に移動できます。 この操作は何度でも繰り返せます。 行き過ぎてしまったときには、<DEL>でC-sの操作を取り消せます。

探索を終了したあとでも、単にC-s C-sと打てば、 ふたたび同じ文字列を探索できます。 つまり、最初のC-sがインクリメンタルサーチを起動して、 つぎのC-sが『再探索』を意味します。

以前に探索した文字列を再利用するには、 探索リング(search ring)を使います。 コマンドM-pM-nでリング内を移動して、 再利用する文字列を取り出します。 これらのコマンドは、探索リング内の選択した要素をミニバッファに置きますから、 編集することも可能です。 C-sC-rを打てば、 文字列の編集を終了して探索を開始できます。

探している文字列がまったくみつからなかった場合には、 エコー領域に`Failing I-Search'と表示されます。 カーソルは、指定した文字列に可能な限り一致する箇所の直後にあります。 たとえば、`FOOT'を探索しようとしたのに`FOOT'がなければ、 カーソルは`FOOL'の`FOO'の直後にあります。 この時点でできることはいくつかあります。 文字列を打ちまちがえたのならば、それを消去して訂正します。 その箇所でよいのなら、『探索したものを受理する』ために、 <RET>か他のEmacsコマンドを打ちます。 あるいは、C-gを打てば、 探索文字列からみつけられなかった文字(`FOOT'中の`T')を取り除き、 みつけた文字列(`FOOT'中の`FOO')は そのままにしておくこともできます。 ここで、さらにC-gを打つと、 探索全体を取り止めて、探索を開始した位置に戻ります。

探索文字列に大文字を指定すると、 大文字小文字を区別(case-sensitive)して探索します。 探索文字列から大文字を削除すると、この効果は消えます。 See Search Case

探索に失敗したときに、さらにC-sを打って探索の続行を指示すると、 バッファの先頭からもう一度探索し始めます。 後向きの探索に失敗したときに再度C-rを打つと、 バッファの末尾から探索を再開します。 これらの操作は巻き直し(wrapping around)と呼ばれます。 巻き直しが起こると、探索のプロンプトには`Wrapped'が表示されます。 もともとの探索開始位置を通過してなお探索を続けると、 表示が`Overwrapped'に変わります。 これは、探索文字列にすでに一度一致した箇所を 再度探索していることを意味します。

『中断』文字C-gは、探索中には特別な意味があり、 その機能は探索の状態に依存します。 指定したものがみつかり入力待ちの状態にあると、 C-gは探索全体を取り消します。 カーソルは探索開始位置に戻ります。 Emacsが探索中であったり探索に失敗したために、 探索文字列内に未発見の文字がある場合にC-gを打つと、 探索文字列から未発見の文字を消去します。 そうすると、これで探索が成功したことになるので、 入力待ちになります。 続けてC-gを打つと、探索全体を取り消します。

改行を探索するには、C-jを打ちます。 コントロールSや改行などのコントロール文字を探索するには、 まずC-qを打ってクォートする必要があります。 C-qのこの機能は、挿入時の利用法に似ています (see Inserting Text)。 このコマンドは、あとに続く文字を、 同じ文脈における『普通の』文字と同様に扱うようにします。 文字を8進コードで指定することもできて、 C-qに続けて8進数字列を入力します。

C-rを使えば、後向き探索に変更できます。 ファイルのうしろのほうで探索し始めたために探索に失敗したのであれば、 これを試してください。 C-rを繰り返し打つと、後向きにさらに探索を続けます。 C-sは、ふたたび前向き探索を再開します。 探索中のC-rは<DEL>で取り消せます。

始めから後向きで探索するのであれば、 C-sのかわりにC-rを使って探索を始めます。 C-rは、後向きに探索するコマンドisearch-backwardを起動します。 前向き探索が開始位置よりうしろにある一致箇所をみつけるのと同様に、 後向き探索は開始位置よりまえにある一致箇所をみつけだします。

インクリメンタルサーチ中には、文字C-yC-wを使って、 バッファから探索文字列へテキストを取り込むことができます。 この機能は、ポイント位置にあるテキストの出現箇所を探すときに便利です。 C-wは、ポイント以降の単語を探索文字列の一部としてコピーし、 ポイントをその単語の末尾に進めます。 探索を繰り返す意味でC-sを打つと、 その単語を含んだ文字列を探索します。 C-yC-wに似ていますが、 現在行の残りの部分をすべて探索文字列にコピーします。 大文字小文字を区別しない探索では、 C-yC-wはともに、 コピーするテキストを小文字だけに変換します。

文字M-yは、キルリングから探索文字列にテキストをコピーします。 これには、ヤンクコマンドC-yがヤンクするのと 同じテキストを用います。 See Yanking

インクリメンタルサーチを終了すると、 探索開始前にポイントがあった位置にマークを置きます。 これにより容易にその位置に戻れます。 暫定マーク(transient-mark)モードでは、 マークが不活性のときに限って、 インクリメンタルサーチが設定するマークも不活性です。

インクリメンタルサーチ中に用いる特別な文字をカスタマイズするには、 キーマップisearch-mode-map中のバインディングを変更します。 バインディング一覧は、C-h f isearch-mode <RET>を使って isearch-modeに関する説明文を参照してください。

10.1.1 低速端末でのインクリメンタルサーチ

速度の遅い端末でのインクリメンタルサーチでは、 表示時間が少なくてすむように設計された表示形式を使います。 みつけた箇所でバッファを再表示するかわりに、 新たに1行分のウィンドウを作ってそこにみつけた行を表示します。 この1行分のウィンドウは、 探索することでポイントが画面に表示中のテキストから 飛び出た時点で使われます。

探索を終了すると、この1行分のウィンドウは消えます。 そして、Emacsは探索を完了したウィンドウを再表示して、 新たなポイント位置を示します。

低速向けの表示形式を使うのは、 端末のボーレートが変数search-slow-speedの値以下である場合で、 その初期値は1200です。

低速向けの表示形式に使う表示用ウィンドウの行数は、 変数search-slow-window-linesで制御します。 通常の値は1です。