Ich habe eine Frage zu Emacs Lisp. Was ist der Unterschied zwischen setq und setq-default? ?
In Tutorials heißt es, dass setq im lokalen Puffer wirksam wird, während setq-default alle Puffer betrifft.
Wenn ich zum Beispiel in init.el geschrieben habe (setq a-var a-vars-value) , habe ich nach dem Starten von Emacs und dem Öffnen eines neuen Puffers festgestellt, dass die a-var ebenfalls vorhanden ist und ihr Wert a-vars-value ist . Ich dachte, es sollte nicht da sein. Es scheint keinen Unterschied zwischen setq und setq-default zu geben .
Stimmt etwas mit meinem Verständnis nicht?
Beispielsweise:
Ich habe (setq hello 123) in die Datei init.el geschrieben und emacs abuffer in der Shell ausgeführt. Dann habe ich "hallo Cx Ce" eingegeben , es wird "123" angezeigt . Das gleiche passiert, wenn ich dies in allen neuen Puffern ausführe.
Ich habe (setq tab-width 4) in die Datei init.el geschrieben . Wenn ich Cx Ce mit Tabulatorbreite ausführe , wird "8" angezeigt (aktueller Modus ist "Text"). Wenn ich jedoch (setq-default tab-width 4) verwende , wird "4" angezeigt . Ich kann dieses Phänomen nicht erklären.
(setq tab-width 4)
wird in dem Puffer wirksam, in dem Sie den Ausdruck ausgewertet haben. Wenn Sie es im*scratch*
Puffer auswerten, überprüfen Sie seinen Wert in diesem Puffer.tab-width
ist eine pufferlokale Variable. Wenn Sie(setq tab-width 4)
dies tun , wird es im aktuellen Puffer nur auf 4 gesetzt. Alle anderen Puffer behaltentab-width
den globalen Standardwert 8 bei(setq-default tab-width 4)
den globalen Standardwerttab-width
auf 4 ändern , hat jetzt jeder Puffer, der sich nichttab-width
selbst definiert hat, diesen neuen Standardwert.