.swpファイルを持つファイルを開くときの警告を取り除く方法は?


46

.swpファイルを含むファイルを開いたときに、迷惑な警告を取り除くにはどうすればよいですか?または、.swpファイルをまったく生成しない方法を教えてください。警告の例:

E325: ATTENTION
Found a swap file by the name ".notes.swp"
          owned by: james   dated: Fri Dec  3 17:38:07 2010
         file name: ~james/school/se/project-dir/rottencucumber/doc/notes
          modified: no
         user name: james   host name: james-laptop
        process ID: 2251 (still running)
While opening file "notes"
             dated: Fri Dec  3 18:46:10 2010
      NEWER than swap file!

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r notes"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".notes.swp"
    to avoid this message.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

回答:


44

このメッセージは、保存していない可能性のあるテキストが失われないようにする場合、実際に非常に重要です。それはすべきではない迷惑とみなされる、とすべきではない、あなたが急いでスワップファイルまたは構成を削除させvim、それなしで実行します。

あなたの編集を持つ任意のファイルはvim、対応するスワップファイルを持っていますあなた編集しながらvim変化を追跡するために使用しています。ファイルの編集を終了vimすると、対応するスワップファイルは自動的に破棄されます。したがって、スワップファイルの存在、および元のファイルの上に上書きしようとする試みは、考慮と適切なアクションの原因となるはずです。

メッセージ(E325: ATTENTION Found a swap file)に表示される2つのシナリオは、実際には非常に一般的です:(1)別のvimプログラムが、編集しようとしているのと同じファイルを編集している(実際には別の人である可能性があります-この場合、実際には意味がありません)スワップファイルをやみくもに削除する-または、別のターミナルウィンドウまたはタブにいる可能性があります)、または(2)前のvimセッションがクラッシュした(ほとんどの場合、これはリモートで編集しているときに発生し、ネットワークセッションは切断されます) vimセッションが正常に終了せず、.swpファイルが残っている場合;この2番目のシナリオの別の例は、アクティブまたはバックグラウンドvimセッションがあったターミナルウィンドウまたはタブを誤って閉じた場合です)。

このメッセージに出会ったとき、私は通常、それぞれがいくつかのタブを持ついくつかのターミナルウィンドウで操作するため、別のターミナルウィンドウまたはタブでこのファイルを編集しているかどうかを考えます。

ここに画像の説明を入力してください

別の場所で編集していることに気付き、そこに戻ることができる場合、この追加セッションのqキーを押し(Q)uit、元のvimセッションを介して編集に戻ります。

よくわからない場合は(Q)uit、実行してjobsからvim、まったく同じ端末で実行しているかどうかを確認します。何も表示されない場合は、他の場所(つまり、別のターミナルウィンドウまたはタブ)でps -ef | grep vim実行してvimいるかどうかを確認するために実行します。ポイントは、私は常に元のvimセッションを介して編集を再開しようとすることです。


私は、元の編集セッションに戻ることができないことを確信し、私はまだ、次のオプションを提示していた場合、私は押しr(R)ecover

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

を押すとr、次のようなメッセージが表示されます。

Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

一方、シェルプロンプトが表示されているため、これらのオプションに直面しなくなっvim-r場合は、次のようにオプションを使用して実行します。

vim -r notes

結果のメッセージは次のようになります。

Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

いずれにしても、を押しENTERて続行すると、ファイルが表示されます。

注:Vimが見つけたものに疑問がある場合、エラーメッセージが表示され、「???」の行が挿入されます。テキスト内。リカバリ中にエラーメッセージが表示された場合は、ファイルで「???」を検索してください 何が悪いのかを見るために。必要なテキストを取得するには、カットアンドペーストすることをお勧めします。

最も一般的な発言は「??? LINES MISSING」です。これは、Vimが元のファイルからテキストを読み取れないことを意味します。これは、システムがクラッシュし、元のファイルの一部が保存されなかった場合に発生する可能性があります。

そうは言っても、私はそれらの???マークを見たことがないので、これは本当にまれな出来事であるに違いない。


次に、コンテンツを別のファイルに保存(書き込み)します(通常、元のファイル名の最後に「2」を追加するだけです)。

:w notes2

次に、このvimセッションを強制終了します。

:q!

次に、2つのファイルを比較します。

diff notes notes2

diffが何も返さない場合、それは違いがないことを意味し、スワップファイルと2番目のファイルの両方を削除しても安全です。

rm .notes.swp notes2

この時点で、元のファイルを開き、問題がなかったかのように進みます。

vim notes

diffが何かを返す場合、元のファイル(スワップファイル経由)に変更があり、recoverのおかげで2番目のファイルに保存されています。

これらの変更は2番目のファイルにキャプチャされるため、スワップファイルを削除して、元のファイルを2番目のファイルで上書きしても安全です。

rm .notes.swp
remove .notes.swp? y

mv notes2 notes
overwrite notes? (y/n [n]) y

この時点で、元のファイルを開き、問題がなかったかのように進みます。

vim notes

これは多くの作業のように思えますが、ワークフローに慣れると、最大で20秒かかります。


2
これが受け入れられた答えではないとは信じられません。それは完璧だ。+1
デビッド14

受け入れられた答えよりもはるかに良い。これに対処する方法があればいいのに!
マイケルデュラント

