我有一台远程 Linux 机器,我将其用作 Web 应用程序的开发服务器。我无法在本地重现环境,文件必须在远程服务器上执行,但我想在本地编辑它们(在 vim 中)。
该远程服务器上的文件通过 Git 进行管理。我通常一次只编辑数百个文件中的 1-5 个。
建议的解决方案以及它们为何效果不佳的原因:
sshfs:这个解决方案看起来很棒,但存在一些错误。
- 本地编辑器将在保存时挂起几秒钟 - 在网络延迟的情况下不会异步保存。
- 如果在 sshfs 处于活动状态时网络出现故障,它实际上会阻塞文件系统的该部分,直到您执行一些 hacky 操作来卸载它:http://sourceforge.net/p/fuse/mailman/message/26936619/
- 总体来说相当慢,因为它不断同步数据,而不是在编辑时创建该文件的本地副本
重力加速度:
- 操作速度慢 - 打开文件需要很长时间,并且目录树不被缓存。此外,还有一个错误(超过 5 年)导致 vim 践踏文件权限,这意味着我必须不断通过远程 ssh 更新权限
同步:
- 由于这是一个 git 存储库,我可能需要经常更改分支。有时远程服务器可能需要更新我,反之亦然。总的来说,这增加了很多复杂性,并且每当我想检查远程服务器上的更改时都需要手动同步。
通过终端在远程机器上使用 vim:
- 击键有延迟——这让我发疯。
FTP协议
- 它创建的临时文件具有任意名称 - 所以你无法分辨哪个选项卡是什么
- 需要关闭 vim 才能更新远程服务器(愚蠢)
当然一定有更好的方法吗?在 Windows 上,我使用了 winSCP,它基本上在本地创建了您编辑的文件的临时副本,当您保存它时,它会在后台同步该文件(这样您可以在保存后立即在编辑器中继续)。
我发现了这个关于 emacs 的问题,但我不想使用 emacs :( 如何ssh到远程服务器并使用本地emacs编辑文件?
答案1
你的列表中缺少一个选项是 Vim 的网络插件(由 @godlygeek 在评论中首次提到),随 Vim 一起提供。您可以:edit scp://hostname/path/to/file
,甚至在启动时指定这样的 URL:$ vim ftp://hostname/path/to/file
。它支持多种协议,并透明地处理下载/上传(在每个协议上:write
),同时保留原始文件名,因此文件类型检测等仍然有效。
答案2
对于生产系统来说,这可能不是一个可接受的解决方案,但您可以与 git 结合运行 BitTorrentSync(或任何其他)等同步服务。我在笔记本电脑和台式机之间执行此操作,效果很好。
我可以在家修改本地 git 存储库中的文件(而不是提交或推送)。当我开始工作时,可以进行相同的修改。我可以从那里完成并提交/推送。
我有一个 ~/Git 文件夹,它是我的主 BitTorrentSync 文件夹。在该文件夹中,每个存储库都有多个子目录。只需确保将 BitTorrentSync“.Sync”文件夹添加到“.gitignore”即可。