
當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
) 才能刪除檔案。如果您更有信心並希望加快該過程,則可以省略此操作。