分号在定义本地文件变量中的作用

时间:2017-04-10 19:59:08

标签: variables emacs

我正在学习词汇和动态范围(以及文件变量)。

许多资源建议使用

更新lexical-binding文件变量
;; -*- lexical-binding: t -*-

;;; -*- lexical-binding: t -*-

但是,在Specifying Local File Variables文档中,一般分配表单是

-*- mode: modename; var: value; … -*-

在该表单之后,我希望lexical-binding定义看起来像

-*- lexical-binding: t -*-

所以,我已经测试了它。我有一个名为lexical-scratch.el的文件。第一行是文件变量规范之一(有或没有分号)。我保存缓冲区,然后调用M-x revert-buffer。当我这样做时,调用C-h v lexical-binding表示该变量已更新。我可以使用nil代替t重复此过程以重置变量。

运行所有表单似乎与更新文件变量具有相同的效果。

为什么领先的分号不会对作业进行评论?是因为分号被视为文件变量之间的分隔符吗?如果是这样,Emacs如何区分标记注释和分隔符的分号?

1 个答案:

答案 0 :(得分:2)

文件局部变量规范不是elisp,可以是任何文件类型(C程序,文本文件等)的一部分。

因此,它们可以受模式的注释分隔符保护,以免干扰,例如,编译器读取同一文件。

在这种情况下,分号作为elisp注释存在,因此您可以在没有错误的情况下评估缓冲区。分号is a commenting convention的数量。