Це повідомлення насправді є досить важливим, якщо ви дбаєте про те, щоб не втратити текст, який ви потенційно не зберегли. Це не повинно вважатися дратівливим і не повинно спричиняти поспішного видалення файлу swap або налаштування vim
на запуск без нього.
Будь-який файл , який ви редагування з vim
матиме відповідний файл підкачки при редагуванні , яка vim
використовується для відстеження змін. Коли ви вийдете з редагування файлу, vim
автоматично відкинете відповідний файл підкачки. Тому наявність файлу swap та ваша спроба написати поверх початкового файлу повинні стати причиною для розгляду та відповідних дій.
Два сценарії, представлені в повідомленні ( E325: ATTENTION Found a swap file
), насправді є досить поширеними: (1) або інша vim
програма редагує той самий файл, який ви намагаєтесь відредагувати (насправді це може бути інша людина - у цьому випадку це справді не має сенсу просто сліпо видалити файл swap - або це може бути ви в іншому вікні або вкладці терміналу), або (2) попередній vim
сеанс завершився (найчастіше це відбувається при віддаленому редагуванні, а сеанс мережі розірваний - в якому у випадку, коли сеанс vim не був нормально .swp
закритий , і файл залишається позаду; іншим прикладом цього другого сценарію є те, що ви випадково закрили вікно або вкладку терміналу, у якого був активний або фоновий 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 сумнівається у тому, що він знайшов, він видасть повідомлення про помилку та вставить рядки з "???" в тексті. Якщо під час відновлення ви побачите повідомлення про помилку, знайдіть у файлі "???" щоб побачити, що не так. Ви можете вирізати та вставити потрібний текст.
Найбільш поширене зауваження - "??? Це означає, що Vim не може прочитати текст із вихідного файлу. Це може статися, якщо система вийшла з ладу і частини оригінального файлу не були збережені.
Однак, я ніколи не бачив цих ???
слідів, тому це повинно бути справді рідкісним явищем.
Далі збережіть (тобто запишіть) вміст в інший файл (зазвичай я просто додаю "2" до кінця оригінального імені файлу):
:w notes2
Далі примусово закрийте цей vim
сеанс:
:q!
Далі порівняйте два файли:
diff notes notes2
Якщо diff
нічого не повертається , це означає, що різниці немає, і можна безпечно видалити і файл swap, і другий файл:
rm .notes.swp notes2
У цей момент відкрийте оригінальний файл і продовжуйте так, ніби ніколи не було проблем:
vim notes
Якщо diff
щось повертає , це означає, що в оригінальному файлі (через файл swap) відбулися зміни, які завдяки відновленню були збережені у другий файл.
Оскільки ці зміни фіксуються у другому файлі, ви можете видалити файл swap та перезаписати вихідний файл другим:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
У цей момент відкрийте оригінальний файл і продовжуйте так, ніби ніколи не було проблем:
vim notes
Це здається великою роботою, але як тільки ти звикнеш до робочого процесу, це займає приблизно 20 секунд.