Tengo una pregunta sobre Emacs Lisp. ¿Cuál es la diferencia entre setq y setq-default ?
Los tutoriales dicen que setq tiene efecto en el búfer local, mientras que setq-default afecta a todos los búferes.
Por ejemplo, si escribí (setq a-var a-vars-value) en init.el , encontré después de iniciar Emacs y abrir un nuevo búfer, el a-var también está allí y su valor es a-vars-value . Pensé que no se suponía que estuviera allí. Parece que no hay diferencia entre setq y setq-default .
¿Hay algún problema con mi comprensión?
Por ejemplo:
Escribí (setq hello 123) en el archivo init.el , y ejecuto emacs abuffer en el shell, luego ingresé "hello Cx Ce" , muestra "123". Lo mismo sucede cuando ejecuto esto en todos los búferes nuevos.
Escribí (setq tab-width 4) en el archivo init.el. Cuando ejecuto Cx Ce de ancho de tabulación , muestra "8" (el modo actual es 'Texto'). Sin embargo, cuando uso (setq-default tab-width 4) , muestra "4". No puedo explicar este fenómeno.
(setq tab-width 4)
tiene efecto en el búfer donde evaluó la expresión; si lo evalúa en el*scratch*
búfer, examine su valor en ese búfer.tab-width
es una variable local de búfer. Entonces, cuando usted(setq tab-width 4)
, solo se establece en 4 en el búfer actual. Todos los demás búferes retienen untab-width
valor predeterminado global, 8. Cuando usted(setq-default tab-width 4)
, está cambiando el valor predeterminado global detab-width
a 4, por lo que ahora cada búfer que no se ha definido atab-width
sí mismo tiene ese nuevo valor predeterminado.