我有一个问题关于Emacs Lisp。什么是 setq 和 setq-default 的区别?
教程说,setq 在 本地缓冲区 生效,而 setq-default 会影响所有缓冲区。
例如,如果我在 init.el 文件中写下 (setq a-var a-vars-value),那么在启动 Emacs 并打开一个新缓冲区后,a-var 也会存在,并且其值为 a-vars-value。我原本以为它不应该在那里出现。看起来 setq 和 setq-default 没有区别。
请问我的理解有什么问题吗?
例如:
教程说,setq 在 本地缓冲区 生效,而 setq-default 会影响所有缓冲区。
例如,如果我在 init.el 文件中写下 (setq a-var a-vars-value),那么在启动 Emacs 并打开一个新缓冲区后,a-var 也会存在,并且其值为 a-vars-value。我原本以为它不应该在那里出现。看起来 setq 和 setq-default 没有区别。
请问我的理解有什么问题吗?
例如:
我在 init.el 中写下 (setq hello 123),然后在 shell 中运行 emacs abuffer,接着输入 "hello C-x C-e",会显示 "123"。使用同样的方法在所有新的缓冲区也会显示。
我在 init.el 中写下 (setq tab-width 4)。当我运行 tab-width C-x C-e 时,它显示 "8"(当前模式是 'Text')。但是,当我使用 (setq-default tab-width 4) 时,它显示 "4"。我无法解释这种现象。
tab-width
是一个缓冲区本地变量。因此,当你(setq tab-width 4)
时,它只在当前缓冲区中设置为 4。所有其他缓冲区保留全局默认值tab-width
为 8。当你(setq-default tab-width 4)
时,你正在改变tab-width
的全局默认值为 4,因此现在每个未定义自己的tab-width
的缓冲区都有这个新的默认值。 - dfan