Contents

recover - vimdoc

Home
*recover.txt*   For Vim バージョン 7.3.  Last change: 2010 Jul 20


                  VIM REFERENCE MANUAL    by Bram Moolenaar


クラッシュ後のリカバリー                                *crash-recovery*

あなたが明日の朝までに終わらせなければならない文書のタイピングに数時間を費や
していたとき、悲劇があなたを襲う。: コンピュータがクラッシュした。

                        慌てないで!

あなたはVimがファイルの内容を蓄えていたファイルから、ほとんどの変更を回復でき
る。たいていの場合、あなたの仕事は1コマンドで回復できる。
        vim -r filename

1. スワップファイル     |swap-file|
2. リカバリー           |recovery|

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

Vimは変更した箇所をスワップファイルに蓄える。編集を開始したオリジナルのファイ
ルとスワップファイルから、あなたのした作業は回復することができる。

現在使用しているスワップファイルの名前は、次のコマンドで確認できる:

        :sw[apname]                                     *:sw* *:swapname*

スワップファイルの名前は、普通は編集中のファイルと同じで、拡張子が".swp"のもの
になる。
- UNIXでは、スワップファイルは編集中のファイルと同じディレクトリ内に作られ、
  '.'が名前の前につけられる。これはディレクトリ表示からスワップファイルを隠す
  ためである。
- MS-DOS マシンで、'shortname' オプションがオンのときは、オリジナルファイルの
  '.'は'_'に置き換えられる。
- このファイルがすでに存在すると(たとえば、クラッシュから復帰した場合)、注意が
  表示され、違った拡張子、".swo"、".swn"、などが用いられる。
- 存在しているファイルは決して上書きされない。
- スワップファイルはVimが編集を終えるとすぐに削除される。

技術情報:  '.'から'_'への置換はMS-DOS互換のファイルシステム(例、crossdos、
           multidos)での問題を避けるためである。もしVimがMS-DOSライクなファイ
           ルシステムを探知すると、'shortname' オプションと同じ効果を持つフラ
           グが設定される。このフラグは違うファイルの編集を始めたときにリセッ
           トされる。
                                                        *E326*
           もし".swp"ファイルがすでに存在すると、同名のファイルが存在しなくな
           るか、".saa"となるまで最後の文字をひとつ前の文字に戻す。".saa"まで
           存在するときは、スワップファイルは作られない。

'directory' オプションを設定することによって、スワップファイルを、編集している
ファイルとは別の場所に置くこともできる。
利点:
- ディレクトリが".swp"ファイルで汚染されることがない。
'directory' が別パーティションにある場合、ファイルのあるファイルシステムが
  (クラッシュで)損傷を受けるリスクが減る。
欠点:
- 別ディレクトリの同一名のファイルで名前の衝突を生じうる(Vimはパス名の比較でそ
  れを避けようとするが)。
  これによって偽の注意メッセージが表示される。
- あなたがホームディレクトリで作業をしていて、他の誰かが同じファイルを編集しよ
  うとしたとき、その人はあなたのスワップファイルに気付かないし、注意のメッセー
  ジも表示されない。
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'オプションをリセットできる。

既存のスワップファイルを削除する

ユーザーマニュアルの|11.3|をご覧ください。


スワップファイルの更新

スワップファイルは200文字を打ち込むか、4秒間何もしなかったときに更新される。こ
れはバッファが変更されたときのみ行われ、動き回っているだけでは行われない。なぜ
常に更新が行われないかといえば、それは通常の作業が大幅に遅くなるからである。
200文字の設定は'updatecount'で、時間の設定は'updatetime'で変更できる。時間はミ
リ秒単位で与えられる。スワップファイルに書き込んだ後で、Vimはファイルとディス
クの同期を取る。これにはしばらく時間が掛かる(ビジーなUnixシステムにおいては特
に時間がかかる)。もしこれを行って欲しくなければ、'swapsync'オプションに空文字
列を設定すればよい。作業の成果を失う危険性は増すが。いくつかの非Unixシステム
(MS-DOS、Amigaなど)においては、スワップファイルはまったく書き込まれなくなるだ
ろう。

スワップファイルへの書き込みを望まないなら、'updatecount'を0に設定することで行
われなくなる。Vimを"-n"オプションで起動することで、同じ結果が得られる。書き込
みは'updatecount'を非0にすることでまた行われるようになる。これを行ったときはス
ワップファイルが全てのバッファに対して作られる。しかし、'updatecount'を0に設定
したときは、存在しているスワップファイルは消されることはなく、次に開かれたファ
イルから有効になる。

行った編集がスワップファイルに書きこまれたかを確認するには、次のコマンドを使用
する:

                                                        *:pre* *:preserve*
:pre[serve]             全てのバッファの全てのテキストをスワップファイルに書き
                        込む。回復のためにオリジナルが必要とされることはなくな
                        る。
                        このコマンドはカレントバッファにあるフラグを設定する。
                        また、'cpoptions' にフラグ '&' が入っているならば、Vim
                        が終了するとき、このバッファのスワップファイルは削除さ
                        れず、バッファは読み込まれた状態のままになる。|cpo-&|
                        {Vi: might also exit}

