*compilation*バッファーは、Compilationモードと呼ばれるメジャーモードを使用します。Compilationモードは、バッファーのエラーメッセージをハイパーリンクに変換します。ポイントをそこに移動してRETをタイプするか、マウスでクリック(マウスで参照をフォローするを参照してください)すると、別のウィンドウでエラーメッセージのlocusをvisitします。locusとは、エラーが発生したファイルの特定の位置を意味します。
エラーメッセージや警告メッセージにたいするcompilation-error
とcompilation-warning
のように、*compilation*バッファーの外観は、*compilation*バッファーのハイライト箇所に使用されるフェイスをカスタマイズすることにより制御されます。これらのフェイスはerror
フェイスとwarning
フェイスから継承されるので、親フェイスを直接カスタマイズすることも可能なことに注意してください。
カスタマイズに関する変数とフェイスの完全なリストを確認するには、M-x customize-group RET compilationを使用してください。
変数compilation-auto-jump-to-first-error
を非nil
値に変更した場合、Emacsは、*compilation*バッファーに表れる最初のエラーメッセージのlocusを自動的にvisitします(自動的にエラーのlocusをvisitする条件を変更するために、この変数にif-location-known
やfirst-known
を指定することもできる)。
Compilationモードは、以下の追加のコマンドを提供します。これらのコマンドは*grep*バッファーでも使用できます。このバッファーではエラーメッセージのかわりに、検索にたいするマッチにハイパーリンクが設定されます(Emacs下でのGrepによる検索を参照してください)。
次のエラーメッセージ(またはマッチ)のlocusをvisitします(next-error
)。
前のエラーメッセージ(またはマッチ)のlocusをvisitします(previous-error
)。
locusをvisitせずに、ポイントを次のエラーメッセージ(またはマッチ)に移動します(compilation-next-error
)。
locusをvisitせずに、ポイントを前のエラーメッセージ(またはマッチ)に移動します(compilation-previous-error
)。
他のファイルで発生した次のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-next-file
)。
他のファイルで発生した前のエラーメッセージ(またはマッチ)にポイントを移動します(compilation-previous-file
)。
Next Error Followマイナーモードに切り替えます。これはcompilationバッファーでのカーソル移動にしたがって、ソースを自動的に表示するモードです。
出力が*compilation*バッファー内に表示されている、最後のコマンドを再実行します。
next-error
とprevious-error
の次回の呼び出しで使用されるバッファーを選択します。
順番にエラーをvisitするには、C-x ` (next-error
)とタイプするか、これと等価なM-g
M-nまたはM-g
nとタイプします。このコマンドはCompilationモードのバッファーだけでなく、任意のバッファーから呼び出すことができます。コンパイル後に最初に呼び出すときは、最初のエラーメッセージのlocusをvisitします。連続したM-g M-nは、同じ方法で次のエラーをvisitします。*compilation*バッファーからRETまたはマウスクリックで特定のエラーをvisitした場合、M-g M-nはそのエラーの次のエラーからvisitしていきます。これ以上visitするエラーメッセージがない場合、M-g M-nはエラーをシグナルします。C-u M-g M-nはcompilationバッファーの先頭から再開して、最初のlocusをvisitします。
M-g M-pまたはM-g p (previous-error
)は、反対方向にエラーを巡回します。
コマンドnext-error
およびprevious-error
は、バッファー*compilation*または*grep*にリストされたエラー(またはマッチ)だけに作用されるわけではありません。これらのコマンドはM-x
occur (その他の検索およびループコマンドを参照のようなコマンドで生成されたエラー(またはマッチ)を巡回する方法も知っています。カレントバッファーがエラーメッセージ、またはマッチを含む場合には、これらのコマンドはそれらを巡回するでしょう。そうでなければEmacsは(変数next-error-find-buffer-function
の値をnext-error-buffer-on-selected-frame
にカスタマイズしていれば)選択されたフレームのウィンドウの中からエラーメッセージ(またはマッチ)を含むバッファー、次にnext-error
またはprevious-error
が最後に使用したバッファー、最後にその他のすべてのバッファーを探します。これらのコマンドが巡回するために選択されたバッファーがカレントでウィンドウに表示されていなければ、そのバッファーが表示されるでしょう。その後のnext-error
呼び出しで使用される別バッファーへの切り替えには、コマンドnext-error-select-buffer
を使用できます。
デフォルトでは、コマンドnext-error
およびprevious-error
は、重要でないメッセージはスキップします。変数compilation-skip-threshold
が、これを制御します。デフォルト値は1で、これは警告(warning)より重要でないメッセージをスキップします。2の場合、エラー(error)より重要でないものをスキップし、0はメッセージをスキップしません。
Emacsがエラーメッセージのlocusをvisitしているとき、関連するソース行が一時的にハイライトされます。選択されたバッファーのlocusのハイライトの持続時間は変数next-error-highlight
、それ以外のバッファーではnext-error-highlight-no-select
により決定されます。更にメッセージを含むバッファーでカレントエラーメッセージをハイライトする方法を定義する、変数next-error-message-highlight
をカスタマイズすることもできます。
*compilation*バッファーが左フリンジ(ウィンドウのフリンジを参照してください)のあるウィンドウで表示されている場合、locusをvisitするコマンドはカレントエラーメッセージを指す矢印をフリンジに配します。テキスト端末のように、左フリンジがないウィンドウの場合、これらのコマンドは、カレントメッセージがウィンドウの一番上にくるようにウィンドウをスクロールします。変数compilation-context-lines
をt
に変更すると、かわりに列0の前に可視の矢印を挿入します。整数値nに変更した場合には、これらのコマンドはフリンジの有無に関わらずメッセージがウィンドウの上からn行目にくるようにウィンドウをスクロールします。デフォルト値のnil
では上述のように振る舞います。
コンパイル出力が非常に冗長になることもありますが、多くの場合にはユーザーにとって特に重要ではありません。ユーザーオプションcompilation-hidden-output
にregexpかregexpのリストをセットすることによって、それらにマッチする出力を非表示にできます。たとえば再帰的なMakefileからの冗長な出力を非表示にするために、以下のような指定ができます:
(setq compilation-hidden-output '("^make[^\n]+\n"))
コンパイラーからのメッセージを解析するために、Compilationモードは変数compilation-error-regexp-alist
を使用します。これはさまざまなエラーメッセージのフォーマットをリストし、それらからlocusを抽出する方法をEmacsに指示します。同じような変数grep-regexp-alist
は、grep
コマンド(Emacs下でのGrepによる検索を参照してください)の出力を解析する方法を指示します。
Sometimes compilation-error-regexp-alist
doesn’t correctly determine
the filename that is the source of the error. Use user option
compilation-transform-file-match-alist
to make any necessary
adjustments, such as adding or changing a directory component, or even
considering certain compiler messages not error messages at all.
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バッファー(リモートホストのシェルを参照してください)では、Compilation minorモードはリモートのソースファイルに、FTPを通じて自動的にアクセスします(ファイルの名前を参照してください)。