*recover.txt* For Vim バージョン 8.1. Last change: 2019 May 07 VIMリファレンスマニュアル by Bram Moolenaar
クラッシュ後のリカバリー
あなたが明日の朝までに終はらせなければならない文書のタイピングに數時閒を費やしてゐたとき、悲劇があなたを襲ふ。コンピュータがクラッシュした。
慌てないで!
あなたは Vim がファイルの內容を蓄へていたファイルから、ほとんどの變更を恢復できる。たいていの場合、あなたの仕事は 1 コマンドで恢復できる。
vim -r filename
1. スワップファイル | |swap-file| |
2. リカバリー | |recovery| |
Vim は變更した箇所をスワップファイルに蓄へる。編輯を開始したオリジナルのファイルとスワップファイルから、あなたのした作業は恢復することができる。
現在使用してゐるスワップファイルの名前は、次のコマンドで確認できる:
:sw[apname]
もしくは、他のバッファのスワップファイル名を見ることもできる |swapname()| 函數を使ふことができる。
スワップファイルの名前は、普通は編輯中のファイルと同じで、擴張子が ".swp" のものになる。
技術情報:
’.’ から ’_’ への置換は MS-DOS 互換のファイルシステム (例、crossdos, multidos) での問題を避けるためである。もし Vim が MS-DOS ライクなファイルシステムを探知すると、’shortname’ オプションと同じ效果を持つフラグが設定される。このフラグは違ふファイルの編輯を始めたときにリセットされる。もし ".swp" ファイルがすでに存在すると、同名のファイルが存在しなくなるか、".saa" となるまで最後の文字をひとつ前の文字に戾す。".saa" まで存在するときは、スワップファイルは作られない。
’directory’ オプションを設定することによつて、スワップファイルを、編輯してゐるファイルとは別の場所に置くこともできる。
Amiga では、恢復可能な ram ディスクを使へるが、それが 100% 働くといふ保證はない。スワップファイルを通常の ram ディスク (Amiga では RAM: など) に置いたり、リブートによつて消されてしまふ場所 (Unix の /tmp など) に置くことは無意味であり、クラッシュによつてスワップファイルは失はれてしまふ。
スワップファイルを固定ディスクに置きたいときは、あなたの .vimrc ファイルに次に示す樣なコマンドを入れる:
:set dir=dh2:tmp (Amiga の場合) :set dir=~/tmp (Unix の場合) :set dir=c:\\tmp (MS-DOS and Win32 の場合)
これらの設定はフロッピー上で編輯作業をしてゐるときには負擔となる。もちろん、この樣な設定で作業をするならば、"tmp" ディレクトリを作らねばならない。
讀取專用屬性のファイルに對しては、スワップファイルは使用されない。ファイルが大きくなければ、’maxmem’ や ’maxmemtot’ で與へられた量より多くのメモリを使用することはない。讀取專用屬性のファイルについて何らかの變更が加へられたとき、スワップファイルは無條件に作成される。
スワップファイルの作成を避けるために ’swapfile’ オプションをリセットできる。そして新しいバッファでスワップファイルを作成しないやうにするのに |:noswapfile| 修飾子を使ふことができる。
{command} を實行する。それが新しいバッファを讀み込むコマンドを含んでゐる場合は、スワップファイルは作成されずに讀み込まれ、’swapfile’ オプションはリセットされる。バッファが既にスワップファイルを持つてゐた場合は、スワップファイルは削除されず、’swapfile’ はリセットされない。
ユーザーマニュアルの |11.3| を參照すること。
スワップファイルは 200 文字を打ち込むか、4 秒閒何もしなかつたときに更新される。これはバッファが變更されたときのみ行はれ、動き回つてゐるだけでは行はれない。なぜ常に更新が行はれないかといへば、それは通常の作業が大幅に遲くなるからである。
200 文字の設定は ’updatecount’ で、時閒の設定は ’updatetime’ で變更できる。時閒はミリ秒單位で與へられる。スワップファイルに書き込んだ後で、Vim はファイルとディスクの同期を取る。これにはしばらく時閒が掛かる (ビジーな Unix システムにおいては特に時閒がかかる)。もしこれを行つて欲しくなければ、’swapsync’ オプションに空文字列を設定すればよい。作業の成果を失ふ危險性は增すが。いくつかの非 Unix システム (MS-DOS、Amiga など) においては、スワップファイルはまつたく書き込まれなくなるだらう。
スワップファイルへの書き込みを望まないなら、’updatecount’ を 0 に設定することで行はれなくなる。Vim を "-n" オプションで起動することで、同じ結果が得られる。書き込みは ’updatecount’ を非 0 にすることでまた行はれるやうになる。これを行つたときはスワップファイルが全てのバッファに對して作られる。しかし、’updatecount’ を 0 に設定したときは、存在してゐるスワップファイルは消されることはなく、次に開かれたファイルから有效になる。
行つた編輯がスワップファイルに書きこまれたかを確認するには、次のコマンドを使用する:
全てのバッファの全てのテキストをスワップファイルに書き込む。恢復のためにオリジナルが必要とされることはなくなる。
このコマンドはカレントバッファにあるフラグを設定する。また、’cpoptions’ にフラグ ’&’ が入つてゐるならば、Vim が終了するとき、このバッファのスワップファイルは削除されず、バッファは讀み込まれた狀態のままになる。|cpo-&|
Vim のスワップファイルは最初の6文字で認識される: "b0VIM "。この後に "3.0" などのバージョン番號が續く。
Unix では同一のファイルに 2 つの名前をつけることができる。それはハードリンクまたはシンボリックリンク (symlink) を使つて行ふ。
ハードリンクの場合、Vim はそのファイルにつけられた他の名前を知ることができない。そのため、スワップファイルの名前は、そのファイルを開くときに使つた名前に基づいてつけられる。
そのファイルが別の名前でも開かれてゐるかどうかのチェックは行はない。他のスワップファイルを檢出することはできないからである (ハードディスク全てを檢索するといふ方法は除く。それはとても遲くなるから)。
シンボリックリンクの場合、Vim はそのリンクが指す實際のファイルを見つけられる。スワップファイルの名前は實際の名前に基づいてつけられる。よつて、ユーザーがどんな名前でそのファイルを開いたかは關係なく、スワップファイル名は同一になる。しかし次のやうな例外がある:
基本的なファイルの恢復方法はユーザーマニュアルの |usr_11.txt| を參照すること。
ファイルを恢復するためのもうひとつの方法は、Vim を起動して ":recover
" コマンドを使ふことである。これは Vim を起動したときに "‘ATTENTION: Found a swap file ...’" といふメッセージを受け取つたときには便利である。その場合には ":recover
" といふコマンドひとつで全てが濟む。
recover コマンドにはファイル名かスワップファイル名を渡すことができる:
スワップファイルから [file] を恢復するやう試みる。もし [file] が與へられてゐない場合は、現在のバッファの名前が用ゐられる。現在のバッファの內容は失はれる。このコマンドはバッファが修正を加へられてゐる場合に失敗する。
":recover
" と同じだが、現在のバッファに對するどんな變更も失はれる。
Vim はスワップファイルが何らかの理由で壞れてゐるときに、いくつかの對處を提供する。Vim が見つかつたものに疑問を持つた場合、エラーメッセージが與へられ、"???" といふテキストが一緖に行に插入される。恢復中にエラーメッセージを受け取つたら、"???" を檢索することによつてどこに問題があつたかを知ることができる。必要なテキストを得るためには、カットやペーストを必要とするかもしれない。
ほとんどは "???LINES MISSING" のやうなものである。これは Vim がそのテキストをオリジナルのファイルから讀み込めないことを示す。これはシステムがクラッシュした時にファイルが正しくディスクに書き込まれなかつたときに起こる。
オリジナルを上書きしたり、スワップファイルを削除する前に、恢復が成功したことを確認すること。恢復されたファイルをどこか別の場所に保存して、’diff’ によつて變更を加へた箇所が、ちやんと恢復されたファイルに入つてゐるか調べてみるとよい。または |:DiffOrig| を使ふ。
恢復が成功したと確信したら、スワップファイルを削除する。さうしないと、".swp" が存在するといふメッセージが表示されつづけることになる。
テキストファイルが暗號化されてゐるときはスワップファイルも暗號化される。これはリカバリーを多少複雜にする。スワップファイルからリカバリーするときにそれが暗號化されてゐた場合、1 つか 2 つの祕密鍵を入力する必要があるだらう。
テキストファイルが存在しない場合は入力する必要のある祕密鍵はスワップファイル用の 1 つだけである。
テキストファイルが存在する場合、そのファイルはスワップファイルとは別の方法で復號する必要があるかもしれない。祕密鍵を 2 つ入力する必要がある:
Need encryption key for "/tmp/tt" Enter encryption key: ****** "/tmp/tt" [crypted] 23200L, 522129C Using swap file "/tmp/.tt.swp" Original file "/tmp/tt" Swap file is encrypted: "/tmp/.tt.swp" If you entered a new crypt key but did not write the text file, enter the new crypt key. If you wrote the text file after changing the crypt key press enter to use the same key for text file and swap file Enter encryption key:
2 つの狀況が考へられる:
Note:
リカバリー實行後にはスワップファイルのキーがテキストファイルに使用される。したがつて、ファイルを書き込んだ後は新しいキーを使用する必要がある。