.swpファイルから元のファイルを復元するにはどうすればよいですか?


57

を使用して.swpファイルを開こうviとしましたcatが、迷惑メールが表示されます。


viまたはvimを使用していますか?
狂気

これは動作しemacsますか?(または崇高、ナノ、エドなど)
フランク

回答:


94
vim -r .swp

これは回復モードになり、詳細情報を提供します。これがあなたの望むものだと思います。

.swX-保存されていないファイルとのセッションが強制終了/クラッシュ/何か他の悪いことが起こった場合、ファイルは残されます。また、Vimセッションで保存されていないバッファーが開いている間も存在します。vim -rこれらの一時ファイルを読み取り、コンテンツを再作成します。回復したら、通常どおり保存します(例:):w newfilename


8
まさに私が探していたもの。他の人にとっては、これがまだ保存されていないファイルを回復する方法です。上記の方法は、ファイルが既に存在する場合は正常に機能しますが、名前のないファイルを開くことはできません。
エリック胡

17

.swpを復元するために元のファイルを用意する必要はありません。存在するかのようにファイルを開くだけです。vimは、拡張子が.swpのファイルを探し、それを回復することを提案します。

例えば:

$ ls -a
. .. .test.txt.swp
$ vim test.txt
[...]
Swap file ".test.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

Rを押して回復し、:wqファイル

編集:.swpファイルには、ファイルに加えられた変更のみが含まれていることに注意してください(コメントを参照)。つまり、ファイルの最新のコピーをバックアップから取得し、vimを使用して最新の変更を回復する必要があります。ファイルのバックアップコピーがない場合は、本当に運が悪いです。


2
元のファイルが必要です。これがないと、.swpファイルのデータは役に立たなくなります。「:help swap-file」を参照してください。元のファイルがなくても動作しているように見える場合がありますが、.swpファイルには変更情報のみが保存されており、リカバリ中にその情報を適用するには開始点が必要です。
ヘプタイト

もちろん、あなたは正しいです。私は実際にvimについてこれを知りませんでした。しかし、元のファイルの完全なコピーを保存するのは非常に無駄なので、それは論理的です。その答えは次のとおりです。ファイルをバックアップから復元し、vimを使用して最新の変更を復元します。
ベガーウェスターランド

単一のswpにファイル全体を保存するのは無駄です、はい、しかしswpファイルを蓄積することには潜在的な価値があると思います(有効になっている場合)。一連の差分をステージングできる場合、部分合計(今日より前の日付->夜間、夜間+今日=現在)などを生成します。マニュエルに ':pre [serve] `が見つかりました。いずれにせよ、最も重要な行がある:The original file is no longer needed for recovery.
ジョン・P

動作しているように見えます。ディレクトリに.swpファイルと.swoファイル:preserve:set cpoptions=...&残し、どちらかからの回復を提案します。を使用しvim -r <file>て、.swpまたは.swoを選択できます。さらに編集すると、.swn、.swmなどが生成され、それまでのスワップの部分的な合計のように見えます。好みのバージョンに戻して編集(〜= fork)または保存(〜= stash)できます。最終的には、スワップファイルのtar圧縮、バックアップのデーモン化などを行うことができます。大きなファイルに関しては、詳細が間違っている可能性があります。これが余分なスワップファイルにどのように影響するかわかりません。
ジョンP

(続き)-バッファはフラグを保持し、スワップファイルを生成するのはバッファです。したがって、フラグがグローバル構成または自動ロードから設定されていなくても、リカバリ中に継承されます。回復シーケンスを単一の回復ファイルに置き換えるには、目的のスワップを.swpに移動し、残りを非表示にすることができます。誰かがギャップを埋めることができるなら、ファイル回復とVimセッション管理の重複についてもっと知りたいです。
ジョンP


7

1スワップファイル.file.swpを開きますvim

2 :recoverはファイルを回復します


7

Vegar WesterlundとHeptiteのコメントを読んだ後、vimが.swpファイルから回復するために元のファイル(またはバックアップ)が必要になるポイントを知りたいと思いました。これが何をしたかです:

975行のファイルを開き、949行で編集(.swpファイルの作成)してプロセスを強制終了し、元のファイルを削除しました。$ vim Original_File.swpから回復するかどうかを尋ねられました»>はい。実際に復元されたのは、最初の68行と最後の34行(編集の8行上から開始)だけです。

その後、小さなファイルでテストを繰り返しました。20行から200行まで、.swpファイルには元のコンテンツが100%含まれていました。しかし、300行では、最初の68行と最後の18行(編集の2行上から開始)だけが.swpに含まれていました。

結論として、vimは常に.swpファイルにファイルの「ヘッダー」と「ボトム」を保存することを知っておくと良いでしょう。たぶん、.swpに含める行数を制御する設定がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.