web-dev-qa-db-ja.com

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

.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:
47
James

このメッセージは、[失わない]保存されていない可能性のあるテキストに関心がある場合、実際にはかなり重要です。notにする必要がありますnotは、煩わしいと見なされ、急いでスワップファイルを削除するか、スワップファイルなしで実行するようにvimを構成します。

vimを使用して編集するファイルには、対応するスワップファイル編集中があります。これは、vimが変更を追跡するために使用します。ファイルの編集を終了すると、vimは対応するスワップファイルを自動的に破棄します。したがって、スワップファイルが存在すること、および元のファイルに上書きしようとすることは、検討および適切なアクションの原因となるはずです。

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

このメッセージが表示されたとき、私は通常、このファイルを別のターミナルウィンドウまたはタブで編集しているかどうかについて考えます。

enter image description here

別の場所で編集していることに気付いた場合、[それに戻ることができます、次に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

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

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が何かを返す場合、(スワップファイルを介して)元のファイルに、リカバリにより2番目のファイルに保存された変更があったことを意味します。

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

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

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

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

vim notes

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

45
user664833

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

そのメッセージが間違っている場合は、Vimセッションがどのように不適切に終了したかを判別し、今後それを回避する必要があります。

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

:help recover.txt "。

ここでの教訓は、このメッセージが表示されることになっているわけではなく、どこかに問題があることを意味しているということです。 (おそらく)Vimのせいではありません。

この時点で、Vimに.swpファイルを作成させず、クラッシュやその他の関連する問題から回復できるようにすることが絶対的に決まっている場合は、「set noswapfile "~/.vimrc

19
Heptite

-nを使用して スワップファイルを使用せずにvimを開く

これを常に行うには、

alias vim='vim -n' 

.bashrcまたは.bash_aliasesファイル

-nオプションなしでvimを実行する必要がある場合は、次を実行してください。

\vim
11
Brad Parks

vimは、適切に終了すると、生成された.swpファイルを削除します。

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

~/.vimrcshort message オプションを使用します。

set shortmess=A

POSIXモード実行時のデフォルトでもあります。

ただし、これを行わないでください:燃料効率を高めるために車のエアバッグを取り外すようなものです。長期的には、質問に答えたときよりも回復に多くの時間を費やすことになります。

1
bishop

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

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

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

  1. プロセスIDを検索process ID: 2251 (still running)を見て、この場合は2251です。
  2. 確認正しいIDを取得しましたps 2251
  3. Kill the process using kill 2251

以上です。

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

1
kintsukuroi