EmacsLispのsetqとsetq-defaultの違い

ルアンハオ

EmacsLispについて質問があります。setqsetq-defaultの違いは何ですか?

チュートリアルによると、setqローカルバッファで有効になりますsetq-defaultはすべてのバッファに影響します。

たとえばinit.el(setq a-var a-vars-value)と書いた場合、Emacsを起動して新しいバッファーを開いた後、a-varもそこにあり、その値はa-vars-valueであることがわかりましたそこにあるはずがないと思った。setqsetq-defaultの間に違いはないようです

私の理解に何か問題がありますか?

例えば:

  1. 私が書いた(ハローsetqの123)init.elファイル、と私は実行abufferのemacsのシェルでは、その後、I入力は"helloてCx Ce" それが"123"を示しています。これをすべての新しいバッファーで実行すると、同じことが起こります。

  2. init.elファイルに(setq tab-width 4)と書きましたタブ幅のCxCeを実行すると、「8」と表示されます(現在のモードは「テキスト」です)。ただし、(setq-default tab-width 4)を使用すると、「4」と表示されます。この現象を説明することはできません。

dfan

Emacsの一部の変数は「buffer-local」です。つまり、各バッファーは、グローバルなデフォルトをオーバーライドする、その変数の個別の値を持つことができます。tab-widthバッファローカル変数の良い例です。

変数がbuffer-localの場合、setqそのローカル値を現在のバッファーにsetq-default設定し、グローバルなデフォルト値を設定します。

変数はその後、ローカルのバッファリングされていない場合setqsetq-default同じことを行います。

ケース2では、現在のバッファでバッファ(setq tab-width 4)ローカル値tab-widthを4に設定し、グローバルデフォルト値をtab-width8ままにしtab-widthます。したがって、ローカル値を持たない別のバッファで評価すると、8が表示されます。デフォルト値を4に設定すると、ローカル値がまだないため、そのバッファーがそれを取得しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事