У меня есть вопрос о Emacs Lisp. В чем разница между setq и setq-default? Я очень смущен этим.Разница между setq и setq-default в Emacs Lisp
Учебники говорят SETQ вступает в силу в локальном буфере пока SETQ по умолчанию влияет на все буферы.
Например, если я писал (SETQ а-а-вар вары-значение) в init.el, я обнаружил, после запуска Emacs и открытия нового буфера, то а-вар также там и его значение равно a-vars-value. Я думал, что это не должно быть там. Кажется, нет никакой разницы между setq и setq-default.
Есть ли что-то не так с моим пониманием?
спасибо.
Например:
1) Я написал (SETQ привет 123) в init.el файл, и я бегу Emacs abuffer в оболочке, то я вход "привет Cx Ce" , он показывает «123». То же самое происходит, когда я запускаю это во всех новых буферах.
2) Я написал (SETQ вкладка ширину 4) в init.el файле. Когда я запускаю tab-width C-x C-e, он показывает «8» (текущий режим - «Текст»). Однако, когда я использую (setq-default tab-width 4), он показывает «4». Я не могу объяснить это явление.
, когда I (устанавливает ширину полосы 4) и оценивает его, он всегда 8 в каждом буфере. Я не знаю почему. Кажется, это не вступает в силу. Но когда я использую (set-default tab-width 4), он действует в каждом буфере.Я также не знаю, почему :( – ruanhao
'(setq tab-width 4)' действует в буфере, где вы оценили выражение, если вы его оцениваете в буфере '* scratch * ', тогда проверьте его значение в этом буфере. – tripleee
'tab-width' - это локальная переменная буфера. Поэтому, когда вы' (setq tab-width 4) ', в текущем буфере оно установлено только 4. Все остальные буферы сохраняют' tab-width' глобального значения по умолчанию , 8. Когда вы '(setq-default tab-width 4)', вы меняете глобальное значение по умолчанию 'tab-width' на 4, поэтому теперь каждый буфер, который не определил' tab-width', имеет этот новый по умолчанию – dfan