请问 ;; -*- lexical-binding: t; -*- 作用范围

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出现“:no_entry: Warning (files): : ‘lexical-binding’ at end of file unreliable”警告

如果写在文件中间的位置,是不是只影响此位置到文件末尾的内容?

答案是不能写在中间,只能是开头或结尾,且必须满足格式要求,而且结尾是不好的做法会出现非预期行为

或者说当文件中某一位置出现它时,它的影响范围可以达到文件的哪个位置?

lexical-binding 来说,它的效果是全局的,其他变量应该也是Emacs 解释器不会查看 lexical-binding 以外的变量。

2 个赞