【備忘録】Vimで出る「E325: ATTENTION」エラーの原因と安全な対処方法(.swp削除判断メモ)

【備忘録】Vimで出る「E325: ATTENTION」エラーの原因と安全な対処方法(.swp削除判断メモ)

SSH接続中にサーバーが落ちたあと、再度Vimを開いたら
「E325: ATTENTION」というメッセージが表示されることがあります。

この記事は、そのような状況で「削除してよいのか」「復旧すべきか」を判断するための備忘録です。

※以下では config.py を例として説明します。
ファイルパスは例として /etc/myapp/config.py を使用しています。実際の環境に合わせて読み替えてください。


E325: ATTENTION の例

E325: ATTENTION
Found a swap file by the name ".config.py.swp"
          owned by: user   dated: [some date]
         file name: /etc/myapp/config.py
          modified: YES
         user name: user   host name: ********
        process ID: *****
While opening file "config.py"
             dated: [some date]

(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 config.py"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".config.py.swp"
    to avoid this message.

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

E325: ATTENTION とは

「E325」はVimが出すエラーナンバーの一つで、
ATTENTION(注意)という言葉の通り、致命的なエラーではなくユーザーへの警告です。

意味としては、
「編集中のファイルに対応するスワップファイル(.swp)が存在するため、
そのまま開くと競合やデータ損失の可能性がある」という内容です。


スワップファイルの仕組み

Vimは編集中の内容を定期的にスワップファイル(.swp)に保存します。
これは、クラッシュや接続切断などでVimが強制終了しても、作業内容を復旧できるようにするための仕組みです。

  • 元ファイル名が config.py の場合、スワップファイルは .config.py.swp という名前になります。
  • これはVimの「自動バックアップ機能」に近い位置づけです。

よくある原因

状況 説明
Vimセッションが異常終了した SSH切断、サーバー再起動、ターミナル強制終了など
同じファイルを複数のVimで開いている 編集の競合が発生している可能性あり
スワップファイルの削除忘れ 以前の編集中に残った一時ファイルが残存している

選択肢と判断基準

エラーメッセージの最後に表示される選択肢は次の通りです。

[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort
選択肢 意味 使用する場面
R スワップファイルから復旧 前回編集中に強制終了し、未保存の変更を救出したい場合(最優先)
O 読み取り専用で開く 他のユーザーやプロセスが編集中の可能性がある場合
D スワップファイルを削除 復旧を試みて不要と判断した場合、または単なる残骸だった場合
E 強制的に編集する スワップファイルを無視して開く(上書きリスクがあるため最終手段)
Q / A 終了・中断 状況を確認してから再実行したい場合

実際の手順(推奨フロー)

1. 状況を確認する

# スワップファイルの存在を確認
ls -la /etc/myapp/.config.py.swp

# 同じファイルを開いているプロセスがないか確認
ps aux | grep config.py

# 他プロセスでの使用状況を確認(lsof / fuser が使える場合)
lsof /etc/myapp/config.py
fuser /etc/myapp/config.py

確認すべきポイント:

  • スワップファイルの所有者は誰か
  • タイムスタンプは最近のものか
  • 他プロセスで開かれていないか

2. 未保存の変更を復旧する(最優先)

# スワップファイルから復旧
vim -r /etc/myapp/config.py

復旧後の対応:

  1. 内容を確認し、必要な変更があれば :wq で保存
  2. 不要な変更なら :q! で終了
  3. 保存後は .swp ファイルを手動で削除

3. 復旧が不要な場合のみ削除する

# 削除前に所有者と更新日時を確認
ls -la /etc/myapp/.config.py.swp

# 他プロセスで開いていないことを再確認
ps aux | grep config.py

# 問題なければ削除
rm /etc/myapp/.config.py.swp

注意点:

  • 共有サーバーでは他ユーザーのファイルを削除しない
  • modified: YES と表示されている場合は、未保存の変更がある可能性が高い
  • 他ユーザーが編集中なら削除せず、O(読み取り専用)で開く

4. 同じエラーが繰り返し出る場合

# 複数のスワップファイルを確認
ls -la /etc/myapp/.config.py.*

# 不要なスワップファイルを削除
rm /etc/myapp/.config.py.swo
rm /etc/myapp/.config.py.swn

.swo, .swn, .swm などは、複数回エラーが発生した場合に作成される派生スワップファイルです。


補足

  • .swp ファイルはVimの「保険」機能。クラッシュや強制終了時に編集内容を保護します。
  • .swo.swn などは追加生成された一時ファイルです。
  • .viminfo はコマンド履歴や検索履歴を保存するファイルであり、スワップファイルとは別の役割です。
  • サーバー上の設定ファイルを編集している際に発生することが多いです。

まとめ

状況 対処(優先順)
前回の編集がクラッシュした R(recover)で復旧 → 保存後 .swp を削除
他で開いていないが警告が出る R で復旧を試す → 不要なら .swp 削除
他ユーザーが編集中の可能性あり O(Read-Only)で開く、またはユーザーに確認
同じエラーが繰り返し出る .swo.swn を確認して削除

結論

スワップファイルはVimが安全のために作成する一時ファイルです。
焦って削除する前に、まず R(recover)で復旧を試みることが安全な方法です。

Last modified: 2025-10-06

Author