代码之家  ›  专栏  ›  技术社区  ›  Don

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

  •  2
  • Don  · 技术社区  · 15 年前

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

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

    我们已经确定这些是Emacs锁文件。

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

    4 回复  |  直到 13 年前
        1
  •  2
  •   Phil    15 年前

    如果您要查找文档,Emacs将这些文件称为 file locks .

    不用sshfs/fuse,您可以直接从emacs访问远程文件:

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

    Emacs在以这种方式编辑远程文件时不会创建文件锁——搜索“tramp”以获取有关编辑远程文件的更多信息。(不幸的是,我猜Emacs不能告诉您的fuse mountpoint是由远程文件系统支持的,或者在其上创建文件锁是有问题的。)

        2
  •  1
  •   ZoogieZork    15 年前

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

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

        3
  •  1
  •   Ryan C. Thompson    13 年前

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

    但是,通过使用 transform_symlinks 选项(而不是) 下面的链接 )并且总是挂载远程系统的根目录(而不仅仅是您的主目录或其他目录)。这应该允许Emacs滥用符号链接作为锁定文件,同时仍使远程符号链接目标可访问。

        4
  •  0
  •   Karl Anderson    14 年前

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

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

    这是因为lock buffer和unlock buffer函数是原语,并且被其他原语调用以创建这些符号链接。在早期版本的emacs中,它们可以在elisp中被重新定义或破坏,但原语不会注意到这一变化。

    推荐文章