Tenho uma pergunta sobre o Emacs Lisp. Qual é a diferença entre setq e setq-default ?
Os tutoriais dizem que setq tem efeito no buffer local, enquanto setq-default afeta todos os buffers.
Por exemplo, se eu escrevi (setq a-var a-vars-value) em init.el , descobri depois de iniciar o Emacs e abrir um novo buffer, o a-var também está lá e seu valor é a-vars-value . Achei que não deveria estar lá. Parece que não há diferença entre setq e setq-default .
Há algo de errado com meu entendimento?
Por exemplo:
Escrevi (setq hello 123) no arquivo init.el e executo o emacs abuffer no shell, depois insiro "hello Cx Ce" , ele mostra "123". O mesmo acontece quando eu executo isso em todos os novos buffers.
Eu escrevi (setq tab-width 4) no arquivo init.el. Quando executo o Cx Ce de largura de tabulação , ele mostra "8" (o modo atual é 'Texto'). No entanto, quando eu uso (setq-default tab-width 4) , ele mostra "4". Não consigo explicar esse fenômeno.
(setq tab-width 4)
tem efeito no buffer onde você avaliou a expressão; se você avaliá-lo no*scratch*
buffer, examine seu valor nesse buffer.tab-width
é uma variável local do buffer. Então, quando você(setq tab-width 4)
, é definido apenas como 4 no buffer atual. Todos os outros buffers retêm umtab-width
do padrão global, 8. Quando você(setq-default tab-width 4)
, está alterando o padrão global detab-width
para 4, agora cada buffer que não se definiutab-width
tem esse novo padrão.