我正在學習關於詞法和動態作用域(以及因此文件變量)。分號在定義本地文件變量中的作用
許多資源建議更新使用
;; -*- lexical-binding: t -*-
或
;;; -*- lexical-binding: t -*-
但是,lexical-binding
文件變量,則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如何區分標記評論和分隔符的分號?
文件局部變量是否來自在C中實現的Emacs部分呢? –
不一定。使用emacs編輯的相同文件很可能會被其他軟件(HTML解析器,Python解釋器,C編譯器等)讀取,因此您必須能夠對文件局部變量標記進行註釋以避免中斷文件語義。嘗試不使用分號的「eval-buffer」,它會失敗。 – Juancho
我不明白你的評論Lorem Ipsum,但我想也許你對答案中提到的「C程序」感到困惑。由於' - * - '行是文件的一部分,因此可以通過任何*軟件來分析文件,但對於任何這樣的解析器來說它不會是有效的語法*,因此它需要一條評論。評論語法取決於文件的種類。例如'// - * - indent-tabs-mode:nil; - * - '可能在Javascript程序中使用。 – phils