string の出現箇所の一部を newstring に置き換える。
regexp の一部のマッチを newstring に置き換える。
‘foo’ の出現箇所をすべてではなく、一部だけ ‘bar’ に変更したい場合は、M-% (query-replace) を使用します。このコマンドは ‘foo’
の出現箇所を一つずつ探し、各箇所を表示して置換するかどうかを尋ねます。クエリ機能を除けば、query-replace は replace-string
と同様に動作します(無条件置換
を参照)。特に、通常と同様に case-replace が nil でない限り、大文字と小文字は区別されません(置換コマンドと緩いマッチング
を参照)。数値引数を指定すると、単語区切り文字で囲まれた出現箇所のみを考慮します。負の接頭辞引数を指定すると、逆方向から置換します。
C-M-% は正規表現による検索・置換(query-replace-regexp)を行います。動作は replace-regexp と同様ですが、クエリの形式は query-replace のようになります。
これらのコマンドを使用して、以前に置換した内容を再利用できます。query-replace または
query-replace-regexp で検索文字列の入力が求められた際は、M-p および M-n を使用して、以前の置換内容を
‘from -> to’ の形式で表示します。ここで from
は検索パターン、to はその置換内容であり、両者の区切り文字は変数 query-replace-from-to-separator の値によって決定されます。RET と入力して、目的の置換内容を選択してください。この変数の値が nil の場合、置換内容はコマンド履歴に追加されず、再利用することもできません。
これらのコマンドは、face query-replace
を使用して現在のマッチ箇所をハイライトします。変数 query-replace-highlight
に nil を設定することで、このハイライトを無効にできます。また、インクリメンタル検索(インクリメンタル検索 を参照)と同様に、lazy-highlight を使用して他のマッチ箇所をハイライトします。これは query-replace-lazy-highlight に nil を設定することで無効にできます。デフォルトでは、query-replace-regexp
はミニバッファに現在のマッチ箇所の置換文字列を表示します。特殊シーケンス ‘\&’ および ‘\n’ を展開せずに保持したい場合は、変数 query-replace-show-replacement をカスタマイズしてください。search-highlight-submatches
がインクリメンタル検索において部分式をハイライトするのと同様に(検索のカスタマイズ を参照)、変数 query-replace-highlight-submatches
は正規表現置換コマンドにおいて部分式をハイライトするかどうかを定義します。
変数 query-replace-skip-read-only を nil
以外に設定すると、置換コマンドが読み取り専用テキスト内のマッチを無視するようになります。デフォルトでは無視されません。
文字列や正規表現に一致するものが見つかった際に入力できる文字は以下の通りです:
出現箇所を newstring に置換する。
今回のものを置換せずに、次の出現箇所へスキップする。
この出現箇所を置換し、その結果を表示します。その後、次に何を行うかを指定するため、別の入力文字の入力が求められます。すでに置換が行われているため、この状況では DEL と SPC は同等であり、どちらも次の出現箇所へ移動します。
この時点で C-r と入力すると(後述)、置換後のテキストを変更できます。また、undo コマンドで置換を取り消すことも可能です(例:C-x u
と入力。Undo を参照)。これにより query-replace が終了するため、さらに置換を行いたい場合は C-x
ESC ESC RET を使用して再開する必要があります(ミニバッファコマンドの繰り返し を参照)。
これ以上置換を行わずに終了する。
この出現箇所を置換し、その後、さらなる出現箇所を検索せずに終了する。
再度確認することなく、残っているすべての箇所を置換する。
誤って変更してしまった場合や、改めて確認したい場合に、直前の出現箇所(またはかつての出現箇所)に戻るため。
直前の置換を取り消し、その置換が行われた箇所に戻る。
すべての置換を取り消し、最初の置換が行われた時点に戻る。
すべての出現箇所を置換後の文字列に置き換えた差分バッファを表示する。
単に newstring で置換するのではなく、出現箇所を編集する必要がある場合に、再帰的な編集レベルに入ります。作業が完了したら、C-M-c で再帰的な編集レベルを終了し、次の出現箇所へ進みます。再帰的な編集レベルを参照してください。
出現箇所を削除し、C-rのように再帰的な編集レベルを指定します。再帰的な編集を使用して、削除したstringの出現箇所を置き換えるテキストを挿入します。完了したら、C-M-cで再帰的な編集レベルを終了し、次の出現箇所へ進みます。
ミニバッファ内で置換文字列を編集します。RET と入力してミニバッファを抜けると、ミニバッファの内容が現在のパターンの出現箇所を置換します。また、それ以降の出現箇所に対する新しい置換文字列としても適用されます。
e と同様ですが、次の置換は大文字小文字を厳密に区別して行われます。つまり、‘foo’ から ‘bar’ への query-replace
がある場合、‘Foo’ のようなテキストは通常 ‘Bar’
に置換されます。現在の置換を大文字小文字を厳密に区別して行うには、このコマンドを使用してください。
現在のマッチ箇所を、元のテキストとマッチ箇所を置換したテキストとの差分バッファとして表示する。
画面を再表示します。その後、この出現箇所をどう処理するかを指定するために、別の文字を入力する必要があります。
マルチバッファ置換(選択したファイルに対してクエリ置換を行うDiredのQコマンドなど)において、残りのすべてのバッファにある残りの出現箇所をすべて置換します。これにより、この質問およびシリーズのそれ以降のすべての質問に対し、ユーザーによるさらなる操作を必要とせず「yes」と回答します。
マルチバッファ置換において、現在のバッファに残っている箇所を置換せずに次のバッファへスキップします。これは「いいえ」という問いに答え、現在のバッファに関する処理を断念し、シーケンス内の次のバッファへと進みます。
これらのオプションをまとめたメッセージを表示します。その後、この出現箇所をどう処理するかを指定するために、別の文字を入力する必要があります。
これ以外に、他の文字が query-replace
を抜けると、キーシーケンスの一部として再読み込まれます。したがって、C-k と入力すると、query-replace を抜け、その後行末までキルされます。特に、C-g は単に query-replace を抜けます。
To restart a query-replace once it is exited, use
C-x ESC ESC, which repeats the query-replace because it used the minibuffer to read its
arguments. See C-x ESC ESC.
オプション search-invisible は、query-replace が不可視テキストをどのように扱うかを指定します。アウトライン検索 を参照してください。
選択したファイルに対してクエリ置換を行うDiredのQコマンドについては、ファイル操作を参照してください。また、ファイル名内の正規表現マッチを置換してファイルの名前変更、コピー、またはリンクを行うDiredコマンドについては、Diredでのファイル名変換も参照してください。