前: Replacement and Case, 上: Replace


10.7.4 問い合わせ型置換

M-% string <RET> newstring <RET>
M-x query-replace <RET> string <RET> newstring <RET>
stringのいくつかの出現をnewstringで置換する。
C-M-% regexp <RET> newstring <RET>
M-x query-replace-regexp <RET> regexp <RET> newstring <RET>
正規表現regexpに一致するもののいくつかをnewstringで置換する。

`foo'のすべての出現ではなく、 そのうちのいくつかだけを`bar'に変更したいときには、 通常のreplace-stringを使うことはできません。 かわりに、M-%query-replace)を使います。 このコマンドは`foo'の出現をみつけるたびに、 その出現を表示し、置換するかどうか聞いてきます。 query-replaceに数引数を指定すると、 単語区切り文字で区切られた出現だけを対象とします。 通常どおりcase-replacenil以外であれば、 replace-stringと同じく、 このコマンドも大文字小文字の違いを保存します。

問い合わせることを除けば、 query-replacereplace-stringと同様に動作し、 query-replace-regexpreplace-regexpと同様に動作します。 このコマンドは、C-M-%で実行できます。

stringの出現やregexpに一致したものが表示されたときに 打てる文字はつぎのとおりです。

<SPC>
出現をnewstringで置換する。
<DEL>
この出現を置換せずにつぎの出現箇所に進む。
, (カンマ)
この出現を置換し、結果を表示する。 そして、つぎに何をするか指示する文字を聞いてくる。 置換自体はすでに完了しているので、 この状況では<DEL>と<SPC>は等価であり、 つぎの出現箇所へ移動するという意味。

この時点では、C-r(下記参照)を打って、置換したテキストを変更できる。 また、C-x uと打って、置換をアンドゥする(もとに戻す)こともできるが、 そうすると、query-replaceを終了してしまう。 さらに先の置換を行いたいときには、 C-x <ESC> <ESC> <RET>を使って再開する必要がある (see Repetition)。

<RET>
これ以上何も置換しないで終了する。
. (ピリオド)
この出現を置換してから、これ以上探索せずに終了する。
!
これ以降、問い合わせずに残りの出現すべてを置換する。
^
誤って変更してしまった場合などに、 1つまえの出現箇所(あるいは置換してしまった出現箇所)に戻る。 これは、マークリングから位置を取り出して動作する。 query-replaceは直前の1つの置換位置だけを記録するため、 ^を続けて入力しても意味はない。
C-r
単にnewstringで置換するだけでなく、 この出現を編集する必要がある場合などに、再帰編集レベルに入る。 編集し終えてC-M-cで再帰編集を抜けると、つぎの出現箇所に移動する。 see Recursive Edit
C-w
出現を削除してから、C-rと同様に再帰編集レベルに入る。 再帰編集を使って、削除したstringの出現を置き換えるテキストを挿入する。 編集し終えてC-M-cで再帰編集を抜けると、つぎの出現箇所に移動する。
C-l
画面を再表示する。 そうしたら、この出現に対して何を行うかを指示する別の文字を打つ必要がある。
C-h
これらのオプションの要約メッセージを表示する。 そうしたら、この出現に対して何を行うかを指示する別の文字を打つ必要がある。

上記のコマンドの別名である文字が他にもいくつかあります。 ynqは、それぞれ、 <SPC>、<DEL>、<RET>に等価です。

これ以外の文字はquery-replaceを終了し、 その文字はキー列の一部になります。 したがって、C-kと打つと、 query-replaceを終了してから、行末までをキルします。

一度抜けたquery-replaceを再開するには、 C-x <ESC> <ESC>を使います。 このコマンドはquery-replaceを繰り返します。 というのは、query-replaceはミニバッファで引数を読み取るからです。 See C-x ESC ESC

ファイル名に対して正規表現に一致する部分を置換することで、 ファイルの改名、コピー、リンクを行うdiredコマンドについては、 Transforming File Namesも参照してください。