Vim - 恢復後自動刪除SWP檔案不改變原始文件

Vim - 恢復後自動刪除SWP檔案不改變原始文件

當Vim進程突然終止時(例如係統崩潰),它會留下一個SWP檔案。稍後在 Vim 中開啟原始檔案會提供復原選項。大多數時候恢復的文件與保存的文件相同,因為我有經常保存的習慣。然後 Vim 說:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

好吧,我當然想現在刪除 .swp 檔案!

在這種情況下,如何讓 Vim 始終自動刪除 SWP 檔案?

似乎沒有內建設定可以執行此操作,因此我正在尋找合適的自動命令事件。

我發現的一種方法是:e #在訊息之後,這會導致交換存在選項再次出現,然後我可以「刪除它」。但我真的不必每次都執行這些額外的步驟。

答案1

注意:您還沒有說您正在使用哪個作業系統。以下適用於 Unix shell,但如果執行 Windows,您可以下載簡單的 Cygwin 或其他一些 shell。

我曾經和你做同樣的事情,運行:e重新打開相同的文件以獲得刪除恢復文件的選項。電腦崩潰或意外重啟後,我透過運行vim -r交換文件並讓恢復繼續進行來清理所有殘留的 Vim 恢復文件。

當文件有不是改變了

如果檔案沒有改變,我想立即刪除恢復檔案。如果 Vim 能夠自動執行此操作,那就太好了,但不幸的是,它不能。

當文件發生更改時

如果檔案已更改,我會執行DiffOrig命令來比較原始版本和復原版本之間的差異。如果我對恢復檔案的變更感到滿意,我可以透過使用命令儲存檔案來退出:x。如果沒有,我會透過退出來放棄恢復的變更:q!。如果復原檔案與已儲存的檔案沒有關聯,例如,.swp我通常會使用:w filename將復原的緩衝區儲存到具有檔案名稱的檔案中。

DiffOrig 助手

我添加了差異原始命令 my.vimrc以便它始終可用。

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

外殼腳本

我在 shell 中執行以下腳本來查找目前目錄樹中的每個交換檔案。然後使用每個交換文件開啟 Vim“恢復模式”然後在 Vim 關閉後被刪除。

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

rm -i選項需要確認 ( y) 才能刪除檔案。如果您更有信心並希望加快該過程,則可以省略此操作。

相關內容