EmacsLispについて質問があります。setqとsetq-defaultの違いは何ですか?
チュートリアルによると、setqはローカルバッファで有効になりますが、setq-defaultはすべてのバッファに影響します。
たとえば、init.elに(setq a-var a-vars-value)と書いた場合、Emacsを起動して新しいバッファーを開いた後、a-varもそこにあり、その値はa-vars-valueであることがわかりました。そこにあるはずがないと思った。setqとsetq-defaultの間に違いはないようです。
私の理解に何か問題がありますか?
例えば:
私が書いた(ハローsetqの123)にinit.elファイル、と私は実行abufferのemacsのシェルでは、その後、I入力は"helloてCx Ce" 、それが"123"を示しています。これをすべての新しいバッファーで実行すると、同じことが起こります。
init.elファイルに(setq tab-width 4)と書きました。タブ幅のCxCeを実行すると、「8」と表示されます(現在のモードは「テキスト」です)。ただし、(setq-default tab-width 4)を使用すると、「4」と表示されます。この現象を説明することはできません。
Emacsの一部の変数は「buffer-local」です。つまり、各バッファーは、グローバルなデフォルトをオーバーライドする、その変数の個別の値を持つことができます。tab-width
バッファローカル変数の良い例です。
変数がbuffer-localの場合、setq
そのローカル値を現在のバッファーにsetq-default
設定し、グローバルなデフォルト値を設定します。
変数はその後、ローカルのバッファリングされていない場合setq
とsetq-default
同じことを行います。
ケース2では、現在のバッファでバッファ(setq tab-width 4)
ローカル値tab-width
を4に設定し、グローバルデフォルト値をtab-width
8のままにしtab-width
ます。したがって、ローカル値を持たない別のバッファで評価すると、8が表示されます。デフォルト値を4に設定すると、ローカル値がまだないため、そのバッファーがそれを取得しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加