VIM:保存时RSync

时间:2009-08-02 21:24:44

标签: vim textmate rsync

我正在寻找一种映射:w命令的方法,这样当我使用它时,它将rsync当前目录并保存有问题的文件。理想情况下,rsync命令生成的响应应该在vim中返回,但不能在当前文件中返回,而是作为工具提示或其他内容返回。

我设法在TextMate中实现了这一点,现在我正在寻求开始使​​用Vim。 我一直在尝试这样的事情:map w:w |!rsync。但这似乎不起作用(我是初学者:))

我很感激任何帮助。

谢谢, 乔

3 个答案:

答案 0 :(得分:8)

你可以挂钩到BufWritePost。我不记得确切的语法,但“:he BufWritePost”和“:he autocommand”可以帮助您。

你设置了一个像这样的基本钩子(模式匹配文件,所以你可以做* .your_extension):

 :au BufWritePost * !rsync

此外,应该有一些方法使它成为缓冲区本地。

答案 1 :(得分:5)

如果你想保留本地副本,那么viraptor建议的BufWritePost autocmd是最好的选择,但假设你安装了netrw插件(默认的Vim运行时文件的一部分),你也可以启动vim: / p>

vim rsync://myrsync_server.com/path

只需将文件编辑为本地文件:save将更新远程服务器。

:help rsync

答案 2 :(得分:0)

您可以设置缓冲区本地自动命令来执行此操作(请参阅:help autocmd-buflocal

这会将vim设置为在每次写入缓冲区后调用rsync。

au BufWritePost,FileWritePost <buffer> silent !rsync -a /path/to/somedir/ user@host:/remote/dir/ --exclude=*.sw?

有一点需要注意,您必须为在多文件项目中编辑的每个文件设置其中一个自动命令。这很麻烦,很容易忘记为新文件/缓冲区设置它 - 当然,你可以设置一个普通的自动命令,但是你有rsync启动写入不在项目中的文件。

使用rsync-over-ssh,如果可以通过低延迟链接访问远程主机,则可以正常工作 - 否则可能不太好,因为每次写入都会阻止缓冲区进一步更新,直到rsync完成为止。为了让体验更好,我建议

  • 通过持久连接使用connection-multiplexing重用SSH连接。
  • 通过在命令末尾附加&将rsync发送到后台。因人而异。