到底什么是buffer-local variable?


#1

什么情况下必须使用setq-default?

如何确定一个variable是否是buffer-local的?

我现在是通过看help……但是help也不一定准确,比如paragraph-start

谢谢


#2

C-h f local-variable-p

(info “elisp”)C-x C-e C-s local variable

有buffer local ,file local 连目录都有local


#3

这个函数难得在文档里有,好歹翻翻文档啊。 local-variable-p


#4

为什么 help 会不准确…

(defvar foo 1)
(make-local-variable 'foo)
(setq foo 123)

describe foo 可以看到

foo’s value is 123
Local in buffer *scratch*; global value is 1

(如果 help 不准确,那 Emacs 就没什么东西准确了 233)


#5

我用词不准确……

我的意思是help无法提供“我是否该用setq-default设置它”这一信息


#6

Automatically becomes buffer-local when set.

的就是可以用setq-default的?然后用了之后能否生效要看你的配置了,如果没有像spacemacs那样偷偷在mode hook里面又改了一下,那setq-default肯定是可以依赖的


#7

我很多的问题都来自我的强迫症。包括我当初学编程的理由也是”它是确定的“(请原谅我当时的愚蠢……)

所以再改一遍,我的问题是:

help无法提供“我是否必须使用setq-default来设置这个变量的初始值”这一信息。


#8

啥……没有“必须”啊,只有可不可以,然后用不用取决于你的决定啊……


#9

如果你需要所有buffer默认都使用某个值,就用setq-default

我好像明白你的意思了。如果变量声明的时候用的是defvar-local,不管用setq还是setq-local,变量都只在当前buffer改变。如果用的是普通的defvar声明,只有setq-local有buffer local效果。

defvar-local的变量在help里会说“automatically become buffer local,这时候你就要用setq- default


#10

对……感谢

毕竟我是个有强迫症的人,我的意思就是什么情况下必须要使用setq-default, 因为如果二者效果相同,我会使用更短的setq, 我就是想问问什么情况下两者的效果才不是等同的。

而我现在除了你提到的之外,我还会在声明为save file local variable的变量上使用setq-default……因为我感觉他们需要一个“默认值”……这是为了解释清楚