2013-03-26 35 views
1

是否有任何相当于:autoread使用netrw访问vim的远程文件时?VIM自动读+ NETRW,以防止意外覆盖

我访问文件,我的工作机器上通过远程NETRW,然后当我到达工作有修改的文件。但是,如果我回去的远程访问,很容易忘记重新加载该文件,如果它已经在缓冲区中打开 - 如果它已经被修改工作的机器上,那么,接下来的:w将覆盖我做了,而任何改变工作中。我在寻找一个“安全网”,以减少数据丢失的风险(幸运的是,我没有失去任何由于尚未.swp文件,但是,这不是一个很让人放心的净额)。

+1

使用合适的VCS可以为您提供您正在寻找的安全网。或直接在远程机器上使用Vim。 – romainl 2013-03-26 19:47:52

+0

通过vim直接使用VCS将是一个不错的选择。至少对我来说,直接使用vim并不是一个真正的选择,因为它可以防止使用gvim并增加编辑过程的延迟。 – keflavich 2013-03-26 21:28:30

+0

GVim并不比CLI Vim好,是的,只需将你的东西放在Git仓库中,将它克隆到家用计算机上,工作,提交,然后在返回工作时进行提取。 – romainl 2013-03-26 21:35:54

回答

1

随着'autoread',Vim的只是要检查文件的修改时间。由于NETRW目标驻留在不同的系统上,该查询将是最昂贵的,你必须自己触发它。一个想法是对FocusGained事件进行检查,即当你回到你的(家用机器)Vim时。由于在Windows GVIM上,netrw访问会弹出一个控制台窗口(触发另一个FocusGained),为避免过于频繁的检查,我们将检查限制在一定的时间间隔内。最多每5分钟:

:autocmd FocusGained ftp://*,scp://* nested 
\ if ! &modified && ! exists('b:lastchecktime') || localtime() - b:lastchecktime > 300 | 
\  edit! | 
\  let b:lastchecktime = localtime() | 
\ endif 
+0

这是一个聪明的解决方案,我喜欢它。但是,我认为我更愿意'编辑'而不是编辑!' - 如果我已经进行了本地编辑和远程编辑,而不是仅仅擦除本地编辑,我宁愿接收警告。 – keflavich 2013-03-27 14:47:14

+1

未执行的本地更改不会被覆盖;这就是'! &modified'是为了。用':edit',你会在这种情况下收到警告;我的解决方案保持沉默 – 2013-03-27 15:11:12

1

你尝试:checktime

 Check if any buffers were changed outside of Vim. 
     This checks and warns you if you would end up with two 
     versions of a file. 
     [...] 
     Each loaded buffer is checked for its associated file 
     being changed. If the file was changed Vim will take 
     action. If there are no changes in the buffer and 
     'autoread' is set, the buffer is reloaded. Otherwise, 
     you are offered the choice of reloading the file.