【发布时间】:2014-06-12 13:51:58
【问题描述】:
在 Emacs 中修改文件时,会在工作目录中创建一个临时文件,如下所示:.#filename。保存缓冲区时文件被删除。
我在我的 Git 远程存储库中发现了其中一些类型的临时文件,我认为最好从源头扼杀萌芽,而不是将 Git 配置为对每个项目都忽略它们。
我们如何配置 Emacs 以在 /tmp 目录而不是工作目录中创建这些文件?
【问题讨论】:
在 Emacs 中修改文件时,会在工作目录中创建一个临时文件,如下所示:.#filename。保存缓冲区时文件被删除。
我在我的 Git 远程存储库中发现了其中一些类型的临时文件,我认为最好从源头扼杀萌芽,而不是将 Git 配置为对每个项目都忽略它们。
我们如何配置 Emacs 以在 /tmp 目录而不是工作目录中创建这些文件?
【问题讨论】:
该文件称为 lock 文件 -- 从 Emacs 版本 24.3 开始,可以通过以下设置进行控制:
(setq create-lockfiles nil)
【讨论】:
这些文件是自动保存文件。变量auto-save-file-name-transforms 控制对缓冲区的文件名进行哪些修改以生成自动保存文件名。通常,file.el 中的默认值足以将所有自动保存文件放在/tmp 目录中。它的默认值为:
(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'" "/tmp/\\2" t))
/tmp 是通过读取变量 temporary-file-directory 得出的。检查该值,使其指向/tmp。然后,为auto-save-file-name-transforms(以及因此为自动保存文件名)构造的值将是正确的。
【讨论】:
--with-ns 的相当新版本的 Emacs Trunk 没有任何影响。关于这个特定文件.#filename 的信息是它是一个alias——信息在Finder.app 中可见。这可能是 OSX 系统特定的动物吗?我还有以下设置:(setq backup-inhibited t); (setq auto-save-default nil); (setq savehist-autosave-interval nil); (savehist-mode -1).
backup-inhibited 设为非 nil 将永远不会创建备份文件。
# Lock files used by the Emacs editor.我认为自动保存文件使用~。就我而言,我有.# 继续。 github.com/core-plot/core-plot/blob/master/.gitignore#L7 我们可以告诉 Emacs 将该锁定文件放在 /tmp 目录中,而不是使用 Git 忽略吗?
作为更通用的解决方案,您还可以创建一个全局排除文件,该文件适用于本地的所有存储库。默认情况下,这将在$XDG_CONFIG_HOME/git/ignore(通常是~/.config/git/ignore)中。可以使用core.excludesFile 选项覆盖路径。详情请见the gitignore manpage。
$ mkdir -p ~/.config/git
$ echo '.#*' >> ~/.config/git/ignore
【讨论】: