Next: , Previous: , Up: Building   [Contents][Index]


27.2 Compilationモード

*compilation*バッファーは、Compilationモードと呼ばれるメジャーモードを使用します。Compilationモードは、バッファーのエラーメッセージをハイパーリンクに変換します。ポイントをそこに移動してRETをタイプするか、マウスでクリック(Mouse Referencesを参照してください)すると、別のウィンドウでエラーメッセージのlocusをvisitします。locusとは、エラーが発生したファイルの特定の位置を意味します。

変数compilation-auto-jump-to-first-errorを非nil値に変更した場合、Emacsは、*compilation*バッファーに表れる最初のエラーメッセージのlocusを自動的にvisitします。

Compilationモードは、以下の追加のコマンドを提供します。これらのコマンドは*grep*バッファーでも使用できます。このバッファーではエラーメッセージのかわりに、検索にたいするマッチにハイパーリンクが設定されます(Grep Searchingを参照してください)。

M-g M-n
M-g n
C-x `

次のエラーメッセージ(またはマッチ)のlocusをvisitします(next-error)。

M-g M-p
M-g p

前のエラーメッセージ(またはマッチ)のlocusをvisitします(previous-error)。

M-n

locusをvisitせずに、ポイントを次のエラーメッセージ(またはマッチ)に移動します(compilation-next-error)。

M-p

locusをvisitせずに、ポイントを前のエラーメッセージ(またはマッチ)に移動します(compilation-previous-error)。

M-}

他のファイルで発生した次のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-next-file)。

M-{

他のファイルで発生した前のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-previous-file)。

C-c C-f

Next Error Followマイナーモードに切り替えます。これはcompilationバッファーでのカーソル移動にしたがって、ソースを自動的に表示するモードです。

g

出力が*compilation*バッファー内に表示されている、最後のコマンドを再実行します。

順番にエラーをvisitするには、C-x ` (next-error)とタイプするか、これと等価なM-g M-nまたはM-g nとタイプします。このコマンドはCompilationモードのバッファーだけでなく、任意のバッファーから呼び出すことができます。コンパイル後に最初に呼び出すときは、最初のエラーメッセージのlocusをvisitします。連続したC-x `は、同じ方法で次のエラーをvisitします。*compilation*バッファーからRETまたはマウスクリックで特定のエラーをvisitした場合、C-x `はそのエラーの次のエラーからvisitしていきます。これ以上visitするエラーメッセージがない場合、C-x `はエラーをシグナルします。C-u C-x `はcompilationバッファーの先頭から再開して、最初のlocusをvisitします。

M-g M-pまたはM-g p (previous-error)は、反対方向にエラーを巡回します。

コマンドnext-errorおよびprevious-errorは、バッファー*compilation*または*grep*にリストされたエラー(またはマッチ)だけに作用されるわけではありません。これらのコマンドはM-x occur (Other Repeating Searchを参照のようなコマンドで生成されたエラー(またはマッチ)を巡回する方法も知っています。カレントバッファーがエラーメッセージ、またはマッチを含む場合、これらのコマンドは、それらを巡回するでしょう。そうでない場合、Emacsは選択されたフレームのウィンドウの中から、エラーメッセージ(またはマッチ)を含むバッファーを探し、次にnext-errorまたはprevious-errorが最後にvisitしたバッファー、最後にその他のすべてのバッファーを探します。これらのコマンドが巡回するために選択されたバッファーが、カレントでウィンドウに表示されていなければ、そのバッファーが表示されるでしょう。

デフォルトでは、コマンドnext-errorおよびprevious-errorは、重要でないメッセージはスキップします。変数compilation-skip-thresholdが、これを制御します。デフォルト値は1で、これは警告(warning)より重要でないメッセージをスキップします。2の場合、エラー(error)より重要でないものをスキップし、0はメッセージをスキップしません。

Emacsがエラーメッセージのlocusをvisitしているとき、関連するソース行が一時的にハイライトされます。このハイライトの持続時間は、変数next-error-highlightにより決定されます。

*compilation*バッファーが左フリンジ(Fringesを参照してください)のあるウィンドウで表示されている場合、locusをvisitするコマンドはカレントエラーメッセージを指す矢印をフリンジに配します。テキスト端末のように、左フリンジがないウィンドウの場合、これらのコマンドは、カレントメッセージがウィンドウの一番上にくるようにウィンドウをスクロールします。変数compilation-context-linesを整数値nに変更した場合、これらのコマンドは、フリンジの有無に関わらずメッセージがウィンドウの上からn行目にくるようにウィンドウをスクロールします。デフォルト値のnilでは上述したように振る舞います。

コンパイラーからのメッセージを解析するために、Compilationモードは変数compilation-error-regexp-alistを使用します。これはさまざまなエラーメッセージのフォーマットをリストし、それらからlocusを抽出する方法をEmacsに指示します。同じような変数grep-regexp-alistは、grepコマンド(Grep Searchingを参照してください)の出力を解析する方法を指示します。

Compilationモードは、スクリーン単位でスクロールを行うために、キーSPCおよびDELも定義します。M-n (compilation-next-error)およびM-p (compilation-previous-error)は、次または前のエラーメッセージに移動します。M-{ (compilation-next-file)およびM-} (compilation-previous-file)は、違うソースファイルの、次または前のエラーメッセージに移動します。

C-c C-fとタイプして、Next Error Followモードに切り替えることができます。このマイナーモードでは、compilationバッファーでの通常のカーソル移動により、自動的にソースを表示するバッファーが更新されます。たとえばカーソルをエラーメッセージに移動すると、そのエラーにたいするlocusが表示されます。

Compilationモードの機能は、Compilation Minorモード呼ばれるマイナーモードでも利用可能です。これは通常のコンパイル出力のバッファーだけでなく、任意のバッファーのエラーメッセージを解析します。M-x compilation-minor-modeとタイプすることにより、このマイナーモードが有効になります。たとえばRloginバッファー(Remote Hostを参照してください)では、Compilation minorモードはリモートのソースファイルに、FTPを通じて自動的にアクセスします(File Namesを参照してください)。