Thông báo này thực sự khá quan trọng nếu bạn quan tâm đến việc không bị mất văn bản mà bạn có khả năng chưa lưu. Nó không nên được coi là gây phiền nhiễu và không nên khiến bạn vội vàng xóa tệp hoán đổi hoặc cấu hình vimđể chạy mà không có nó.
Bất kỳ tệp nào bạn chỉnh sửa vimsẽ có tệp hoán đổi tương ứng trong khi bạn chỉnh sửa , vimsử dụng để theo dõi các thay đổi. Khi bạn thoát chỉnh sửa một tệp, vimsẽ tự động loại bỏ tệp hoán đổi tương ứng. Do đó, sự tồn tại của một tệp hoán đổi và nỗ lực của bạn để ghi đè lên tệp gốc, nên là nguyên nhân để xem xét và hành động thích hợp.
Hai tình huống được trình bày trong thông báo ( E325: ATTENTION Found a swap file) thực sự khá phổ biến: (1) hoặc một vimchương trình khác đang chỉnh sửa cùng một tệp mà bạn đang cố chỉnh sửa (thực sự có thể là một người khác - trong trường hợp đó thực sự không có ý nghĩa chỉ cần xóa một cách mù quáng tệp hoán đổi - hoặc có thể là bạn trong một cửa sổ hoặc tab thiết bị đầu cuối khác) hoặc (2) một vimphiên trước đó bị hỏng (thường xảy ra khi bạn chỉnh sửa từ xa và phiên mạng bị cắt đứt - trong đó trong trường hợp phiên vim không được thoát bình thường và .swptệp vẫn ở phía sau, một ví dụ khác về kịch bản thứ hai này là bạn đã vô tình đóng cửa sổ đầu cuối hoặc tab có phiên hoạt động hoặc nền vim).
Khi tôi gặp thông báo này, trước tiên tôi nghĩ về việc liệu tôi có đang chỉnh sửa tệp này trong một cửa sổ hoặc tab khác không, vì tôi thường hoạt động với một số cửa sổ đầu cuối với mỗi tab:

Nếu tôi nhận ra rằng tôi đang chỉnh sửa ở một nơi khác và có thể quay lại nó , thì tôi sẽ nhấn qphím cho (Q)uitphiên bổ sung này và quay lại chỉnh sửa thông qua vimphiên ban đầu .
Đôi khi nếu tôi không hoàn toàn chắc chắn, tôi (Q)uitvà sau đó chạy jobsđể xác minh xem tôi có đang chạy vimtrong cùng một thiết bị đầu cuối hay không; nếu không có gì xuất hiện, tôi chạy ps -ef | grep vimđể kiểm tra xem tôi có đang chạy vimở nơi khác không (tức là trong một cửa sổ hoặc tab thiết bị đầu cuối khác). Vấn đề là, tôi luôn cố gắng tiếp tục chỉnh sửa thông qua vimphiên ban đầu .
Nếu tôi chắc chắn rằng tôi không thể quay lại phiên chỉnh sửa ban đầu và tôi vẫn được trình bày với các tùy chọn sau, thì tôi nhấn rvào (R)ecover.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Nhấn r, bạn sẽ thấy một thông báo như thế này:
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
Mặt khác, nếu tôi không còn phải đối mặt với các tùy chọn đó nữa, vì tôi đang ở dấu nhắc shell, thì tôi chạy vimvới -rtùy chọn, như sau:
vim -r notes
Thông báo kết quả sẽ tương tự:
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
Dù bằng cách nào, nhấn ENTERđể tiếp tục, và bạn sẽ thấy tập tin của bạn.
Lưu ý: Nếu Vim nghi ngờ về những gì nó tìm thấy, nó sẽ đưa ra thông báo lỗi và chèn dòng bằng "???" trong văn bản. Nếu bạn thấy thông báo lỗi trong khi khôi phục, hãy tìm kiếm trong tệp cho "???" để xem những gì là sai. Bạn có thể muốn cắt và dán để có được văn bản bạn cần.
Nhận xét phổ biến nhất là "??? DÒNG NHIỆM VỤ". Điều này có nghĩa là Vim không thể đọc văn bản từ tệp gốc. Điều này có thể xảy ra nếu hệ thống bị sập và các phần của tệp gốc không được lưu.
Điều đó nói rằng, tôi chưa bao giờ nhìn thấy những ???dấu hiệu đó, vì vậy đây phải là một sự xuất hiện thực sự hiếm .
Tiếp theo, lưu (tức là ghi) nội dung vào một tệp khác (thông thường tôi chỉ thêm "2" vào cuối tên tệp gốc):
:w notes2
Tiếp theo, buộc bỏ vimphiên này :
:q!
Tiếp theo, so sánh hai tệp:
diff notes notes2
Nếu difftrả về không có gì , điều đó có nghĩa là không có sự khác biệt và an toàn để xóa cả tệp hoán đổi và tệp thứ hai:
rm .notes.swp notes2
Tại thời điểm này, hãy mở tệp gốc và tiến hành như thể chưa bao giờ có vấn đề:
vim notes
Nếu difftrả về một cái gì đó , điều đó có nghĩa là tệp gốc (thông qua tệp hoán đổi) đã có những thay đổi, nhờ phục hồi, đã được lưu vào tệp thứ hai.
Vì những thay đổi đó được ghi lại trong tệp thứ hai, bạn an toàn để xóa tệp hoán đổi và ghi đè lên tệp gốc bằng tệp thứ hai:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
Tại thời điểm này, hãy mở tệp gốc và tiến hành như thể chưa bao giờ có vấn đề:
vim notes
Điều này có vẻ như rất nhiều công việc, nhưng một khi bạn đã quen với quy trình làm việc, nó sẽ mất tối đa 20 giây.