2

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

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

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

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

4

4 回答 4

2

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

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

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

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

于 2009-12-26T19:08:40.187 回答
1

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

不幸的是,我不知道禁用此功能或强制 emacs 将这些符号链接存储在不同目录中的方法(我不经常使用 emacs,并且在手册中没有找到任何内容),因此您可能只需要定期删除恐怕他们是手动的。

于 2009-12-26T18:06:37.130 回答
1

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

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

于 2012-03-15T16:49:26.373 回答
0

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

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

这是因为 lock-buffer 和 unlock-buffer 函数是原语,并且被其他原语调用以创建这些符号链接。在旧版本的 Emacs 中,它们可以在 elisp 中重新定义或消除锯齿,但原语不会注意到这种变化。

于 2011-01-28T03:50:49.550 回答