为啥 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 会为修改过的文件创建临时符号链接?的主要内容,如果未能解决你的问题,请参考以下文章
C#怎监控例似WORD这样用临时文档记录修改过的文件,并复制修改后的文件?