我喜欢 Gnome 的 Nautilus 和 FTP 集成,能够将远程 FTP 目录挂载为常规书签/目录,并双击任何远程文件以在任何未修改的程序中打开。我也喜欢用 GVim 编辑文本文件。
但是,如果我双击 Nautilus 上的文件以在 Gvim 中打开文本文件,则保存文件将需要大约 10 秒钟,并且 GVim 会挂起这段时间。最令人恼火的是,在文本编辑器等待写入完成时,我无法继续编辑,这种延迟打断了我的工作流程和思维过程,保存变成了一个痛苦的过程。另一个问题是,我认为仅仅上传文件不应该花这么多时间。
我知道 GVim 的内部 FTP 支持,但它们与 Nautilus 的 FTP 集成得不太好,并且存在同样的问题。
有几个问题:
- 有没有办法让 GVim 或 GVFS 在后台保存,同时我继续编辑?
- 为什么 GVFS 这么慢?有没有办法将 GVFS 设置为使用单个持久 FTP 连接,而不是每次都创建新的 FTP 连接?
我在 Gentoo Linux x86-64 上。
答案1
不幸的是,我认为你不会找到解决方案,至少不会轻易找到。我的理解是,这是虚拟文件系统的一个功能 - 它会阻止写入,直到写入成功完成或失败,以便可以准确地报告给应用程序。
我(像 user55325 一样)在使用 Kate 和 SFTP 时也遇到过这种情况,在使用其他一些应用程序时也遇到过这种情况,它似乎就是这样工作的。
鉴于我的 VPN 工作速度相当慢,我不得不放弃在家工作时以这种方式编辑文件,并且对于大型项目我不得不求助于 rsync。
答案2
有人认为你已经忽略了netrw 插件(至少在 Debian 和 Ubuntu 上)随 Vim 运行时一起分发。这似乎是正确的做法,除非出于某种原因您需要文件看起来像是本地文件。
如果您想将远程文件视为本地文件,最好使用比 gvfs 更可配置的 VFS 系统。例如,您可以考虑curlftpfs或者房颤FUSE 模块。前者确实允许在连接超时时重新连接,并且有相当完善的文档记录。
听起来您的问题确实是因为 gVim 认为您的文件是本地文件,但实际上并非如此,并且在 I/O 被阻止等待 FTP 连接打开时执行正确的操作。使用可保持持久连接的 FUSE 挂载,或正确使用 netrw 插件,应该可以为您解决这些问题。
你想应用程序在写入失败时进行阻止。软挂载只应用于只读数据,因此即使 Vim 提供了这样的行为,依赖它也不是一个好主意。