Emacs LISPについて質問があります。 setqとsetq-defaultの違いは何ですか?私はそれについてとても混乱しています。
チュートリアルでは、setqはlocal bufferで有効になりますが、setq-defaultはすべてのバッファーに影響します。
たとえば、(setq a-var a-vars-value) in init.elと書いた場合、Emacsを起動して新しいバッファーを開いた後、- a-varもあり、その値はa-vars-valueです。そこにあるはずはないと思った。 setqとsetq-defaultの間に違いはないようです。
私の理解に何か問題がありますか?
どうもありがとうございました。
例えば:
1)(setq hello 123)をinit.elファイルに書き込み、シェルでemacs abufferを実行しました、次に"hello Cx Ce"と入力すると、「123」と表示されます。すべての新しいバッファでこれを実行すると、同じことが起こります。
2)(setq tab-width 4)をinit.elファイルに書きました。 tab-width C-x C-eを実行すると、「8」が表示されます(現在のモードは「テキスト」です)。ただし、(setq-default tab-width 4)を使用すると、「4」が表示されます。この現象は説明できません。
Emacsの一部の変数は「バッファーローカル」です。つまり、各バッファーは、グローバルデフォルトをオーバーライドする変数の個別の値を持つことができます。 tab-width
は、バッファローカル変数の良い例です。
変数がバッファローカルの場合、setq
は現在のバッファにローカル値を設定し、setq-default
はグローバルなデフォルト値を設定します。
変数がバッファローカルでない場合、setq
とsetq-default
は同じことをします。
ケース2では、(setq tab-width 4)
は現在のバッファーでtab-width
のバッファーローカル値を4に設定し、tab-width
のグローバルなデフォルト値は8のままにして、tab-width
ローカル値を持たない別のバッファーで、8を見ました。その後、デフォルト値を4に設定すると、ローカル値がまだないため、そのバッファーがそれを選択しました。