我正在学习词汇和动态范围(以及文件变量)。
许多资源建议使用
更新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如何区分标记注释和分隔符的分号?
答案 0 :(得分:2)
文件局部变量规范不是elisp,可以是任何文件类型(C程序,文本文件等)的一部分。
因此,它们可以受模式的注释分隔符保护,以免干扰,例如,编译器读取同一文件。
在这种情况下,分号作为elisp注释存在,因此您可以在没有错误的情况下评估缓冲区。分号is a commenting convention的数量。