为了好玩,让我描述一种完全不同的方法,基于目录变量。
简而言之,您将放入work-directory/
一个名为的文件.dir-locals.el
,其中包含:
((nil . ((eval . (set (make-local-variable 'backup-directory-alist)
(list (cons "."
(file-relative-name
(file-name-directory (buffer-file-name))
(file-name-directory (file-truename
(buffer-file-name)))))))))))
这样做有点滥用backup-directory-alist
. 并为您在work-directory/
. 该本地版本将反过来确保任何备份文件都保存在work-directory
.
为了实现这一点,我们需要两件事:
- 有类似
'(("." . "path/to/work-directory/"))
本地价值的东西
- 确保此路径相对于
location_a/
第二点的原因是,正如其他地方所指出的,一旦符号链接被解析,起点backup-buffer
确实是实际文件的位置。而且我们不能简单地放置绝对路径而不改变备份文件的形状(如果备份目录是绝对路径,备份文件名编码完整路径,这样就不会发生冲突)
笔记:
- 您需要确保特定的局部变量记录在
safe-local-variable-values
. 因为它是一种通用形式,所以它是一次性的工作(只需点击“!”第一次被问到它)
- 这假设
find-file-visit-truename
设置为 nil,但我想如果不是这种情况,你不会问这个问题 :)
该方法的优点:
- 不需要建议(这总是一件好事)
- 尽管它假定您的 Emacs 支持目录变量,但还是相当可移植的
- 您可以灵活地将其放置在您需要的地方
该方法的缺点:
- 好吧,显然你可能不得不
.dir-locals.el
在几个地方复制它
另请注意,如果您想要一种一次性方法,则可以使其更简单,例如:
((nil . ((backup-directory-alist (("." . "../path/to/work-directory"))))))
您实际上在其中一劳永逸地自己计算相对名称。