有時 Vim 會崩潰並留下一個交換檔案。棒極了。然後我打開正在編輯的文件,Vim 詢問我是否要恢復。我願意,謝謝。完成後,Vim 告訴我,
You may want to delete the .swp file now.
為什麼,是的,我願意。我怎麼做?我認為它會再次開始使用舊的交換文件作為交換文件,並在我退出時清理它,但事實並非如此。它會建立一個新文件,清理該文件,當我再次打開該文件時,它會再次提示我從第一個文件中恢復。
我肯定錯過了什麼。
答案1
稍微簡單一點的方法
從終端模擬器:
$ vim filename
然後在vim裡面選擇恢復,如果你想刪除交換你寫(儲存)然後呼叫此命令:
:e // no argument needed. It assumes the current buffer.
....然後選擇刪除這次。
這種方法的一個好處是,如果恢復結果損壞,它不會自動覆蓋工作文件(儘管我承認以前從未發生過這種情況)。
還有相關提示關於這個問題在 Stack Overflow 上(我在那裡找到了這個技巧)。
答案2
清除目錄中的所有 vim 交換檔案:
如果您確定目錄樹中不需要任何 vim 交換檔案並希望刪除它們,則可以在 vim 執行時在目錄中使用以下命令不是運行(甚至不在另一個視窗甚至不同的登入工作階段):
find . -type f -name "*.sw[klmnop]" -delete
一些靈感和想法來自於刪除垃圾 .swp 文件
在 Google 網上論壇。這將刪除 目前目錄樹中名稱以.swk
、.swl
、.swm
、.swn
、 、.swo
或結尾的所有檔案。.swp
這可能不是您想要的,原因如下:
- 如上所述,它會搜尋當前目錄樹 ;即目前目錄和所有子目錄,遞歸。這超出了問題的要求,並且可能被認為是矯枉過正。
如前所述,它將刪除名稱以
.swk
、.swl
、.swm
、.swn
、.swo
、 或結尾的所有文件.swp
,而不僅僅是.swp
。 加里·約翰遜 說,此外,並非所有交換文件都以 .swp 結尾。如果 Vim 需要建立一個交換文件,並且以 .swp 結尾的交換文件已經存在,Vim 將為新文件使用副檔名 .swo,然後使用副檔名 .swn。我認為它只是沿著字母表向後繼續。所以使用類似的東西
原作者為這貼文說,\*.sw[nop]
甚至
\*.sw?
會更徹底。
「klmnop」可能有點矯枉過正,但這通常可以確保我得到所有這些。
-
find . -type f \( -name ".*.s[a-v][a-z]" -o -name ".*.sw[a-p]" \) -delete
.saa
它匹配從到 的所有(小寫)三字母擴展名.swp
。他補充道,「不過要小心,雖然這是一個更完整的解決方案,但它會刪除所有 .svg 圖像檔案和 .swf adobe flash 檔案。如果您使用這些文件,您可能需要修改正規表示式。它還匹配.sav
,.snd
(聲音數據)、.sql
、.src
、.srt
(SubRip 視訊字幕格式)和許多其他常見擴展名。 這可能有點矯枉過正。如上所述,它將刪除名稱以
.swk
、.swl
、.swm
、.swn
、.swo
或結尾的所有檔案.swp
。但是,顯然,vim 交換文件通常是「點」文件。如果您進行編輯hello.cpp
,交換文件可能是.hello.cpp.swp
.如圖所示(但未解釋)盧布的回答,僅刪除名稱以點開頭的檔案更安全;例如,與find . -type f -name ".*.sw[klmnop]" -delete
答案3
ls -a
列出目錄中所有檔案的類型
類型rm .whatever.your.swp
是並按enter
就這麼簡單。
任何前面顯示 的文件.
都是隱藏文件,通常不可見。
請記住,變化是立即且永久的,所以要小心。
答案4
順便提一句。有些插件會自動為您執行此操作:自動交換.vim
從描述來看:
- 文件是否已在其他視窗的另一個 Vim 會話中開啟?
- 如果是這樣,請切換到我們正在編輯該文件的視窗。
- 否則,如果交換文件比文件本身舊,則將其刪除。
- 否則,以唯讀方式開啟文件,以便我們可以查看並保存它。