コメントコマンドで示したように、M-jコマンドが行にコメントを追加するとき、バッファーローカルな変数comment-column
とcomment-fill-column
(nil
の場合はfill-column
の値。明示的なフィルコマンドを参照されたい)の間にコメントを配そうと試みます。このバッファーローカルな変数のデフォルト値、またはローカルな値は、通常の方法でセットできます(ローカル変数を参照)。かわりにC-x
;
(comment-set-column
)とタイプすることにより、カレントバッファーのcomment-column
の値を、現在コメントがある列にセットすることができます。C-u
C-x
;は、コメント列をそのバッファーのポイントの前にある最後のコメントにセットします。その後でM-;を行うことにより、カレント行のコメントを前のコメントに揃えることができます。
コメントコマンドは、変数comment-start-skip
の値である正規表現にもとづいて、コメントを認識します。この正規表現がヌル文字列にマッチしないように気をつけてください。単語という言葉の厳格な意味から考えると、これはコメント開始区切りより長い文字列にマッチするかもしれません。たとえばCモードでの変数の値としては\"/\\\\*+[ \\t]*\\\\|//+[ \\t]*\"
が考えられますが、これは‘/*’自身とその後ろの余分なアスタリスクやスペースにマッチして、C++スタイルのコメント(‘//’)も許容します(文字列に‘\’を含む場合にはLisp構文では‘\\’と記述する必要があることに注意。これは最初のアスタリスクにたいして正規表現においてアスタリスクがもつ特別な意味を打ち消すために必要)。
コメントコマンドが新しいコメントを作るとき、これはcomment-start
の値をコメント開始区切りとして挿入します。これはポイントの後ろに、コメント終了区切りとしてcomment-end
の値も挿入します。たとえばLispモードではcomment-start
が‘";"’で、comment-end
が""
(空文字列)です。Cモードではcomment-start
が"/*
"
で、comment-end
が" */"
です。
変数comment-padding
は、コメントコマンドが、コメント区切りとコメントテキストの間を区切る文字列を指定します。デフォルトでは‘"
"’、つまり1つのスペースが指定されます。かわりに数字を指定すると、これは指定した数のスペースになり、nil
の場合、スペースは挿入されません。
変数comment-multi-line
は、M-jとAuto
Fillモードがコメントをどのように複数行に継続するかを制御します。複数行のコメントを参照してください。
変数comment-indent-function
は、新しく挿入されたコメント、または既存のコメントの位置揃え位置を計算するために呼び出される関数を指定します。これはメジャーモードごとに異なります。関数は引数なしで呼び出されますが、新しいコメントが挿入されるときはコメント開始位置のポイント、または行末のポイントで呼び出されます。この関数はコメントが開始されるべき列を返す必要があります。たとえばLispモードでは、デフォルト関数の決定は、既存のコメントがいくつのコメント文字で始まるかにもとづきます。
さらにEmacsは、コメントを付近の行と揃えるようとも試みます。これをオーバーライドするには、インデントの許容できる範囲を示す、(もしかしたら等しい)2つの整数から成るコンスを関数がしても構いません。