比如上面这个变量的文档:
Automatically becomes buffer-local when set.
这是个自动buffer-local的变量,setq-default
会改变默认值,但是已经打开的buffer里的值不会变,毕竟只改了default。另外用setq
只会改当前buffer的变量,default不会变。
而非buffer-local的变量,整个emacs里只有一份,setq
当然就直接改了那一份,然后每个buffer看起来都是改了的。
defvar
产生的是非buffer-local的,产出上面这样的自动buffer-local变量,据emacs wiki说有两种办法:
Use defvar or defcustom to define the variable, then use make-variable-buffer-local to make it always buffer-local, or
Use defvar or defcustom to define the variable, then write a mode, and in the mode function, use make-local-variable.
作为小白末端用户,第二种会用的多一点,比如一个包给的一个变量是非buffer-local的,我想在,比如,org-mode中改掉它,其他mode都不变,那就可以在org-mode-hook
里(setq (make-local-variable 'foo) "value")