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

为什么sshfs会导致这些Emacs工件?,emacs,sshfs,fuser,Emacs,Sshfs,Fuser,在emacs中打开一个文件(通过ssh隧道、安装了sshfs的文件系统)后,我得到如下符号链接: .#jobid.php -> ddh@localhost.localdomain.31678:1260471633 我们已经确定这些是emacs锁文件 sshfs文件系统装载了follow_symlinks和transform_symlinks,但它似乎拒绝通过readlink返回链接“text”,因此emacs不会删除它们。emacs使用这些符号链接来防止多个emacs实例修改同一文件。当

在emacs中打开一个文件(通过ssh隧道、安装了sshfs的文件系统)后,我得到如下符号链接:

.#jobid.php -> ddh@localhost.localdomain.31678:1260471633
我们已经确定这些是emacs锁文件


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

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


不幸的是,我不知道如何禁用此功能或强制emacs将这些符号链接存储在不同的目录中(我不经常使用emacs,并且在手册中找不到任何内容),因此您可能需要定期手动删除它们。如果您要查找文档,Emacs将这些文件称为

您可以直接从Emacs访问远程文件,而不是使用sshfs/FUSE:

C-x C-f /ssh:host.name:/path/to/file RET

当以这种方式编辑远程文件时,Emacs不会创建文件锁——搜索“TRAMP”以获取有关编辑远程文件的更多信息。(不幸的是,我猜Emacs无法判断您的FUSE挂载点是否由远程文件系统支持,或者在其上创建文件锁是否有问题。)

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

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


这是因为lock buffer和unlock buffer函数是原语,其他原语会调用它们来创建这些符号链接。在旧版本的Emacs中,它们可以在elisp中重新定义或删除,但原语不会注意到此更改。

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

但是,通过使用
transform\u symlinks
选项(而不是
follow\u symlinks
)并始终挂载远程系统的根目录(而不仅仅是您的主目录或其他内容),您应该能够使远程主机上的所有符号链接正常工作,同时仍然显示为符号链接。这应该允许emacs将符号链接作为锁定文件滥用,同时仍然可以访问远程符号链接目标