還原

Nvim :help 頁面,使用 tree-sitter-vimdoc 解析器,從 原始碼 產生 而來。


當機後的復原
您花費了數小時輸入文字,必須在隔天早上完成,然後災難發生了:您的電腦當機了。
別慌張!
您可以從 Vim 用來儲存檔案內容的檔案中,還原大部分的變更。通常您可以使用一個指令來還原您的工作:vim -r filename

1. 交換檔案 swap-file

Vim 會將您所做的變更儲存在交換檔案中。使用您開始編輯的原始檔案加上交換檔案,您通常可以還原您的工作。
您可以使用以下指令查看目前正在使用的交換檔案名稱
:sw[apname] :sw :swapname
或者您可以使用 swapname() 函式,該函式也允許查看其他緩衝區的交換檔案名稱。
交換檔案的名稱通常與您正在編輯的檔案相同,副檔名為 ".swp"。
在 Unix 上,會在與編輯的檔案相同的目錄中的交換檔案名稱前加上 '.'。這樣可以避免交換檔案出現在目錄清單中。
如果此檔案已存在(例如,當您從當機中復原時),則會發出警告,並使用另一個副檔名,如 ".swo"、".swn" 等。
現有的檔案永遠不會被覆蓋。
當 Vim 停止編輯檔案時,交換檔案會立即被刪除。
E326
技術細節:如果 ".swp" 檔案名稱已存在,則會遞減最後一個字元,直到沒有該名稱的檔案或達到 ".saa" 為止。在最後一種情況下,不會建立交換檔案。
透過設定 'directory' 選項,您可以將交換檔案放置在與編輯的檔案不同的位置。優點
您不會用 ".swp" 檔案污染目錄。
'directory' 在另一個分割區時,可以降低(當機時)損壞檔案所在檔案系統的風險。缺點
對於名稱相同但位於不同目錄的檔案,可能會發生名稱衝突(儘管 Vim 會嘗試透過比較路徑名稱來避免這種情況)。這將導致錯誤的「注意」警告訊息。
當您使用您的家目錄,而其他人嘗試編輯同一個檔案時,該使用者將看不到您的交換檔案,也不會收到「注意」警告訊息。
如果您想將交換檔案放置在固定位置,請在您的 vimrc 中加入類似以下的指令::set dir=~/tmp(適用於 Unix):set dir=c:\\tmp(適用於 Win32)當編輯軟碟上的檔案時,這也非常方便。當然,您必須建立該 "tmp" 目錄才能使此功能正常運作!
對於唯讀檔案,不會立即使用交換檔案。僅在進行變更時才會建立交換檔案。
可以重置 'swapfile' 選項以避免建立交換檔案。並且可以使用 :noswapfile 修飾符,來避免為新緩衝區建立交換檔案。
:nos[wapfile] {command} :nos :noswapfile 執行 {command}。如果它包含載入新緩衝區的指令,則將在不建立交換檔案的情況下載入,並且 'swapfile' 選項將被重置。如果緩衝區已經有交換檔案,則不會被移除,並且不會重置 'swapfile'
偵測現有的交換檔案
您可以在使用者手冊的 11.3 節中找到此資訊。
W325
預設的 SwapExists 處理常式(預設自動指令)會跳過 E325 提示(如果交換檔案擁有者進程仍在執行且屬於目前使用者,則會自動選擇 "(E)dit")。這假設您通常不希望僅因為您碰巧從多個 Nvim 實例編輯同一個檔案而受到 注意 訊息的干擾。在最糟糕的情況下(系統當機),該檔案將有多個交換檔案;使用 :recover 來檢查其所有交換檔案。
更新交換檔案
在輸入 200 個字元後或當您四秒鐘沒有輸入任何內容時,將更新交換檔案。這僅在緩衝區被變更時發生,而不是僅當您移動時發生。它並非總是保持最新狀態的原因是,這樣會使正常工作速度變慢。您可以使用 'updatecount' 選項變更 200 個字元的計數。您可以使用 'updatetime' 選項設定時間。時間以毫秒為單位。在寫入交換檔案後,Vim 會將檔案同步到磁碟。
如果不需要寫入交換檔案,可以將 'updatecount' 選項設定為 0 來關閉。當使用 "-n" 選項啟動 Vim 時也會執行相同的操作。可以透過將 'updatecount' 選項設定為非零來重新開啟寫入。執行此操作時,將會為所有緩衝區建立交換檔案。但是,當將 'updatecount' 設定為零時,現有的交換檔案不會被移除,它只會影響在此之後開啟的檔案。
如果您想確保您的變更已儲存在交換檔案中,請使用此指令
:pre :preserve E313 E314 :pre[serve] 將目前緩衝區的所有文字寫入其交換檔案。不再需要原始檔案進行復原。
Vim 交換檔案可以透過前六個字元來識別:"b0VIM "。之後是版本號碼,例如 "3.0"。
連結和符號連結
在 Unix 上,一個檔案可以有兩個名稱。這可以使用硬連結和符號連結(符號連結)來完成。
對於硬連結,Vim 不知道檔案的另一個名稱。因此,交換檔案的名稱將基於您用來編輯檔案的名稱。不會檢查是否也使用另一個名稱來編輯同一個檔案,因為 Vim 無法找到另一個交換檔案(除非搜尋您的所有硬碟,這會非常慢)。
對於符號連結,Vim 會解析連結以找到實際檔案的名稱。交換檔案名稱基於該名稱。因此,無論您使用哪個名稱編輯檔案,交換檔案名稱通常都會相同。但是,也有例外情況
當實際檔案的目錄不可寫時,交換檔案會放置在其他地方。
當符號連結以某種方式建立迴圈時,您會收到 E773 錯誤訊息,並且將使用未修改的檔案名稱。您將無法正常儲存檔案。

2. 復原 recovery E308 E311

基本檔案復原在使用者手冊中說明:usr_11.txt
復原的另一種方法是啟動 Vim 並使用 ":recover" 指令。當您啟動 Vim 以編輯檔案並收到「注意:找到交換檔案...」訊息時,此方法很容易。在這種情況下,單一指令 ":recover" 即可完成工作。您也可以將檔案名稱或交換檔案名稱提供給 recover 指令: :rec :recover E305 E306 E307 :rec[over] [file] 嘗試從交換檔案復原 [file]。如果未指定 [file],則使用目前緩衝區的檔案名稱。緩衝區的目前內容會遺失。如果緩衝區已修改,則此指令會失敗。
:rec[over]! [file] 與 ":recover" 類似,但會遺失目前緩衝區中的所有變更。
E312 E309 E310 E1364 如果交換檔案在某種程度上損壞,Vim 具有一些關於如何處理的智慧。如果 Vim 對其發現的內容有疑問,則會發出錯誤訊息並在文字中插入包含 "???" 的行。如果您在復原時看到錯誤訊息,請在檔案中搜尋 "???" 以查看出了什麼問題。您可能需要剪下並貼上以取得您需要的文字。
最常見的備註是 "???LINES MISSING"。這表示 Vim 無法從原始檔案讀取文字。如果系統當機,並且原始檔案的部分內容未寫入磁碟,則可能會發生這種情況。
請務必在覆寫原始檔案或刪除交換檔案之前,確認復原已成功。最好將復原的檔案寫入其他地方,並執行 'diff' 以找出您想要的變更是否在復原的檔案中。或者使用 :DiffOrig
一旦您確定復原沒有問題,請刪除交換檔案。否則,您將繼續收到 ".swp" 檔案已存在的警告訊息。
主要
指令索引
快速參考