Next: , Previous: , Up: プログラムのコンパイルとテスト   [Contents][Index]


28.4 Emacs下でのGrepによる検索

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

M-x grep
M-x lgrep

Emacs下でgrepを非同期で実行し、*grep*という名前のバッファーにマッチした行をリストします。

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

findを通じてgrepを実行し、出力を*grep*バッファーに収集します。

M-x zrgrep

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

M-x kill-grep

実行中のgrepサブプロセスをkillします。

grepを実行するには、M-x grepとタイプしてから、どのようにgrepを実行するかを指定するコマンドラインを入力します。これは通常、grepを実行するとき与える引数と同じです。grepスタイルのregexp(通常、シェルのスペシャル文字をクォートするためシングルクォートで囲む)の後に、ファイル名(ワイルドカードも使用できる)を続けます。M-x grepにプレフィクス引数を指定した場合、バッファーのポイント位置周辺の識別子(識別子のリファレンスを探すを参照してください)を探して、それをgrepコマンドのデフォルトにします。

指定するコマンドは、単純にgrepを実行するものである必要はありません。同じフォーマットで出力を生成するシェルコマンドを使用することができます。たとえば、以下のように、grepコマンドを連結することができます:

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

grepコマンドの出力は、*grep*バッファーに送られます。オリジナルのファイルの対応する行は、コンパイルエラーと同様、M-g M-nRETなどで見つけることができます。コマンドのより詳細な説明と、*grep*バッファー内で利用可能なキーバインディングについては、Compilationモードを参照してください。

マッチをハイライトするために、その周囲に特別なマーカーを出力する‘--color’オプションを指定できるgrepプログラムもあります。この機能を使うには、grep-highlight-matchestにセットします。これによりソースバッファーのマッチを表示するとき、ソース行全体ではなく、正確なマッチだけがハイライトされます。ハイライトはgrepが発行するANSIエスケープシーケンスにたいするマッチを通じて提供されます。このシーケンスにたいするマッチングはgrep-match-regexpにより制御されており、これは別のgrepプログラムに対応するようにカスタマイズできます。

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

grepコマンドは、実行前にバッファーの保存を提案するでしょう。これは、変数grep-save-buffersにより制御されます。利用できる値はnil(保存しない)、ask(保存前に尋ねる)、または述語として使用される関数(ファイル名をパラメーターとして呼び出され、バッファーを保存する場合は非nilをリターンすべきである)のいずれかである。その他の非nil値は、すべてのバッファーが確認なしで保存されるべきであることを意味します。デフォルト値はaskです。

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

コマンドM-x lgrep (local grep)およびM-x rgrep (recursive grep)は、grepおよびgrep-findのユーザーフレンドリーなバージョンで、これらはマッチにたいする正規表現、検索するファイル、検索の基準となるディレクトリーを個別に尋ねます。検索での大文字小文字の区別は、case-fold-searchの値で制御されます。コマンドM-x zrgrepM-x rgrepと似ていますが、これはgrepのかわりにzgrepを呼び出し、gzipされたファイルの内容を検索します。

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

変数grep-find-ignored-directoriesにリストされたディレクトリーは、M-x rgrepの検索で自動的にスキップされます。デフォルト値には、さまざまなバージョンコントロールシステムで使用されるデータディレクトリーが含まれます。

デフォルトではlgreprgrepzgrepにたいして構築されるシェルコマンドは、ファイルとディレクトリーの長いリストを含む部分を隠蔽することにより省略して表示されます。隠蔽された部分を表す省略記号のボタンをクリックすれば隠蔽部分を表示できます。M-x grep-find-toggle-abbreviationとタイプしてインタラクティブに隠蔽部分の表示を切り替えることもできます。このシェルコマンドの隠蔽を無効にするにはオプションgrep-find-abbreviatenil値にカスタマイズしてください。