这个“文件局部变量”是什么意思?

时间:2012-08-29 14:20:39

标签: emacs elisp

我正在阅读emacs手册中的kill-emacs-hook变量。 它说:

  

kill-emacs-hook是“C源代码”中定义的变量   它的价值是
  (org-babel-remove-temporary-directory migemo-pattern-alist-save)

     

当用作文件局部变量时,此变量具有潜在风险。

     

文档:
  调用“kill-emacs”时要运行挂钩   ...简称...

我不明白这句话:“一个文件局部变量”。这个“文件局部变量”是什么意思?

2 个答案:

答案 0 :(得分:4)

Emacs有一个用于在文件内容中指定缓冲区变量的工具。 http://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html#Specifying-File-Variables

这经常用于指定文件的模式-*- python -*-或例如首选缩进样式或标签宽度;但如果允许的话,它可能会让文件的作者完全控制你的Emacs。但是,对于被认为不安全的变量,默认行为是在允许设置生效之前要求用户进行确认。有关进一步的讨论,请参阅手册。

答案 1 :(得分:2)

默认情况下,当您使用setq设置变量时,该值为全局值。这意味着所有缓冲区都将看到新值。

但是,某些变量(称为缓冲区局部变量)的工作方式不同。设置缓冲区局部变量时,其值仅对发生setq的缓冲区更改。其他缓冲区看不到变化。

这些缓冲区局部变量可以从缓冲区当前访问的文件的内容中获取它们的值。如果文件包含格式正确的字符串(请参阅@ tripleee的答案),则在文件打开时,将使用该值初始化缓冲区局部变量。

作为旁注,还存在目录局部变量,它为访问目录中文件的每个缓冲区设置缓冲区局部变量。