Это сообщение на самом деле очень важно, если вы заботитесь о том, чтобы не потерять текст, который вы потенциально не сохранили. Это не должно считаться раздражающим и не должно вызывать поспешного удаления файла подкачки или настройки vim
его работы без него.
Любой файл, который вы редактируете, vim
будет иметь соответствующий файл подкачки во время редактирования , который будет vim
использоваться для отслеживания изменений. При выходе из редактирования файла vim
автоматически удаляется соответствующий файл подкачки. Следовательно, наличие файла подкачки и ваша попытка перезаписать исходный файл должны стать причиной для рассмотрения и принятия соответствующих мер.
Два сценария, представленные в message ( E325: ATTENTION Found a swap file
), на самом деле довольно распространены: (1) либо другая vim
программа редактирует тот же файл, который вы пытаетесь редактировать (это может быть другой человек - в этом случае это действительно не имеет смысла) просто слепо удалить файл подкачки - или это может быть вы в другом окне терминала или вкладке), или (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
ничего не возвращается , это означает, что разницы нет, и можно безопасно удалить как файл подкачки, так и второй файл:
rm .notes.swp notes2
На этом этапе откройте исходный файл и действуйте так, как будто никогда не было проблем:
vim notes
Если что- diff
то возвращает , это означает, что исходный файл (через файл подкачки) имел изменения, которые, благодаря восстановлению, были сохранены во второй файл.
Поскольку эти изменения записаны во втором файле, вы можете безопасно удалить файл подкачки и перезаписать исходный файл вторым:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
На этом этапе откройте исходный файл и действуйте так, как будто никогда не было проблем:
vim notes
Это кажется большой работой, но как только вы привыкнете к рабочему процессу, это займет максимум 20 секунд.