Emacs 的 file-local 变量可以写在文件的开头或者结尾,写在开头的话就是这种形式:
;;; -*- var1:value1;var2:value2;... -*-
想要让当前 elisp 文件默认使用词法作用域,把 lexical-binding:t
放在开头是最好的唯一标准的做法。如果要放在文件末尾的话,得用如下格式:
;; Local Variables:
;; variable: value
;; End:
有个专门的函数可以添加 file-local 变量到末尾: add-file-local-variable
。把 lexical-binding
放在文件末尾不是一种比较好的做法,原因可以参考: 求助:启动emacs出现“ Warning (files): : ‘lexical-binding’ at end of file unreliable”警告 。
如果写在文件中间的位置,是不是只影响此位置到文件末尾的内容?
答案是不能写在中间,只能是开头或结尾,且必须满足格式要求,而且结尾是不好的做法会出现非预期行为。
或者说当文件中某一位置出现它时,它的影响范围可以达到文件的哪个位置?
就 lexical-binding
来说,它的效果是全局的,其他变量应该也是。Emacs 解释器不会查看 lexical-binding
以外的变量。