vim autoread + netrw以防止意外覆盖

时间:2013-03-26 17:38:57

标签: vim netrw

使用:autoread访问vim中的远程文件时,是否有netrw的等效内容?

我通过netrw远程访问我的工作机器上的文件,然后当我到达工作时修改那里的文件。但是,如果我回到远程访问,如果文件已经在缓冲区中打开,很容易忘记重新加载文件 - 如果它已在工作机器上修改过,那么下一个:w将覆盖任何文件我在工作时所做的改变。我正在寻找一个“安全网”来降低数据丢失的风险(幸运的是,由于.swp文件,我还没有丢失,但这不是一个非常令人安心的网络。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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.