Next: , Up: File Variables   [Contents][Index]


48.2.4.1 ファイル変数の指定

ファイルローカル変数を指定するには2つの方法があります。1つは最初の行に記述する方法で、もう1つはローカル変数リストを使用する方法です。以下は最初の行でこれらを指定する方法の例です:

-*- mode: modename; var: value; … -*-

この方法により、任意の数の変数/値(variable/value)ペアーを指定できます。各ペアーはコロンとセミコロンで区切ります。特別な変数/値ペアーmode: modename;が与えられた場合、これはメジャーモードを指定します。valueは文字列として使用され、評価はされません。

手作業でエントリーを追加するかわりに、M-x add-file-local-variable-prop-lineを使用することができます。このコマンドは変数と値の入力を求め、適切な方法で最初の行にこれらを追加します。M-x delete-file-local-variable-prop-lineは変数の入力を求め、最初の行から変数のエントリーを削除します。コマンドM-x copy-dir-locals-to-file-locals-prop-lineは、カレントのディレクトリーローカル変数を最初の行にコピーします(Directory Variablesを参照してください)。

以下は、最初の行でLispモードを指定して、2つの変数に数値をセットする例です:

;; -*- mode: Lisp; fill-column: 75; comment-column: 50; -*-

modeの他に、ファイル変数として特別な意味をもつキーワードはcodingunibyteevalです。これらは以下で説明します。

シェルスクリプトでは、最初の行はスクリプトのインタープリターの識別に使用されるので、ローカル変数をそこに置くことはできません。これに対処するために、Emacsは最初の行がインタープリターを指定しているときは、2行目からローカル変数指定を探します。man pagesにも同じことが言えます。man pagesはtroffプリプロセッサーのリストを指定するマジック文字列‘'\"’で始まるからです(しかし、すべてがこれを行なう訳ではありません)。

-*-’行を使用するのではなく、ファイルの終端付近でローカル変数リスト(local variables list)を使用することにより、ファイルローカル変数を定義することもできます。ローカル変数リストは、ファイル終端から3000文字以内で開始され、ファイルがページに分かれているときは最後のページになければなりません。

ファイルにローカル変数リストと‘-*-’の両方がある場合、Emacsは最初に‘-*-’行のすべてを処理してから、ローカル変数リストのすべてを処理します。例外はメジャーモード指定です。Emacsはメジャーモード指定がどこにあろうと、まずそれを適用します。なぜならほとんどのメジャーモードは、初期化部分ですべてのローカル変数をkillするからです。

ローカル変数リストは、文字列‘Local Variables:’を含む行で開始され、文字列‘End:’を含む行で終了します。この間には、以下のように1行に変数名と値のペアーが記述されます:

/* Local Variables:  */
/* mode: c           */
/* comment-column: 0 */
/* End:              */

この例では、各行はプレフィクス‘/*’で始まり、サフィックス‘*/’で終了します。Emacsは、リストの最初の行のマジック文字列‘Local Variables:’を囲む文字列から、プレフィクスとサフィックスを識別します。その後はリストの他の行で自動的にこれらを破棄します。プレフィクスおよび/またはサフィックスを使用する通常の理由は、そのファイルが意図する他のプログラムが混乱しないように、ローカル変数をコメントに埋め込むためです。上記は、コメントが‘/*’で始まり‘*/’で終わるCプログラミング言語での例です。

ローカル変数を直接タイプするかわりに、コマンドM-x add-file-local-variableを使用することができます。これは変数と値の入力を求め、それらをリストに追加し、‘Local Variables:’と、必要なら開始・終了マーカーも追加します。コマンドM-x delete-file-local-variableは、リストから変数を削除します。M-x copy-dir-locals-to-file-localsは、ディレクトリーローカル変数をリストにコピーします(Directory Variablesを参照してください)。

-*-’行と同じように、ローカル変数リストの変数は文字列として使用され、最初に評価されることはありません。長い文字列値をファイル内で複数行に分割したい場合、改行とバックスラッシュを使用できます(Lisp文字列定数では無視されます)。各行には、プレフィクスとサフィックスを記述するべきです。たとえ行がその文字列で開始または終了していても、それらはリストを処理するとき取り除かれます。以下は例です:

# Local Variables:
# compile-command: "cc foo.c -Dfoo=bar -Dhack=whatever \
#   -Dmumble=blaah"
# End:

いくつかの“変数名”は、ローカル変数リスト内で特別な意味をもちます:

これら4つのキーワードは、実際には変数ではありません。他のコンテキストでこれらをセットしても、特別な意味はありません。

マイナーモードにたいしてmodeキーワードを使用しないでください。ローカル変数リストでマイナーモードを有効または無効にするには、evalでモードコマンドを実行するLisp式を指定します(see Minor Modesを参照してください)。たとえば以下のローカル変数リストは、引数なし(引数に1を指定しても同じことを行ないます)でeldoc-modeを呼び出すことにより、Eldocモード(see Lisp Docを参照してください)を有効にし、引数-1でfont-lock-modeを呼び出すことにより、Font Lockモード(see Font Lock)を無効にする例です。

;; Local Variables:
;; eval: (eldoc-mode)
;; eval: (font-lock-mode -1)
;; End:

しかしこの方法でマイナーモードを指定するのは、間違っている場合もあることに注意してください。マイナーモードは個人の好みを表しており、そのファイルを編集するユーザーにあなたの好みを強制するのは、不適切かもしれません。状況に依存して自動的にマイナーモードを有効または無効にしたい場合は、たいていメジャーモードフックでこれを行なう方がよいのです(Hooksを参照してください)。

ローカル変数と、ファイル名とファイル内容にしたがったバッファーのメジャーモード(もしあればローカル変数リストも)をリセットするには、コマンドM-x normal-modeを使用します。Choosing Modesを参照してください。