稍微簡單一點的方法

稍微簡單一點的方法

有時 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

從描述來看:

  1. 文件是否已在其他視窗的另一個 Vim 會話中開啟?
  2. 如果是這樣,請切換到我們正在編輯該文件的視窗。
  3. 否則,如果交換文件比文件本身舊,則將其刪除。
  4. 否則,以唯讀方式開啟文件,以便我們可以查看並保存它。

相關內容