1
メッセージが有用であるとは限りません。ファイルを編集している場合は、編集を開始してからファイルが変更されたかどうかを気にしますが、別のvimウィンドウでも編集しているのかどうかはなく、保存しようとしています。ファイルへの保存がインターリーブしない限り、2つの端末でファイルを開くことはまったく問題ありません。Vimは、保存しようとするときだけ、本当に開く必要があるだけです。
ケンサイモン

残念ながら、これは質問に答えません。ナグ画面を無視してはいけないと言っているだけです。私のシナリオは、すでにvimでファイルを開いて(おそらく編集用)、ファイルの異なる部分を同時に並べて表示したい、clang_completeはバッファのサイズを変更し続けるため、分割バッファが必要ないということです。この場合、Vimでファイルを読み取り専用で開き、スワップファイルを無視する方法を実際に知りたいです。
レランスラン

@Lelanthranvim -n file_name
user664833

19

貼り付けられたメッセージは、別のVimセッションで「notes」ファイルがまだ開いていることを示しています。他の場所で編集されているファイルを編集することは絶対に良い考えではありません。

そのメッセージが間違っている場合は、Vimセッションが不適切に終了した方法を判断し、将来的にそれを回避する必要があります。

回復に関しては、「notes」はそれに関連付けられているVim .swpファイルよりも新しいため、この1つのインスタンスで問題になる可能性がありますが、それでも試してみることができます。まず、「メモ」ファイルをバックアップ場所にコピーしてください。

:help recover.txt」に目を通すことをお勧めします。

ここでの教訓は、あなたがこのメッセージを見ることは想定されていないことであり、あなたは何かがどこか間違っていることを意味しているということです。それは(おそらく)Vimのせいではありません。

この時点で、クラッシュやその他の関連する問題から回復できるようにVimに.swpファイルを作成させないことを決定した場合、に " set noswapfile"を入れることができます~/.vimrc


1
注意してください!VIMをいじり回すと、ほとんどすべての作業が失われました。何かを試す前にコードをコピーしてください。
Squirrl

私は読者がuser664833(で答えを見直す強く示唆このメッセージは、実際にはかなり重要です...私はそれがこの回答私見ことをはるかに優れてinformatgionとアドバイスを与えると考えると)
マイケル・デュラント

11

-nを使用すると、swapfileを使用せずにvim開くことができます。

常にこれを行うには、

alias vim='vim -n' 

.bashrcまたは.bash_aliasesファイル内

-nオプションなしでvimを実行する必要がある場合は、単に実行します

\vim

3
常にスワップファイルなしで実行することはお勧めしませんが、実際には「-n」はまさに必要なものです。通常、スワップファイルを使用します。ただし、Vimをdiffツールとして使用する場合、編集中のファイルの差分を表示できるようにしたいのですが、この差分が表示されたり、スワップファイルに干渉したりすることはありません。
Agentlien

1
私はこの答えが好きです-それは短く、正確で、実際の質問に答えます!
レランスラン


1

.swpファイルを含むファイルを開いたときに、迷惑な警告を取り除くにはどうすればよいですか?

ショートメッセージオプションを使用します~/.vimrc

set shortmess=A

これは、POSIXモードを実行するときのデフォルトでもあります。

ただし、これはしないでください。車のエアバッグを取り外して燃費を向上させるようなものです。長い目で見れば、あなたが質問に答えたよりも多くの時間を回復に費やすことになります。


1
シングルユーザーシステムを想定すると、それは構成の恐ろしいことではありません。私はたくさんの端末タブを開いておくのが好きで、時には他のタブに既に埋めているファイルを編集したいことがあります。いくつかの簡単な編集を行いたい場合は、それで問題ありません。私は他のvimのウィンドウに戻って自分自身を見つけた場合は、美しさは、それが私を警告するだろうということで、その後、私はそれを保存する前に、ファイルが変更されたことを、私は迅速に行うことができ:e、迅速含む(起こったのかを確認するuものにアンドゥバックに私はバッファにいました。すでにファイルを開いていることについてうんざりするよりもずっと好きです。
ケンサイモン

1

これは、私の端末がviを開いて接続を予期せず閉じたときに起こりました。

ありがたいことに、失われた変更はありませんでした。

その警告を削除してスワップを破棄するには:

  1. てプロセスID見つけます。process ID: 2251 (still running)この場合は2251です。
  2. 正しいIDを取得したことを確認してくださいps 2251
  3. を使用してプロセス強制終了しますkill 2251

以上です。

スワップファイルはユーザーを保護するためのものであり、完全に無効にしないでください。


しかし、vi(m)プロセスがない場合はどうでしょうか?
スコット

-2

私は3つの簡単なステップでこの問題を解決しました:

1 :)ファイルが存在する場所で "ls -la"を実行して、同じ.swpファイルを表示できるようにします。

2 :)「rm -i * .swp」、つまり、ディレクトリから「.swp」ファイルを削除します。

3 :)「.swp」ファイルが削除されたかどうかを確認します。

4 :)これらの警告から楽しみましょう。


3
なぜ世界でrm -rfファイルを削除することをお勧めしますか?私-rfはより賢明なものに置き換えました-i
ニフレ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.