2014-01-27 61 views
7

就在提交重大更改之前,我無意中在vim中從舊的和過時的交換文件中「恢復」了該文件。我的改變似乎沒有了。我試圖探索撤消樹,但仍然缺少大塊的變化。無論如何,我可以撤銷恢復行動,還是註定了?從vim中的交換文件中撤消恢復

+0

當您嘗試打開文件時會發生什麼?它是否說有交換文件? –

+0

在我的系統上,我只是得到一個更多的代字號〜交換文件的每個交換文件.. open。你檢查了嗎?我的意思是應該有一個文件myfile.txt〜如果打開則會導致創建myfile.txt ~~ – matcheek

+0

是的,交換文件仍然存在;只有一個交換文件。 –

回答

1

我剛剛嘗試過這個(啓用持久性撤消; Vim版本7.3.823)。舊的變化仍呈現(在:undolist,但我通常使用像Gundo或Undotree對其進行可視化插件),但試圖恢復時,我得到

E438: u_undo: line numbers wrong 

好像Vim可以不處理這種情況。請注意,您已被警告;恢復顯式地警告說:

Recovery completed. You should check if everything is OK. 
E308: Warning: Original file may have been changed 
+0

我只是試圖用最新的Vim 7.4.140重現;那裏,我得到了'E310',舊的交換文件沒有被應用到更新的文件(這會阻止你的問題)。 –

+0

我使用Undotree並啓用了持久性撤銷,並且可以使用部分歷史記錄,但是像您一樣,我遇到了「行號錯誤」錯誤;應用歷史編輯會導致源文件有點亂碼。 –

+0

使用Undotree,您至少可以獲取變化之間的差異(顯示在底部窗口中),然後手動應用它們。不理想,但你可以期望的最好。 –

7

以下工作對我來說,恢復文件,並撤消歷史以及:

  1. 假設你有my_file,有一些持久撤消歷史+中未保存的更改。 my_file.swp
  2. 使用vim打開文件,然後按r獲取恢復版本
  3. 將恢復版本保存到臨時位置,例如:w/tmp /%
  4. 關閉時不保存(:q!)。再次打開文件,然後按d刪除交換文件
  5. 可選:compare/tmp/my_file和my_file以確保要恢復的版本
  6. 手動從/ tmp/my_file添加更改(例如ggdG和:r/tmp /%)

這可能很簡單,但這對我很有用。

PS:這不會爲您提供磁盤和恢復版本文件之間更改的撤消歷史記錄,該歷史記錄顯示爲歷史記錄中的一個大編輯。

+1

太棒了!爲我工作,謝謝。 – Olexandr

+2

比接受的答案更有用。只要你沒有將恢復的文件保存在原始文件中,那麼它絕對不會太晚! –

2

意外恢復文件後,您只需輸入:q!在不保存已恢復的更改的情況下退出vim - 這將使原始文件保持原樣並將交換文件保留在原來的位置。

你打開該文件的下一次,你會看到相同的提示 - 按d刪除交換文件,或中止和手動發現它(也可能刪除在同一位置的任何其他交換文件)