为什么sshfs导致这些Emacs工件?

时间:2009-12-26 16:49:20

标签: emacs sshfs fuser

在emacs中打开文件后(通过ssh隧道,sshfs挂载的文件系统)我得到这样的符号链接:

.#jobid.php -> ddh@localhost.localdomain.31678:1260471633

我们已确定这些是emacs LOCK文件。

sshfs文件系统使用follow_symlinks和transform_symlinks挂载,但它似乎拒绝通过readlink返回链接'text',因此emacs不会删除它们。

4 个答案:

答案 0 :(得分:2)

如果您正在寻找文档,Emacs会将这些文件称为file locks

您可以直接从Emacs访问远程文件:

,而不是使用sshfs / FUSE
C-x C-f /ssh:host.name:/path/to/file RET

以这种方式编辑远程文件时,Emacs不会创建文件锁 - 有关编辑远程文件的详细信息,请搜索“TRAMP”。 (不幸的是,我猜Emacs不能说你的FUSE挂载点是由远程文件系统支持的,或者在它上面创建文件锁是有问题的。)

答案 1 :(得分:1)

emacs使用这些符号链接来防止多个emacs实例修改同一文件。保存文件时,符号链接通常消失,但听起来像fuse-sshfs干扰了这个过程,因为符号链接的目标不是真正的文件(它不应该是,但sshfs期待它。)

不幸的是,我不知道如何禁用此功能或强制emacs将这些符号链接存储在不同的目录中(我很少使用emacs而我手册中没有找到任何内容),所以你可能需要我不敢手动定期删除它们。

答案 2 :(得分:1)

follow_symlinks选项强制远程系统上的符号链接显示为实际文件。当符号链接引用通过sshfs挂载的目录之外的远程主机上的目标时,这很有用,但它会破坏Emacs的假设,因为当Emacs创建符号链接时,它希望以后相同的路径看起来像符号链接。

但是,您应该能够使远程主机上的所有符号链接正常工作,同时仍然使用transform_symlinks选项(而不是follow_symlinks)显示为符号链接,并且始终安装远程主机的根目录系统(而不仅仅是你的主目录或其他东西)。这应该允许emacs滥用符号链接作为锁定文件,同时仍然可以访问远程符号链接目标。

答案 3 :(得分:0)

当缓冲区访问文件时,这些符号链接由Emacs创建,它们阻止两个Emacs实例编辑同一个文件(如其他答案中所述)。 Emacs将此称为“冲突检测”。

不幸的是,在GNU emacs中阻止此行为的唯一方法是在编译时。源文档描述了如何通过更改标题来实现此目的。

这是因为锁定缓冲区和解锁缓冲区函数是基元,并且由其他基元调用以创建这些符号链接。在旧版本的Emacs中,可以在elisp中重新定义或取消它们,但原语不会注意到这种变化。