我正在寻找一种映射:w命令的方法,这样当我使用它时,它将rsync当前目录并保存有问题的文件。理想情况下,rsync命令生成的响应应该在vim中返回,但不能在当前文件中返回,而是作为工具提示或其他内容返回。
我设法在TextMate中实现了这一点,现在我正在寻求开始使用Vim。 我一直在尝试这样的事情:map w:w |!rsync。但这似乎不起作用(我是初学者:))
我很感激任何帮助。
谢谢, 乔
答案 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完成为止。为了让体验更好,我建议
&
将rsync发送到后台。因人而异。