2013-12-13 38 views
1
(setq backup-directory-alist `(("." . "~/.saves"))) 

我知道它設置了保存備份文件的目錄,但我不明白`(("." . "~/.saves"))部件在做什麼。具體來說:這是什麼emacs配置在做什麼?

  1. 什麼是標記在做什麼? (還有,這件事有一個特殊的googleable名稱?)
  2. 爲什麼這需要雙括號?它就像default settings中的那樣,而不僅僅是在我的配置文件中。
  3. 看起來像裏面的孤零零.可能是某種替代運算符,我注意到我用另一個逗號代替了另一個類似的行。這些事情在做什麼?

我的google-fu在識別lisp中標點符號做什麼時失敗了,我懶得通過emacs lisp教程工作。

回答

6

backup-directory-alist的文檔確實解釋了大部分情況。值爲association list,其中每個密鑰爲regular expression。簡單的正則表達式"."匹配每個非空字符串,所以它適用於每個目錄名稱。

的關聯列表是從開始到結束閱讀,而且很容易在Lisp的前面加上一個新的關聯:

(setq backup-directory-alist 
     (cons '("\\`/tmp/" . "/tmp/saves") 
     backup-directory-alist)) 

...或者更簡潔

(push '("\\`/tmp/" . "/tmp/saves") backup-directory-alist) 

...結束帶有兩個設置的列表:如果所有其他路徑都使用通用的路徑,則前面的正則表達式爲"\\`/tmp/"的路徑將使用特定的路徑。

您寫了一個backquote,但引用表達式的正確方法是使用常規quote

alist鍵和值之間的點是cons,這是創建列表的基元。實際上,缺點比列表簡單,因此您可以直接使用cdr而不是概念上更復雜的cadrcdrcar)來獲取該值。

我不認爲你可以在這個位置有一個逗號(儘管逗號有用於反引號)。

+0

謝謝。這很有幫助,尤其是編輯後的擴展。 –

+1

另一個術語是quasiquote。我曾經看到過一個對我來說很有意義的解釋。 lisp中的默認值是不加引號的,'''引用它們。 quasiquote''''翻轉了這個,所以默認情況下會引用這些東西,並且用','不加引號。 – jpkotta