Vimのスワップファイルは最初の6文字で認識される: "b0VIM"。
この後に"3.0"などのバージョン番号が続く。


リンクとシンボリックリンク

Unix では同一のファイルに2つの名前をつけることができる。それはハードリンクまた
はシンボリックリンク(symlink)を使って行う。

ハードリンクの場合、 Vim はそのファイルにつけられた他の名前を知ることができな
い。そのため、スワップファイルの名前は、そのファイルを開くときに使った名前に基
づいてつけられる。
そのファイルが別の名前でも開かれているかどうかのチェックは行わない。他のスワッ
プファイルを検出することはできないからである(ハードディスク全てを検索するとい
う方法は除く。それはとても遅くなるから)。

シンボリックリンクの場合、Vim はそのリンクが指す実際のファイルを見つけられる。
スワップファイルの名前は実際の名前に基づいてつけられる。よって、ユーザがどんな
名前でそのファイルを開いたかは関係なく、スワップファイル名は同一になる。しかし
次のような例外がある:
- シンボリックリンクがなんらかの形でループになっているとき、エラーメッセージ
  *E773* が表示され、変更されていないファイル名が使われる。普通にファイルを保
  存することはできない。

==============================================================================
2. リカバリー                                           *recovery*

基本的なファイルの回復方法はユーザーマニュアルの|usr_11.txt|をご覧ください。

ファイルを回復するためのもうひとつの方法は、Vimを起動して":recover"コマンドを
使うことである。
これはVimを起動したときに"ATTENTION: Found a swap file ..."というメッセージを
受け取ったときには便利である。その場合には":recover"というコマンドひとつで全て
が済む。
recoverコマンドにはファイル名かスワップファイル名を渡すことができる:

                                                        *:rec* *:recover*
:rec[over] [file]       スワップファイルから[file]を回復するよう試みる。もし
                        [file]が与えられていない場合は、現在のバッファの名前が
                        用いられる。現在のバッファの内容は失われる。このコマン
                        ドはバッファが修正を加えられている場合に失敗する。

:rec[over]! [file]      ":recover"と同じだが、現在のバッファに対するどんな変更
                        も失われる。

                                                        *E312* *E309* *E310*
Vimはスワップファイルが何らかの理由で壊れているときに、いくつかの対処を提供す
る。Vimが見つかったものに疑問を持った場合、エラーメッセージが与えられ、"???"と
いうテキストが一緒に行に挿入される。回復中にエラーメッセージを受け取ったら、
"???"を検索することによってどこに問題があったかを知ることができる。必要なテキ
ストを得るためには、カットやペーストを必要とするかもしれない。

ほとんどは"???LINES MISSING"のようなものです。これはVimがそのテキストをオリジ
ナルのファイルから読み込めないことを示します。これはシステムがクラッシュした時
にファイルが正しくディスクに書き込まれなかったときに起こります。

オリジナルを上書きしたり、スワップファイルを削除する前に、回復が成功したことを
確認すること。回復されたファイルをどこか別の場所に保存して、'diff'によって変更
を加えた箇所が、ちゃんと回復されたファイルに入っているか調べてみるとよい。また
は |:DiffOrig| を使う。

回復が成功したと確信したら、スワップファイルを削除する。そうしないと、".swp"が
存在するというメッセージが表示されつづけることになる。

{Vi: 違う方法で回復し、回復できそうなときはメールが送られる}


暗号化とスワップファイル                                *:recover-crypt*

テキストファイルが暗号化されているときはスワップファイルも暗号化されます。これ
はリカバリーを多少複雑にします。スワップファイルからリカバリーするときにそれが
暗号化されていた場合、一つか二つの秘密鍵を入力する必要があるでしょう。

テキストファイルが存在しない場合は入力する必要のある秘密鍵はスワップファイル用
の一つだけです。

テキストファイルが存在する場合、そのファイルはスワップファイルとは別の方法で復
号する必要があるかもしれません。秘密鍵を二つ入力する必要があります:

        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: 

二つの状況が考えられます:

1. 暗号化キーが変更されなかったか、キーが変更された後でファイルが保存された場
   合。秘密鍵を二回入力する必要があります。二回目に入力するときは単にエンター
   を押してください。そうするとテキストファイルとスワップファイルの両方に同じ
   キーが使用されます。
2. 新しい暗号化キーを入力したが、ファイルは保存されなかった場合。スワップファ
   イルには新しいキーが使用されていますが、テキストファイルは古いキーで暗号化
   されたままになっています。二回目にキーを入力するときに新しい方のキーを入力
   してください。

Note: リカバリー実行後にはスワップファイルのキーがテキストファイルに使用されま
す。したがって、ファイルを書き込んだ後は新しいキーを使用する必要があります。


 vim:tw=78:ts=8:ft=help:norl: