У меня вопрос о Emacs Lisp. В чем разница между setq и setq-default ?
В руководствах говорится, что setq действует в локальном буфере, а setq-default влияет на все буферы.
Например, если я написал (setq a-var a-vars-value) в init.el , я обнаружил, что после запуска Emacs и открытия нового буфера, a-var тоже присутствует, и его значение равно a-vars-value . Я думал, этого не должно было быть. Кажется, нет разницы между setq и setq-default .
Что-то не так с моим пониманием?
Например:
Я написал (setq hello 123) в файле init.el и запускаю emacs abuffer в оболочке, затем ввожу «hello Cx Ce» , отображается «123». То же самое происходит, когда я запускаю это во всех новых буферах.
Я написал (setq tab-width 4) в файле init.el. Когда я запускаю Cx Ce шириной табуляции , он показывает «8» (текущий режим - «Текст»). Однако, когда я использую (setq-default tab-width 4) , отображается «4». Я не могу объяснить это явление.
(setq tab-width 4)
вступает в силу в буфере, в котором вы вычислили выражение; если вы оцениваете его в*scratch*
буфере, проверьте его значение в этом буфере.tab-width
переменная, локальная в буфере. Поэтому, когда вы(setq tab-width 4)
, он установлен только на 4 в текущем буфере. Все остальные буферы сохраняютtab-width
глобальное значение по умолчанию, 8. Когда(setq-default tab-width 4)
вы меняете глобальное значение по умолчанию, равноеtab-width
4, теперь каждый буфер, который не определилtab-width
сам себя, имеет это новое значение по умолчанию.