在VIM中保存时使用RSync

7
我正在寻找一种方法来映射:w命令,以便在使用它时将当前目录同步到rsync并保存所涉及的文件。理想情况下,rsync命令生成的响应应在vim中返回,但不是在当前文件中,而是作为工具提示或其他形式展示。
我已经在TextMate中实现了这一点,并且现在希望开始使用Vim。我尝试过像:map w:w |!rsync这样的东西,但似乎不起作用。

1
使用此插件 -> https://github.com/KenN7/vim-arsync。 将 "auto_sync_up" 设置为 1。 - GGCristo
3个回答

10

您可以使用 BufWritePost 钩子函数。我不记得具体的语法是什么,但 ":he BufWritePost" 和 ":he autocommand" 可以帮助您。

您可以像这样设置一个基本的钩子函数(模式匹配文件,所以您可以使用 *.your_extension):

 :au BufWritePost * !rsync

此外,应该有某种方法可以使其成为缓冲区局部的。


6

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

vim rsync://myrsync_server.com/path

只需像编辑本地文件一样编辑文件:保存后会更新远程服务器。

:help rsync

1
你可以设置缓冲区本地自动命令来实现此功能(请参阅 :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发送到后台。可能会有所不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接