next up previous contents index
: 括弧対応 : エディタ : 削除とキル   目次   索引

検索と置換

以下のコマンドのいくつかは,文字列を引数として受け取る. その場合には,文字列の入力をうながすメッセージがメッセージ行に表示され, ユーザの入力する文字列はメッセージ行にエコーされる. 文字列の入力はESCで終わり,それ以前に入力された文字は, 通常はすべて文字列の一部だとみなされる. 以下のコマンドが文字列入力時に利用できる.


ESC		 文字列の入力を終了する.

^Q 次の文字を無条件に文字列に挿入する.
DELまたはBS 直前の文字を削除する.
^U 文字列全体を削除する.
^G コマンドをキャンセルする.

編集テキスト内のある文字列を検索するには次のコマンドを用いる.

^S
《文字列》 (Search)
カーソル以降を検索する.
^R
《文字列》 (Reverse search)
カーソルより前を検索する.
^Sは,カーソル以降のテキストを検索し,引数として与えられた《文字列》が 最初に現れる位置(正確には,その文字列の直後)にカーソルを移動する. もし《文字列》がみつからなければエラー・メッセージを表示する. ^Rは,カーソルより前のテキストをカーソル位置からテキストの先頭に 向かって検索し,与えられた《文字列》が最初に現れる位置(正確には, その《文字列》の直前)にカーソルを移動する.

MINEは,最後に実行された^Sまたは^Rに対する文字列引数を 保存している.保存された文字列を検索するには,次のコマンドを使用する.

^S ^S
(Search again)
最後に検索された文字列をカーソル以降に探す.
^R ^R
(Reverse search again)
最後に検索された文字列をカーソルより前に探す.
これらのコマンドは,それぞれ^S^Rと同じ動作をするが, 引数をユーザに求めるのではなく,保存された文字列を検索する点だけが 異なっている. ^S ^S$n$回繰り返すことによって,同じ文字列が $n$番目に現れる位置にカーソルを移動することができる.

MINEは文字列の置換のためのコマンドを2つ用意している.

ESC R
《文字列$_1$》《文字列$_2$》 (Replace)
文字列を置換する.
ESC Q
《文字列$_1$》《文字列$_2$》 (Query replace)
ユーザに確認しながら文字列を置換する.
ESC Rは2つの文字列《文字列$_1$》と《文字列$_2$》を 引数として受け取り, カーソル以降マーク位置までの範囲のテキストを検索し, その間の《文字列$_1$》をすべて《文字列$_2$》で置き換える. 置換がすべて終わると,カーソルは最後に置き換えられた文字列の直後に 移動する.第2引数《文字列$_2$》は空の文字列でもよい. その場合は,置換範囲内の《文字列$_1$》がすべて削除されることになる.

ESC QESC Rと同様のコマンドであるが, 個々の置換を行う前に,ユーザに確認を求める. つまり,第1引数の文字列がみるかると,カーソルをその位置に移動させ, 次のメッセージを表示する.

Q-replace "《文字列$_1$" with "《文字列$_2$"? (SP or DEL)
ここでユーザがSPを入力すると置き換えを行うが, DEL(またはBS)を入力すると置き換えは行わない. これを,カーソル以降マーク位置までに現れるすべての《文字列$_1$》に ついて行う. それがすべて終わると,《文字列$_1$》 が最後に現れた 位置にカーソルを残して ESC Qの実行は終了する. 文字列を置換するかどうかの質問に対して,もし SPDELBS以外の文字が入力されると, ESC Qの実行は直ちに終了する. その場合,入力された文字は次のコマンドあるいはその先頭の文字とみなされる.

上のESC RESC Qはいずれも,テキスト内の カーソル以降マークまでの範囲に作用することに注意されたい. したがって,もしマークがカーソルより前の位置に設定されていれば, 置換は行われないので注意すること.

MINEは最後に実行されたESC RまたはESC Qに対する引数を 記憶している.これらの文字列を使って置換を行うには次のコマンドを使う.

ESC R ESC
(Replace again)
最後の検索に使用された文字列を使って置換する.
ESC Q ESC
(Query replace again)
最後の検索に使用された文字列を使って,ユーザに確認しながら置換する.
これらのコマンドは,保存されている文字列を使う以外は それぞれESC RESC Qと同様の動作をする.



Tsuneyasu KOMIYA 平成14年2月22日