リカバリー

Nvim の :help ページは、生成されており、ソースから tree-sitter-vimdoc パーサーを使用しています。


クラッシュ後のリカバリー
あなたは数時間かけてテキストを入力し、明日の朝にそれを完成させようとしていたところ、突然の災難に見舞われました。コンピューターがクラッシュしたのです。
慌てないでください!
Vim がファイルのコンテンツを保存するために使用するファイルから、変更のほとんどを復元できます。ほとんどの場合、1 つのコマンドで作業を復元できます:vim -r ファイル名

1. スワップファイル swap-file

Vim は変更した内容をスワップファイルに保存します。元のファイルとスワップファイルを使用すれば、ほとんどの場合、作業を復元できます。
現在使用中のスワップファイルの名前は、次のコマンドで確認できます。
:sw[apname] :sw :swapname
または、swapname() 関数を使用することもできます。この関数は、他のバッファーのスワップファイル名を確認することもできます。
通常、スワップファイルの名前は編集しているファイルと同じで、拡張子は ".swp" です。
Unix では、編集されたファイルと同じディレクトリにあるスワップファイル名には '.' が先頭に付加されます。これにより、スワップファイルがディレクトリ一覧に表示されるのを防ぎます。
このファイルが既に存在する場合(例えば、クラッシュからリカバリーする場合)、警告が表示され、別の拡張子 ".swo", ".swn" などが使用されます。
既存のファイルが上書きされることはありません。
スワップファイルは、Vim がファイルの編集を終了するとすぐに削除されます。
E326
技術的な詳細: ".swp" ファイル名が既に存在する場合、その名前のファイルが存在しないか、".saa" に達するまで、最後の文字がデクリメントされます。最後の場合、スワップファイルは作成されません。
'directory' オプションを設定すると、編集したファイルとは別の場所にスワップファイルを置くことができます。利点:
ディレクトリが ".swp" ファイルで汚染されるのを防ぐことができます。
'directory' が別のパーティションにある場合、(クラッシュ時など)ファイルがあるファイルシステムの損傷リスクを軽減できます。欠点:
同じ名前のファイルが異なるディレクトリにある場合、名前の衝突が発生する可能性があります(ただし、Vim はパス名を比較してそれを回避しようとします)。これにより、誤った ATTENTION 警告メッセージが表示されます。
ホームディレクトリを使用している場合、他の誰かが同じファイルを編集しようとすると、そのユーザーはあなたのスワップファイルを見ることができず、ATTENTION 警告メッセージを受け取ることもありません。
スワップファイルを固定の場所に置きたい場合は、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 ハンドラー(default-autocmds)は、スワップファイルの所有者プロセスがまだ実行中で、現在のユーザーによって所有されている場合、E325 プロンプトをスキップします(そして自動的に "(E)dit" を選択します)。これは、通常、複数の Nvim インスタンスから同じファイルを編集しただけで ATTENTION メッセージに煩わされたくないと想定しているためです。最悪の場合(システムクラッシュ)、ファイルに対して複数のスワップファイルが存在します。それらのスワップファイルをすべて検査するには、:recover を使用してください。
スワップファイルの更新
スワップファイルは、200 文字入力した後、または 4 秒間何も入力しなかった場合に更新されます。これは、バッファーが変更された場合にのみ発生し、移動だけでは発生しません。常に最新の状態に保たれていない理由は、通常の作業が非常に遅くなるためです。200 文字のカウントは 'updatecount' オプションで変更できます。時間は 'updatetime' オプションで設定できます。時間はミリ秒単位で指定します。スワップファイルへの書き込み後、Vim はファイルをディスクに同期します。
スワップファイルへの書き込みが不要な場合は、'updatecount' オプションを 0 に設定することでオフにできます。これは、"-n" オプションを指定して Vim を起動した場合も同様です。書き込みは、'updatecount' オプションを 0 以外の値に設定することで再びオンにできます。この場合、すべてのバッファーに対してスワップファイルが作成されます。ただし、'updatecount' を 0 に設定した場合、既存のスワップファイルは削除されず、これはこれ以降に開かれるファイルにのみ影響します。
変更がスワップファイルに確実に保存されていることを確認したい場合は、次のコマンドを使用してください。
:pre :preserve E313 E314 :pre[serve] 現在のバッファーのすべてのテキストをスワップファイルに書き込みます。リカバリーのために元のファイルはもはや必要ありません。
Vim のスワップファイルは、最初の 6 文字:"b0VIM " で識別できます。その後、バージョン番号(例:"3.0")が続きます。
リンクとシンボリックリンク
Unix では、同じファイルに対して 2 つの名前を持つことが可能です。これはハードリンクとシンボリックリンク(シンリンク)で行うことができます。
ハードリンクの場合、Vim はファイルの他の名前を知りません。したがって、スワップファイルの名前は、ファイルを編集するために使用した名前に基づいて設定されます。Vim は他のスワップファイルを見つけることができないため(ハードディスク全体を検索することを除けば、これは非常に遅くなります)、別の名前で同じファイルを編集することに対するチェックはありません。
シンボリックリンクの場合、Vim はリンクを解決して実際のファイルの名前を見つけます。スワップファイル名は、その名前に基づいて設定されます。したがって、ファイル編集に使用する名前に関係なく、スワップファイル名は通常同じになります。ただし、例外があります。
実際のファイルのディレクトリが書き込み可能でない場合、スワップファイルは別の場所に置かれます。
シンボリックリンクが何らかの形でループを作成すると、E773 エラーメッセージが表示され、変更されていないファイル名が使用されます。通常どおりファイルを保存することはできません。

2. リカバリー recovery E308 E311

基本的なファイルリカバリーについては、ユーザーマニュアルで説明されています:usr_11.txt
リカバリーを行う別の方法は、Vim を起動して ":recover" コマンドを使用することです。これは、Vim を起動してファイルを編集し、「ATTENTION: Found a swap file ...」というメッセージが表示された場合に簡単です。この場合、単一のコマンド ":recover" で作業が完了します。また、ファイル名またはスワップファイル名を recover コマンドに指定することもできます::rec :recover E305 E306 E307 :rec[over] [ファイル] スワップファイルから [ファイル] のリカバリーを試みます。[ファイル] が指定されていない場合は、現在のバッファーのファイル名を使用します。バッファーの現在の内容は失われます。バッファーが変更されている場合、このコマンドは失敗します。
:rec[over]! [ファイル] ":recover" と同様ですが、現在のバッファーの変更は失われます。
E312 E309 E310 E1364 Vim は、スワップファイルが何らかの形で破損している場合に行うべきことに関する一定のインテリジェンスを備えています。Vim が見つけたものについて疑問を持っている場合は、エラーメッセージを表示し、テキストに "???" を含む行を挿入します。リカバリー中にエラーメッセージが表示された場合は、ファイル内で "???" を検索して、何が問題なのかを確認してください。必要なテキストを取得するために、切り取りと貼り付けが必要になる場合があります。
最も一般的な注意書きは "???LINES MISSING" です。これは、Vim が元のファイルからテキストを読み取ることができないことを意味します。これは、システムがクラッシュし、元のファイルの一部がディスクに書き込まれなかった場合に発生する可能性があります。
元のファイルを上書きしたり、スワップファイルを削除する前に、リカバリーが成功したことを確認してください。リカバリーされたファイルを別の場所に書き込み、'diff' を実行して、必要な変更がリカバリーされたファイルにあるかどうかを確認することをお勧めします。または、:DiffOrig を使用してください。
リカバリーが問題ないことを確認したら、スワップファイルを削除してください。そうしないと、".swp" ファイルが既に存在するという警告メッセージが引き続き表示されます。
メイン
コマンド索引
クイックリファレンス