2013-03-26 81 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.