GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Locals.html ・ emacs-doc.conao3.com

51.2.3 ローカル変数

M-x make-local-variable RET var RET

変数 var に現在のバッファ内のローカル値を代入する。

M-x kill-local-variable RET var RET

変数 var が現在のバッファ内でグローバル値を使用するようにする。

M-x make-variable-buffer-local RET var RET

変数 var をマークし、これを設定することで、その時点で有効なバッファにローカルな変数とします。

ほぼあらゆる変数を、特定のEmacsバッファに対してローカルにすることができます。つまり、そのバッファにおける変数の値は、他のバッファにおける値とは独立します。いくつかの変数は、常にすべてのバッファでローカルとなります。それ以外のすべてのEmacs変数はグローバルな値を持ち、その変数をローカルに設定していないすべてのバッファで有効となります。

M-x make-local-variable は変数名を読み取り、それを現在のバッファのローカル変数とします。その後、このバッファ内でその値を変更しても他の変数には影響せず、またグローバルな値を変更してもこのバッファには影響しません。

M-x make-variable-buffer-local は変数にマークを付けるもので、これにより変数に値が代入されるたびに自動的にローカル変数となります。より正確には、一度このようにマークされた変数に対しては、通常の代入方法ではまず make-local-variable が実行されます。このような変数を バッファごと の変数と呼びます。Emacs の多くの変数は通常バッファごとであり、変数のドキュメント文字列でそれがいつ当てはまるかが示されています。バッファごとの変数のグローバル値は、通常どのバッファにおいても有効にはなりませんが、それでも意味を持ちます。すなわち、新しいバッファごとにその変数が取る初期値となるのです。

メジャーモード(メジャーモードを参照)は、変数を設定する前に、必ずその変数をバッファローカルにします。そのため、あるバッファでメジャーモードを変更しても、他のバッファには影響しません。マイナーモードも同様に変数を設定することで動作します。通常、各マイナーモードには1つの制御変数があり、モードが有効なときはその値が非nilとなります(マイナーモードを参照)。多くのマイナーモードでは、この制御変数はバッファごとに割り当てられており、したがって常にバッファローカルとなります。それ以外の場合は、他の変数と同様に、特定のバッファでローカルにすることも可能です。

一部の変数は、常に各ディスプレイにローカルとなるため、バッファにローカルにすることはできません。(複数ディスプレイを参照)。これらの変数のいずれかをバッファにローカルにしようとすると、エラーメッセージが表示されます。

M-x kill-local-variable を指定すると、指定した変数は現在のバッファにおけるローカル変数ではなくなります。以降、その変数のグローバル値がこのバッファ内で有効になります。メジャーモードを設定すると、永続ローカルとして特別にマークされた少数の変数を除き、バッファ内のすべてのローカル変数が消去されます。

現在のバッファ内で変数にローカル値があるかどうかにかかわらず、変数のグローバル値を設定するには、Lispの構文 setq-default を使用できます。この構文は setq と同様に使用されますが、ローカル値(もしあれば)の代わりに変数のグローバル値を設定します。現在のバッファにローカル値がある場合、別のバッファに切り替えるまで、新しいグローバル値が反映されないことがあります。以下に例を示します。

(setq-default fill-column 75)

setq-default は、make-variable-buffer-local でマークされた変数のグローバル値を設定する唯一の方法です。

Lispプログラムでは、default-value を使用して変数のデフォルト値を参照できます。この関数はシンボルを引数として受け取り、そのデフォルト値を返します。引数は評価されるため、通常は明示的にクォートする必要があります。例えば、fill-column のデフォルト値を取得する方法は以下の通りです。

(default-value 'fill-column)