Emacsには、検索・置換操作を行うためのコマンドがいくつか用意されています。シンプルなM-x
replace-stringコマンドのほか、検索パターンの各出現箇所を表示し、置換するかどうかを尋ねるM-% (query-replace)もあります。
置換コマンドは通常、ポイントからバッファ末尾までのテキストに対して動作します。リージョンが有効な場合は、代わりにそのリージョンに対して動作します(マークとリージョンを参照)。基本的な置換コマンドは、1つの検索文字列(または正規表現)を1つの置換文字列に置き換えます。コマンド
expand-region-abbrevs
を使用することで、複数の置換を並行して行うことが可能です(略語展開の制御を参照)。
query-replace-show-preview に nil
以外の値を設定すると、置換コマンドは入力中に置換結果のプレビューを表示します。ウィンドウ内に表示されるマッチ箇所は、置換後の状態として表示されます。これにより、‘\1’ のような後方参照(正規表現の置換
を参照)が、どのような文字列に展開されるかを、実際に置換を実行する前に確認できます。また、置換対象のテキストを読み上げるプロンプトにおいて、入力内容が矢印で区切られた両方の部分を含むようになると(これは
M-p が履歴から呼び出すものです)、プレビューが表示されます。ただし、‘\,’ や ‘\#’
を使用する置換ではプレビューは表示されません。
コマンドによって置換されるマッチのみがプレビュー表示されます。具体的には、point 以降のマッチ、または後方置換時の point より前のマッチです(クエリ置換を参照)。それ以外のマッチは、バッファにさらに多くのマッチが存在することを示すため、引き続きハイライト表示されます。リージョンがアクティブな場合、置換と同様に、プレビューはその全域をカバーします。
query-replace-show-preview に指定可能な値は、置換文字列のみを表示する
replacement-only と、一致箇所を置換文字列の横に矢印で区切って表示する both です。replacement-only
の場合、置換文字列が空であれば、何も表示しない代わりに、一致箇所を示す細いバーが表示されます。また、一致箇所と置換文字列を受け取り、一致箇所の代わりに表示する文字列を返すカスタム関数を使用するか、nil
を指定してその一致箇所をそのままにすることもできます。このオプション用のカスタム関数値を記述する際は、関数 replace-preview-replacement-only および replace-preview-both を参照すると役立つでしょう。
プレビューでは顔 query-replace-preview と query-replace-preview-match が使用されています。