Mam pytanie dotyczące Emacsa Lispa. Jaka jest różnica między setq i setq-default ?
Samouczki mówią, że setq działa w buforze lokalnym, podczas gdy setq-default wpływa na wszystkie bufory.
Na przykład, jeśli napisałem (setq a-var a-vars-value) w init.el , znalazłem po uruchomieniu Emacsa i otwarciu nowego bufora, a-var też tam jest i jego wartość to a-vars-value . Myślałem, że to nie powinno tam być. Wygląda na to, że nie ma różnicy między setq i setq-default .
Czy jest coś nie tak z moim zrozumieniem?
Na przykład:
Napisałem (setq hello 123) w pliku init.el i uruchamiam emacs abuffer w powłoce, potem wpisuję "hello Cx Ce" , pokazuje "123". To samo dzieje się, gdy uruchamiam to we wszystkich nowych buforach.
Napisałem (setq tab-width 4) w pliku init.el. Kiedy uruchamiam Cx Ce o szerokości tabulacji , pokazuje "8" (aktualny tryb to 'Tekst'). Jednak kiedy używam (setq-default tab-width 4) , pokazuje "4". Nie potrafię wyjaśnić tego zjawiska.
(setq tab-width 4)
działa w buforze, w którym oceniłeś wyrażenie; jeśli oceniasz go w*scratch*
buforze, sprawdź jego wartość w tym buforze.tab-width
jest zmienną lokalną w buforze. Więc kiedy ty(setq tab-width 4)
, jest ustawiony na 4 w bieżącym buforze. Wszystkie inne bufory zachowujątab-width
globalną wartość domyślną 8. Kiedy(setq-default tab-width 4)
zmieniasz globalną wartość domyślnątab-width
na 4, więc teraz każdy bufor, którytab-width
sam się nie zdefiniował , ma nową wartość domyślną.