Это сообщение на самом деле очень важно, если вы заботитесь о том, чтобы не потерять текст, который вы потенциально не сохранили. Это не должно считаться раздражающим и не должно вызывать поспешного удаления файла подкачки или настройки запуска vim
без него.
Любой файл, который вы редактируете с помощью vim
будет иметь соответствующий файл подкачки во время редактирования, который vim
использует для отслеживания изменений. Когда вы выходите из режима редактирования файла, vim
автоматически удаляет соответствующий файл подкачки. Следовательно, наличие файла подкачки и ваша попытка перезаписать исходный файл должны стать поводом для рассмотрения и принятия соответствующих мер.
Два сценария, представленные в сообщении (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 секунд.