Usr_11

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


VIM ユーザーマニュアル - Bram Moolenaar 著
クラッシュからの復旧
コンピュータがクラッシュしましたか? そして、何時間もかけて編集したばかりですか? パニックにならないでください! Vim は、作業のほとんどを復元できるだけの情報を保存しています。この章では、作業を復元する方法と、スワップファイルがどのように使用されるかを説明します。
11.1 基本的な復旧 11.2 スワップファイルの場所 11.3 クラッシュしたか? 11.4 関連資料
次の章:usr_12.txt 賢いトリック 前の章:usr_10.txt 大きな変更を加える 目次:usr_toc.txt

基本的な復旧

ほとんどの場合、編集していたファイルが分かっていれば(そしてハードディスクがまだ動作している場合)、ファイルの復旧は非常に簡単です。ファイルで Vim を起動し、"-r" 引数を追加します。
vim -r help.txt
Vim は、編集していたテキストを保存するために使用されるスワップファイルを読み取り、元のファイルの一部を読み取る場合があります。Vim が変更を復元した場合、これらのメッセージが表示されます(もちろん、ファイル名は異なります)。
スワップファイル ".help.txt.swp" を使用しています
元のファイル "~/vim/runtime/doc/help.txt"
復旧が完了しました。すべてが正常かどうか確認する必要があります。
(このファイルを別の名前で書き出し、
変更を確認するために元のファイルとの差分を実行することをお勧めします。)
ここで .swp ファイルを削除することをお勧めします。
安全のために、このファイルを別の名前で書き出してください。
:write help.txt.recovered
期待どおりの結果になったかどうかを確認するために、ファイルを元のファイルと比較してください。差分モードはこの場合に非常に役立ちます 08.7。例えば
:write help.txt.recovered
:edit #
:diffsp help.txt
元のファイルに、より新しいバージョンが含まれている可能性があることに注意してください(コンピュータがクラッシュする直前にファイルを保存した場合)。また、行が欠落していないことを確認してください(Vim が復元できなかった問題が発生した場合)。Vim が復旧時に警告メッセージを生成した場合は、注意深く読んでください。ただし、これはまれです。
復旧の結果、テキストがファイルの内容とまったく同じになった場合は、このメッセージが表示されます。
スワップファイル ".help.txt.swp" を使用しています
元のファイル "~/vim/runtime/doc/help.txt"
復旧が完了しました。バッファの内容はファイルの内容と同じです。
ここで .swp ファイルを削除することをお勧めします。
これは通常、変更を既に復旧した場合や、変更後にファイルを書き出した場合に発生します。今、スワップファイルを削除しても安全です。
最後の数回の変更が復旧できないのは正常です。Vim は、約4秒間入力しない場合、または約200文字入力した場合に変更をディスクにフラッシュします。これは、'updatetime' オプションと 'updatecount' オプションで設定されます。したがって、システムがダウンしたときに Vim が自身を保存する機会を得られなかった場合、最後のフラッシュ後の変更は失われます。
ファイル名なしで編集していた場合は、引数として空の文字列を指定します。
vim -r ""
正しいディレクトリにいる必要があります。そうしないと、Vim はスワップファイルを見つけることができません。

11.2 スワップファイルの場所

Vim は、スワップファイルをいくつかの場所に保存できます。それを見つけるには、ファイルのディレクトリに変更し、以下を使用します。
vim -r
Vim は、見つけることができるスワップファイルをリスト表示します。また、現在のディレクトリ内のファイルの スワップファイルが存在する可能性のある他のディレクトリも検索します。ただし、他のディレクトリ内のスワップファイルは検索しません。ディレクトリツリーは検索しません。出力は次のようになる可能性があります。
スワップファイルが見つかりました
現在のディレクトリ
1. .main.c.swp
所有者: mool 日付: 2001年5月29日火曜日 21:00:25
ファイル名: ~mool/vim/vim6/src/main.c
変更済み: はい
ユーザー名: mool ホスト名: masaka.moolenaar.net
プロセス ID: 12525
ディレクトリ ~/tmp
-- なし --
ディレクトリ /var/tmp
-- なし --
ディレクトリ /tmp
-- なし --
使用したいスワップファイルのように見えるスワップファイルが複数ある場合は、これらのスワップファイルのリストが表示され、使用したいスワップファイルの番号を入力するように求められます。日付を注意深く確認して、使用するものを決定してください。どれを使用すればよいかわからない場合は、それらを1つずつ試して、結果として得られるファイルが期待どおりかどうかを確認してください。
特定のスワップファイルの使用
使用する必要があるスワップファイルがわかっている場合は、スワップファイル名を指定して復旧できます。Vim は、スワップファイルから元のファイルの名前を調べます。
vim -r .help.txt.swo
これは、スワップファイルが予期しない別のディレクトリにある場合にも便利です。Vim は、パターン.s[uvw][a-z]を持つファイルをスワップファイルとして認識します。
それでもうまくいかない場合は、Vim が報告するファイル名を確認し、それに応じてファイル名を変更します。'directory' オプションを確認して、Vim がスワップファイルをどこに配置した可能性があるかを確認します。
注: Vim は、'dir' オプションのディレクトリを検索して、"filename.sw?" に一致するファイルを探すことによってスワップファイルを見つけようとします。ワイルドカード展開が機能しない場合 (例えば、'shell' オプションが無効な場合)、Vim はファイル "filename.swp" を見つけようと必死に試みます。それでも失敗した場合は、ファイルを復元できるようにするために、スワップファイル自体の名前を指定する必要があります。

11.3 クラッシュしたか? 注意 E325

Vim は、あなたが愚かなことをするのを防ごうとします。ファイルを編集し始めると、ファイルの内容が表示されると期待するとします。代わりに、Vim は非常に長いメッセージを生成します。
E325: 注意
スワップファイル ".main.c.swp" が見つかりました
所有者: mool 日付: 2001年5月29日火曜日 21:09:28
ファイル名: ~mool/vim/vim6/src/main.c
変更済み: いいえ
ユーザー名: mool ホスト名: masaka.moolenaar.net
プロセス ID: 12559 (まだ実行中)
ファイル "main.c" を開く際
日付: 2001年5月29日火曜日 19:46:12
~
(1) 別のプログラムが同じファイルを編集している可能性があります。
この場合、変更を行う際に同じファイルの
異なるインスタンスが2つできないように注意してください。
終了するか、注意して続行してください。
~
(2) このファイルの編集セッションがクラッシュしました。
この場合、":recover" または "vim -r main.c" を使用してください
変更を復旧するには (":help recovery" を参照)。
これを既に実行した場合は、このメッセージを避けるために
スワップファイル ".main.c.swp" を削除してください。
このメッセージが表示される理由は、ファイルを編集し始めるときに、Vim がそのファイルのスワップファイルが既に存在するかどうかを確認するためです。存在する場合、何か問題があるはずです。次の2つの状況のいずれかである可能性があります。
1. 別の編集セッションがこのファイルでアクティブになっています。メッセージ内の "プロセス ID" を含む行を確認してください。次のようになる可能性があります。
プロセス ID: 12559 (まだ実行中)
テキスト "(まだ実行中)" は、このファイルを編集しているプロセスが同じコンピュータで実行されていることを示しています。非 Unix システムで作業している場合は、この追加のヒントは得られません。ネットワーク経由でファイルを編集している場合は、プロセスが別のコンピュータで実行されている可能性があるため、ヒントが表示されない場合があります。これらの2つの場合は、自分で状況を調べる必要があります。同じファイルを編集している別の Vim がある場合、編集を続行すると、同じファイルが2つのバージョンになります。最後に書き込まれた方が、もう一方を上書きし、変更が失われることになります。この Vim を終了することをお勧めします。
2. スワップファイルは、以前の Vim またはコンピュータのクラッシュの結果である可能性があります。メッセージに記載されている日付を確認してください。スワップファイルの日付が編集していたファイルよりも新しい場合、この行が表示されます
変更済み: はい
その場合、復旧する価値のあるクラッシュした編集セッションである可能性が非常に高いです。ファイルの日付がスワップファイルの日付よりも新しい場合、クラッシュ後に変更されたか(おそらく以前に復旧したが、スワップファイルを削除しなかった?)、またはファイルがクラッシュ前、ただしスワップファイルの最後の書き込み後に保存されたかのいずれかです(その場合、あなたは幸運です。古いスワップファイルさえ必要ありません)。Vim は、この追加の行でこれを警告します。
スワップファイルより新しい!
次の状況では、Vim はスワップファイルが役に立たないことを認識し、自動的に削除することに注意してください。
ファイルは有効なスワップファイルです(マジックナンバーは正しい)。
ファイルが変更されたというフラグは設定されていません。
プロセスは実行されていません。
FileChangedShell 自動コマンドイベントを使用して、この状況をプログラムで処理できます。
読み取り不能なスワップファイル
場合によっては、行
[読み取れません]
がスワップファイルの名前の下に表示されます。これは、状況によって良い場合もあれば、悪い場合もあります。
以前の編集セッションがファイルに変更を加えることなくクラッシュした場合、これは良いことです。次に、スワップファイルのディレクトリリストを表示すると、ゼロバイトであることがわかります。削除して続行できます。
スワップファイルに対する読み取り権限がない場合は、少し悪いことです。ファイルを読み取り専用で表示するか、終了することができます。マルチユーザーシステムでは、別のログイン名で最後の変更を行った場合は、ログアウトしてから別の名前でログインすると、「読み取りエラー」が解消される可能性があります。または、最後にファイルを編集した(または編集している)ユーザーを見つけて、そのユーザーと話をする必要があります。
スワップファイルを含むディスクに物理的な読み取りエラーがある場合、非常に悪いことです。幸いなことに、これはほとんど起こりません。最初は(可能であれば)ファイルを読み取り専用で表示して、「忘れられた」変更の程度を確認することをお勧めします。あなたがそのファイルの責任者である場合は、最後の変更をやり直す準備をしてください。
何をすべきか? swap-exists-choices
ダイアログがサポートされている場合は、6つの選択肢の中から1つを選択するように求められます。
スワップファイル ".main.c.swp" は既に存在します!
[O]読み取り専用で開く、(E)とにかく編集する、(R)復旧する、(Q)終了する、(A)中止する、(D)削除する
O ファイルを読み取り専用で開きます。ファイルの閲覧のみを目的とし、復旧の必要がない場合に使用します。他のユーザーがファイルを編集しているが、内容を確認したいだけで変更を加えたくない場合に役立ちます。
E とにかくファイルを編集します。注意して使用してください!別の Vim でファイルが編集されている場合、ファイルのバージョンが2つになる可能性があります。Vim はこの状況が発生すると警告を試みますが、用心するに越したことはありません。
R スワップファイルからファイルを復旧します。スワップファイルに復旧したい変更が含まれていることがわかっている場合に使用します。
Q 終了します。ファイルの編集を開始することを避けます。同じファイルを編集している別の Vim がある場合に使用します。Vim を起動した直後の場合、これで Vim が終了します。複数のウィンドウでファイルを指定して Vim を起動した場合、最初のファイルのスワップファイルが存在する場合のみ、Vim は終了します。編集コマンドを使用している場合、ファイルはロードされず、以前に編集していたファイルに戻ります。
A 中止します。終了と同様ですが、以降のコマンドも中止します。複数のウィンドウを持つセッションなど、複数のファイルを編集するスクリプトをロードする場合に役立ちます。
D スワップファイルを削除します。不要になったことが確実な場合に使用します。たとえば、変更が含まれていない場合や、ファイル自体がスワップファイルよりも新しい場合などです。Unix では、スワップファイルを作成したプロセスが実行されていない場合にのみ、この選択肢が提示されます。
ダイアログが表示されない場合(Vim のバージョンが対応していない場合)、手動で操作する必要があります。ファイルを復旧するには、このコマンドを使用します
:recover
Vim は、ファイルに対して既にスワップファイルが存在することを常に検出できるわけではありません。他の編集セッションがスワップファイルを別のディレクトリに保存した場合や、異なるマシンで編集している場合にファイルへのパス名が異なる場合などが該当します。したがって、Vim が常に警告してくれると期待しないでください。
このメッセージを本当に表示させたくない場合は、'shortmess' オプションに 'A' フラグを追加できます。しかし、これが必要になることは非常に稀です。
スワップファイルへのプログラムからのアクセスについては、swapinfo() を参照してください。

11.4 参考文献

swap-file スワップファイルがどこに作成され、その名前が何であるかについての説明。:preserve スワップファイルをディスクに手動で書き込みます。:swapname 現在のファイルのスワップファイル名を表示します。'updatecount' スワップファイルがディスクに書き込まれるまでのキーストローク数。'updatetime' スワップファイルがディスクに書き込まれるまでのタイムアウト。'directory' スワップファイルを保存するディレクトリ名のリスト。
次の章:usr_12.txt 便利なテクニック
著作権: manual-copyright を参照してください vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンドインデックス
クイックリファレンス