GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Grep-Searching.html ・ emacs-doc.conao3.com

29.4 EmacsでGrepを使って検索する

Emacsからコンパイラを実行してコンパイルエラーのある行を参照できるのと同様に、grepを実行してマッチが見つかった行を参照することもできます。これは、grepが報告するマッチをエラーとして扱うことで実現しています。出力バッファには、Compilationモードの派生であるGrepモードが使用されています(Compilationモードを参照)。

M-x grep
M-x lgrep

grep を Emacs 上で非同期に実行し、一致する行を *grep* という名前のバッファに一覧表示する。

M-x grep-find
M-x find-grep
M-x rgrep

grepをfind経由で実行し、出力を*grep*バッファに収集する。

M-x zrgrep

zgrepを実行し、出力を*grep*バッファに収集する。

M-x kill-grep

実行中のgrepサブプロセスを終了する。

grep を実行するには、M-x grep と入力し、次に grep の実行方法を指定するコマンドラインを入力してください。通常 grep を実行する際に使用するのと同じ引数を指定してください。具体的には、grep 形式の正規表現(通常はシェルの特殊文字をエスケープするためにシングルクォートで囲みます)に続き、ワイルドカードを使用できるファイル名を指定します。M-x grep にプレフィックス引数を指定した場合、ポイント周辺のバッファから識別子(識別子参照の検索 を参照)を探し、それをデフォルトの grep コマンドに組み込みます。

コマンドは単に grep を実行する必要はありません。同じ形式で出力を生成するシェルコマンドであれば、どのようなものでも使用可能です。例えば、次のように grep コマンドを連鎖させることができます:

grep -nH -e foo *.el | grep bar | grep toto

grep の出力は *grep* バッファに格納されます。コンパイルエラーと同様に、M-g M-n、RET などを用いて元のファイルから対応する行を探すことができます。*grep* バッファで利用可能なコマンドやキーバインドの詳細については、コンパイルモード を参照してください。

一部のgrepプログラムでは、ハイライト表示を目的として、マッチ箇所の周囲に特殊なマーカーを出力する‘--color’オプションが用意されています。grep-highlight-matchesをtに設定することで、この機能を利用できます。ソースバッファ内でマッチ箇所を表示する際、ソース行全体ではなく、正確なマッチ箇所がハイライトされます。ハイライトは、grepから出力されるANSIエスケープシーケンスに照合することで実現されます。シーケンスの照合はgrep-match-regexpによって制御されており、異なるgrepプログラムに合わせてカスタマイズ可能です。

コンパイルコマンド(Emacsでのコンパイル実行を参照)と同様に、grepコマンドの実行中は、モードラインにこれまでに見つかったハイライト済みのマッチ数が表示されます。

grep コマンドは、実行前にバッファを保存するかどうかを尋ねます。これは grep-save-buffers 変数によって制御されます。指定可能な値は、nil(保存しない)、ask(保存前に確認する)、または述語として使用される関数(ファイル名を引数として呼び出され、バッファを保存する場合は nil 以外を返す必要がある)のいずれかです。nil 以外のその他の値は、確認なしにすべてのバッファを保存することを意味します。デフォルトは ask です。

デフォルトでは、grepのマッチ結果は各行の先頭にファイル名を付して表示されます。ただし、変数 grep-use-headings を nil 以外の値にカスタマイズすると、マッチ結果はセクションごとに分割され、マッチがあったファイルごとに1つのセクションが作成されます。また、セクションの見出しには特殊なフェイス grep-heading を用いてファイル名が表示されます。

コマンド M-x grep-find(M-x find-grep としても利用可能)は M-x grep に似ていますが、コマンドに対して異なる初期デフォルト値を提供します。具体的には、find と grep の両方を実行することで、ディレクトリツリー内のすべてのファイルを検索します。また、Dired と find にあるコマンド find-grep-dired も参照してください。

コマンド M-x lgrep(ローカル grep)および M-x rgrep(再帰的 grep)は、マッチさせる正規表現、検索対象ファイル、および検索のベースディレクトリを個別に入力させる grep および grep-find の、より使いやすいバージョンです。検索時の大文字小文字の区別は、case-fold-search の現在の値によって制御されます。コマンド M-x zrgrep は M-x rgrep と同様ですが、gzip 圧縮ファイルの内容を検索する際、grep の代わりに zgrep を呼び出します。

これらのコマンドは、変数 grep-template(lgrep 用)および grep-find-template(rgrep 用)に基づいてシェルコマンドを生成します。検索対象のファイルには、変数 grep-files-aliases で定義されたエイリアスを使用できます。

変数 grep-find-ignored-directories に列挙されているディレクトリは、M-x rgrep によって自動的にスキップされます。デフォルト値には、さまざまなバージョン管理システムで使用されるデータディレクトリが含まれています。

デフォルトでは、lgrep、rgrep、およびzgrep用に構成されたシェルコマンドは、無視するファイルやディレクトリの長いリストが含まれる部分を非表示にすることで、表示用に省略されます。これらの部分を表す省略記号付きのボタンをクリックすることで、非表示部分を表示できます。また、M-x grep-find-toggle-abbreviationと入力することで、非表示部分の表示をインタラクティブに切り替えることも可能です。シェルコマンドのこの省略表示を無効にするには、オプションgrep-find-abbreviateをnilの値に設定してください。

*grep* バッファに e と入力すると、バッファが書き込み可能になり、Grep Edit モードに入ります。Occur Edit モード(その他の検索・ループコマンド を参照)と同様に、grep で表示された一致行を編集でき、その変更は元のファイルを参照しているバッファに反映されます。C-c C-c と入力すると、Grep Edit モードを終了して Grep モードに戻ります。