这个emacs配置在做什么?

Wil*_*ett 1 emacs elisp

(setq backup-directory-alist `(("." . "~/.saves")))
Run Code Online (Sandbox Code Playgroud)

我知道它正在设置保存备份文件的目录,但我不明白该`(("." . "~/.saves"))部件正在做什么.特别:

  1. 什么是'标记在做什么?(还有那个东西有一个特殊的可谷歌名字吗?)
  2. 为什么这需要双括号?在默认设置中就是这样,而不仅仅是在我的配置文件中.
  3. 似乎单独的.内部可能是某种替换运算符,我注意到我有另一个类似的行用逗号代替.这些事情的作用是什么?

我的google-fu在找出lisp中标点符号的作用时失败了,而且我懒得通过emacs lisp教程.

tri*_*eee 6

该文档backup-directory-alist确实解释了大部分内容.该值是一个关联列表,其中每个键都是正则表达式.简单的正则表达式"."匹配每个非空字符串,因此它适用于每个目录名称.

从头到尾读取关联列表,在Lisp中很容易添加新的关联:

(setq backup-directory-alist
      (cons '("\\`/tmp/" . "/tmp/saves")
      backup-directory-alist))
Run Code Online (Sandbox Code Playgroud)

......或者更简洁

(push '("\\`/tmp/" . "/tmp/saves") backup-directory-alist)
Run Code Online (Sandbox Code Playgroud)

...最终得到一个包含两个设置的列表:一个特定的路径,用于匹配"\\`/tmp/"前面的正则表达式的路径,如果是所有其他路径的通用路径.

你写了一个反引号,但引用表达式的正确方法是使用常规引用.

alist键和值之间的点是cons,一个用于创建列表的基元.实际上,缺点比列表更简单,因此您可以直接获得值cdr,而不是概念上更复杂cadr(carcdr).

我不认为你可以在那个位置使用逗号(虽然逗号在反引号中有用).