2011-07-14 247 views
9

Vim的文件備份系統剛剛保存了我的諺語@ $$,但我有一個問題。恢復Vim備份

我有VIM節省備份~/.vim/backups

要恢復他們,我去了目錄(按日期排序)複製,我需要回到必要的目錄在我的項目文件夾中的文件。很簡單,只有5個文件。然而,我很驚訝沒有明顯的方法來找到每個文件來自哪個目錄。我嘗試使用vim -r path/to/file,但似乎使用交換而不是備份文件。因爲在我的情況下vim沒有崩潰(我只是錯誤地覆蓋了這些文件),這些文件沒有交換。

所以主要問題是:什麼是恢復vim 備份文件的最佳方法?

方問題:在vim的/備份/目錄下會發生什麼事時,我有不同的路徑(例如/path/one/file.html/path/two/file.html)兩個相同名字的文件?

+0

其實,它看起來像邊問題已經回來咬我。其中一個備份覆蓋另一個,並且我沒有任何/path/two/file.html ...嘆息的記錄。 – Tron

+0

你可以通過閱讀〜/ .viminfo文件來查看某些編輯歷史記錄。 – taro

回答

2

從我所知道的來看,Vim並沒有保存關於文件原始位置的所有信息。

保存兩個同名文件的備份可能會覆蓋現有備份或使用其他名稱,具體取決於.vimrc中設置的內容。 「備份」選項將覆蓋現有備份文件,但'writebackup'將重新命名新備份以避免覆蓋。

退房Vim的文檔獲取更多信息 - :幫助備份

7

回答有關恢復的問題,Vim不知道有關備份的東西。它的備份系統非常簡單 - 寫一個文件。要恢復,你必須手動完成。

但是,您可以向備份添加更多信息,以便於恢復。

理想情況下,backupdir將支付//以強制它擴展文件的路徑並用%替換/。例如/tmp/foo.rb將成爲備份文件`tmp%foo.rb'。

請參閱undo*.swp目錄設置裏面做採取//:help undodir:help directory

但我們可以僞造這個!

" Prevent backups from overwriting each other. The naming is weird, 
" since I'm using the 'backupext' variable to append the path. 
" So the file '/home/docwhat/.vimrc' becomes '.vimrc%home%docwhat~' 
au BufWritePre * let &backupext ='@'.substitute(substitute(substitute(expand('%:p:h'), '/', '%', 'g'), '\', '%', 'g'), ':', '', 'g').'~' 

備份文件讀取文件名然後目錄,但它確實工作,應該是足夠的唯一。

舉例:.vimrc%home%docwhat~是爲/home/docwhat/.vimrc

如果你想一分備份分鐘備份,所以你失去工作少,您可以附加一個時間戳的文件名:

au BufWritePre * let &backupext = substitute(expand('%:p:h'), '/', '%', 'g') . '%' . strftime('%FT%T') . '~' 

但我d建議你設置一個cron作業來定期清理這個目錄。如果你編輯了很多我的文件,這個文件會很快變大。

或者,你可以做一些巧妙的事情,在寫作之前(用BufWritePre鉤子)改變backupdir,但是vim的聰明程度超出了我的眼界。

Ciao!