为啥 emacs 会为修改过的文件创建临时符号链接?

Posted

技术标签:

【中文标题】为啥 emacs 会为修改过的文件创建临时符号链接?【英文标题】:Why does emacs create temporary symbolic links for modified files?为什么 emacs 会为修改过的文件创建临时符号链接? 【发布时间】:2011-08-09 22:31:15 【问题描述】:

当我修改缓冲区时,Emacs 会自动在与正在编辑的文件相同的目录中创建一个临时符号链接(例如 foo.c):

.#foo.c -> user@host.12345:1296583136

其中 '12345' 是 Emacs 的 PID(我不知道最后一个数字是什么意思)。

为什么 Emacs 会创建这些链接,我该如何防止它这样做?

请注意,我已关闭自动保存模式 (M-x auto-save-mode) 并禁用备份文件 (M-x set-variable -> make-backup-files -> nil)。当我保存修改过的缓冲区或撤消对它的更改时,符号链接会消失。

特别是,我试图阻止 Emacs 创建这些链接,因为它们会导致目录时间戳被修改,这会导致我们的构建系统重新构建整个模块,而不是为一个更改的文件编译和链接:/

感谢您的任何意见!


更新:为了防止 Emacs 永久创建互锁文件,您可以更改 src/filelock.c 并构建自定义二进制文件:

void
lock_file (fn)
     Lisp_Object fn;

     return;
     // Unused code below...


更新 2:Arne 的回答是正确的。现在可以在最新的 Emacs (24.3.1) 中禁用锁定文件,方法是将其添加到您的 .emacs 文件中:

(setq create-lockfiles nil)

【问题讨论】:

非常感谢您的更新!我会看看我是否可以改变它,因为它严重干扰了我正在处理的项目的构建系统。 我不得不禁用 lockfiles 的原因(现在很干净,使用 create-lockfiles 变量 - 感谢 Emacs 开发人员!)是在 Samba/CIFS 共享上的文件的情况下,它们会一直存在:- (经过几次编辑会话后,目录完全被它们弄得一团糟,并且因为它们被实现为有意悬挂的符号链接,所以我的文件系统 lint 工具会报告它们。为什么?挂载选项:rw,relatime,vers=1.0,cache=strict,domain =,uid=0,noforceuid,gid=0,noforcegid,addr=10.8.78.1,soft,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=65536,echo_interval=60,actimeo=1 第二个(最后一个)数字显然是一个时间戳。 【参考方案1】:

更新:Emacs 24.3 已发布,完全支持这一新设置!

在当前的emacs主干中,可以简单的自定义变量create-lockfiles:

C-h v create-lockfiles

文档: 非零意味着使用锁定文件来避免编辑冲突。

在你的初始化文件中,你可以设置

(setq create-lockfiles nil)

通过

bzr branch bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk
make
src/emacs

(我发现了这一点,因为我决定积极起来,自己添加一个类似的选项……:))

【讨论】:

有没有办法通过在别处创建符号链接来保留此功能?【参考方案2】:

符号链接是emacs的文件联锁系统:符号链接表示emacs的一个实例正在编辑这个文件。如果另一个实例试图编辑同一个文件,emacs 将发出警告。见http://www.gnu.org/software/emacs/manual/html_node/emacs/Interlocking.html

这与自动保存无关。

我找不到如何在 emacs 中修改或禁用文件锁定。

【讨论】:

你能评论一下这个功能在单用户系统上是否有用吗? (我不是指 DOS 和 pre-WinNT;我指的是事实上的单用户系统) @ErikAllik:大多数文件只能由文件所有者编辑,因此单用户系统与否几乎没有区别。该锁定系统旨在帮助您避免射击自己的脚,例如当你有两个 Emacs 实例想要同时修改这个文件时。 我想知道为什么它使用符号链接,而不仅仅是一个常规的锁定文件?是否只是在目标中有额外的信息?

以上是关于为啥 emacs 会为修改过的文件创建临时符号链接?的主要内容,如果未能解决你的问题,请参考以下文章

为文件夹创建符号链接mklink

C#怎监控例似WORD这样用临时文档记录修改过的文件,并复制修改后的文件?

为啥 PhoneGap 会为同一个应用创建不同的 config.xml 文件?

Linux下创建和删除软硬链接 可临时处理空间不足

为啥linux修改不了配置文件

为啥当我单击一个链接时,它会为我的所有链接执行该功能? (Javascipt)