通常のEmacsのコメントコマンドは、コード行の後にコメントが続くことを前提としています。Fortran 77では、標準的なコメント構文により、行全体がコメントである必要があります。そのため、Fortranモードでは標準的なEmacsのコメントコマンドを置き換え、いくつかの新しい変数を定義しています。
Fortranモードでは、コメントが ‘!’
で始まり、他のテキストの後に続くことができるFortran 90のコメント構文にも対応しています。この構文を受け付けるFortran
77コンパイラは一部に限られているため、あらかじめ指示がない限り、Fortranモードはこのようなコメントを挿入しません。これを行うには、変数
fortran-comment-line-start に ‘"!"’ を設定してください。特殊な値を使用する場合は、fortran-comment-line-start-skip を変更する必要がある場合があります。
コメントを揃えるか、新しいコメントを挿入する (comment-dwim)。
非標準の ‘!’ コメントにのみ適用されます (comment-set-column)。
リージョン内の全行をコメントに変換するか、(引数を指定して)再び実際のコードに戻します (fortran-comment-region)。
FortranモードにおけるM-;は、標準のcomment-dwimを実行します。これにより、既存のあらゆる種類のコメントが認識され、そのテキストが適切に整列されます。既存のコメントがない場合は、コメントが挿入され、整列されます。Fortranモードにおけるコメントの挿入および整列は、他のモードとは異なります。
新しいコメントを挿入する必要がある際、現在の行が空行であれば、行全体にわたるコメントが挿入されます。空行でない行では、使用を希望した場合に、非標準の ‘!’ コメントが挿入されます。それ以外の場合は、現在の行より前の新しい行に、行全体にわたるコメントが挿入されます。
非標準の ‘!’
コメントは他の言語のコメントと同様に揃えられますが、行全体のコメントは異なります。標準的な行全体のコメントでは、コメント区切り文字自体が必ず0列目に配置される必要があります。揃えることができるのは、コメント内のテキストです。変数
fortran-comment-indent-style
に以下の値のいずれかを設定することで、3種類の揃え方から選択できます:
fixedテキストを、fortran-comment-line-extra-indentと最小ステートメントインデントの和となる固定列に揃えます。これがデフォルトです。
最小インデントは、タブ形式の継続行スタイルではfortran-minimum-statement-indent-tab、固定形式スタイルではfortran-minimum-statement-indent-fixedです。
relativeテキストをコードの1行であるかのように揃え、さらにfortran-comment-line-extra-indent列分のインデントを加えてください。
nil行全体のコメント内のテキストを自動的に移動させない。
さらに、変数 fortran-comment-indent-char
に使用したい1文字の文字列を設定することで、行全体のコメント内でインデントに使用する文字を指定できます。
コンパイラディレクティブ行(またはプリプロセッサ行)は、コメント行とほぼ同様の見た目をしています。ただし、fortran-comment-indent-styleの値にかかわらず、こうした行には一切インデントを付けてはならない点に注意してください。変数fortran-directive-reは、どの行がディレクティブであるかを指定する正規表現です。マッチした行にはインデントが付かず、特徴的なフォントロックが適用されます。
通常のEmacsコメントコマンド C-x ; (comment-set-column) は再定義されていません。‘!’
コメントを使用している場合は、このコマンドを併用できます。そうでない場合、Fortranモードでは役に立ちません。
コマンド C-c ; (fortran-comment-region) は、リージョン内の各行の先頭に文字列 ‘c$$$’
を挿入することで、その行をすべてコメントに変換します。数値引数を指定すると、リージョン内の各行の先頭から ‘c$$$’
を削除し、リージョンを再び実行可能なコードに戻します。これらのコメントに使用される文字列は、変数 fortran-comment-region
を設定することで制御できます。なお、ここでは同じ名前を持つコマンドと変数の例を挙げていますが、Lisp および Emacs
では文脈からどちらを指しているかが常に明確であるため、これら2つの用法が衝突することはありません。