Previous: , Up: 置換コマンド   [Contents][Index]


16.10.4 問い合わせつき置換

M-% string RET newstring RET

任意のstringnewstringで置換します。

C-M-% regexp RET newstring RET

regexpにたいする任意のマッチをnewstringで置換します。

foo’を‘bar’に置換するとき、すべてではなく、そのうちのいくつかだけを置換したいときは、M-% (query-replace)を使います。このコマンドは‘foo’を1つずつ検索して、それを置換するかを毎回尋ねます。この問い合わせを別とすれば、query-replacereplace-stringと同様に機能します(無条件の置換を参照)。特にcase-replaceが非nilのときは、通常のように大文字小文字を区別します(置換コマンドとLaxマッチを参照)。数引数を指定すると、単語区切り文字で区切られた単語だけを考慮します。負のプレフィクス引数は後方に置換します。

C-M-% (query-replace-regexp)は、regexpの検索と置換を行います。これはquery-replaceのように問い合わせを行う以外は、replace-regexpと同様に機能します。

これらのコマンドで行なった以前の置換を再利用できます。query-replacequery-replace-regexpが検索文字列の入力を求めるプロンプトを表示しているとき、M-pM-nを使用することにより、‘from -> to’という形式で、以前の置換を表示できます。ここでfromは検索パターン、toはそれの置換、これらの間に表示されるセパレータは変数query-replace-from-to-separatorの値により決定されます。望む置換が表示されたら、RETとタイプしてそれを選択します。この変数の値がnilの場合、置換はコマンドヒストリーに追加されず、再利用できません。

これらのコマンドは、カレントのマッチを、フェイスquery-replaceを使ってハイライトします。変数query-replace-highlightnilにセットすることにより、このハイライトを無効にできます。他のマッチのハイライトにはインクリメンタル検索(インクリメンタル検索を参照してください)と同様に、フェイスlazy-highlightが使われます。変数query-replace-lazy-highlightnilにセットすることにより、このハイライトを無効にできます。デフォルトではquery-replace-regexpは、カレントマッチを置換する展開後の文字列を、ミニバッファーに表示します。特別なシーケンス‘\&’および‘\n’を展開せずに維持するには、query-replace-show-replacement変数をカスタマイズしてください。インクリメンタル検索中にsearch-highlight-submatchesが副式(subexpression)をハイライトするように(必要に応じて検索を調整するを参照)、変数query-replace-highlight-submatchesはregexpの置換コマンド中で副式をハイライトするかどうかを定義します。

変数query-replace-skip-read-onlyに非nilがセットされている場合、置換コマンドはread-only(読み取り専用)のテキスト内のマッチを無視します。デフォルトでは、それらを無視しません。

以下は文字列またはregexpにたいするマッチが表示されているときにタイプできる文字です:

SPC
y

マッチをnewstringで置き換えます。

DEL
Delete
BACKSPACE
n

カレントマッチを置換せずに次のマッチへスキップします。

, (カンマ)

カレントマッチを置換して、結果を表示します。そして次に何をするかを文字入力するよう促します。置換がすでに行われているので、この状況ではDELSPCは等価で、どちらも次のマッチへ移動します。

ここでC-r(以下を参照)をタイプして、置換されたテキストを編集できます。 undoコマンド(C-x uとタイプする。Undo(取り消し)を参照されたい)で置換をアンドゥすることもできます。置換を取り消すこともできます。これはquery-replaceを終了させるので、さらに置換を行う場合は、C-x ESC ESC RETで置換を再開しなければなりません(ミニバッファーでのコマンドの繰り返しを参照)。

RET
q

これ以上の置換を行わずに終了します。

. (ピリオド)

カレントマッチを置換してから、これ以上の検索を行わずに終了します。

!

これ以上の問い合わせをせずに、残りのマッチをすべて置換します。

^

前のマッチの位置に戻ります。これは間違えて変更したときや、再検証したい場合に使います。

u

最後の置換をアンドゥ(undo: 取り消し)して、その置換が行われた位置に戻ります。

U

すべての置換をアンドゥして、最初の置換が行われた位置に戻ります。

C-r

再帰編集レベル(recursive editing level)に入ります。これはマッチをnewstringで置換するだけでなく、編集したい場合に使用します。編集を終えたらC-M-cで再帰編集レベルを抜けて、次のマッチを処理します。再帰編集レベルを参照してください。

C-w

マッチを削除してから、C-rと同様に再帰編集レベルに入ります。これはstringを削除してから、テキストを挿入することにより置換を行う場合に使用します。編集を終えたらC-M-cで再帰編集レベルを抜けて、次のマッチを処理します。

e

置換文字列をミニバッファーで編集します。RETでミニバッファーを抜けると、カレントマッチをミニバッファーの内容で置換します。この新しい置換文字列は、残りのマッチにたいしても適用されます。

E

これはeと似ていますが、次の置換をcase(大文字小文字)に厳格に行います。つまり‘foo’から‘bar’にquery-replaceしていたら、‘Foo’のようなテキストは通常は‘Bar’に置き換えられます。カレントの置換をcaseに厳格に行うには、このコマンドを使用してください。

C-l

スクリーンを再描画します。その後でカレントマッチにたいして何を行うか、別の文字をタイプして指定しなければなりません。

Y (大文字)

複数バッファーの置換で、残りのバッファーの、残りのマッチをすべて置換します(これは選択したファイルにたいして問い合わせつきの置換を行う、DiredのQコマンドと似ています)。これはすべての一連の問い合わせにたいして、これ以上のユーザーとの対話なしに“yes”を答えます。

N (大文字)

複数バッファーの置換で、カレントバッファーの残りのマッチを置換せずに、次のバッファーへスキップします。これはカレントバッファーのマッチにたいする問い合わせに“no”を答えて、次のバッファーへと処理を続けます。

C-h
?
F1

上述したオプションの要約を表示します。その後でカレントマッチにたいして何を行うか、別の文字をタイプして指定しなければなりません。

これらのエイリアス文字以外の文字は、query-replaceを終了してから、キーシーケンスの残りの部分を読みとります。したがってC-kとタイプすると、query-replaceを終了してから、行末までをkillします。特に、C-gは単にquery-replaceをexitします。

一度終了したquery-replaceを再開するには、C-x ESC ESCを使います。query-replaceは引数の読み取りにミニバッファーを使っているので、このキーシーケンスで再開させることができます。C-x ESC ESCを参照してください。

オプションsearch-invisibleは、query-replaceが非表示のテキストを扱う方法を決定します。Outline Searchを参照してください。

選択されたファイルにたいして問い合わせつきの置換を行う、DiredのQコマンドについては、ファイルにたいする操作を参照してください。regexpにマッチするファイル名にたいして、ファイル名の変更、ファイルのコピー、ファイルのリンクを行うDiredのコマンドについては、Diredでのファイル名の変更を参照してください。