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 vim
sẽ có tệp hoán đổi tương ứng trong khi bạn chỉnh sửa , vim
sử dụng để theo dõi các thay đổi. Khi bạn thoát chỉnh sửa một tệp, vim
sẽ 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 vim
chươ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 vim
phiê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à .swp
tệ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 q
phím cho (Q)uit
phiên bổ sung này và quay lại chỉnh sửa thông qua vim
phiên ban đầu .
Đôi khi nếu tôi không hoàn toàn chắc chắn, tôi (Q)uit
và sau đó chạy jobs
để xác minh xem tôi có đang chạy vim
trong 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 vim
phiê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 r
và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 vim
với -r
tù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ỏ vim
phiên này :
:q!
Tiếp theo, so sánh hai tệp:
diff notes notes2
Nếu diff
trả 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 diff
trả 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.