Это сообщение на самом деле очень важно, если вы заботитесь о том, чтобы не потерять текст, который вы потенциально не сохранили. Это не должно считаться раздражающим и не должно вызывать поспешного удаления файла подкачки или настройки 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 секунд.
vim -n file_name
Вставленное сообщение говорит о том, что у вас по-прежнему открыт файл "notes" в другом сеансе Vim. Это определенно не очень хорошая идея редактировать файл, который редактируется в другом месте.
Если это сообщение неверно, вам нужно определить, как неправильно завершился сеанс Vim, и избегать этого в будущем.
Что касается восстановления, это может быть проблемой в этом случае, так как «notes» новее, чем связанный с ним файл Vim .swp, но вы все равно можете попробовать. Просто убедитесь, что вы сначала скопировали файл «Заметки» в резервное хранилище.
Было бы неплохо прочитать "
:help recover.txt
".Урок здесь состоит в том, что вы не должны видеть это сообщение, и что вы имеете в виду что-то где-то пошло не так. Это (вероятно) не вина Вима.
Если на этом этапе вы по-прежнему абсолютно не хотите, чтобы Vim создавал файлы .swp, чтобы вы могли восстановиться после сбоев и других связанных с этим проблем, вы можете указать "
set noswapfile
" в~/.vimrc
.источник
Вы можете использовать -n, чтобы открыть vim без использования файла подкачки :
Чтобы сделать это все время, просто поставьте
в вашем файле .bashrc или .bash_aliases
если вам когда-либо понадобится запустить vim без опции -n, просто запустите
источник
vim удалит сгенерированный файл .swp при правильном выходе из него.
источник
Используйте опцию коротких сообщений в вашем
~/.vimrc
:Что также является значением по умолчанию при работе в режиме POSIX.
Однако не делайте этого : это все равно, что снимать подушки безопасности вашего автомобиля, чтобы повысить эффективность использования топлива. В конечном итоге вы потратите больше времени на восстановление, чем когда-либо отвечая на вопрос.
источник
:e
чтобы увидеть , что произошло ( в том числе быстрый ,u
чтобы отменить спиной к тому , что Я имел в буфере.) Мне нравится это намного лучше, чем ворчание о том, что у меня уже есть открытый файл.Это случилось со мной, когда мой терминал неожиданно закрыл мое соединение с открытым vi.
К счастью, я не потерял никаких изменений.
process ID: 2251 (still running)
, в данном случае это 2251ps 2251
kill 2251
Вот и все.
Помните, что для защиты вас существуют файлы подкачки, и вам не следует полностью их отключать.
источник
vi(m)
процесса?Я решил эту проблему в три простых шага:
1 :) Запустите "ls -la" там, где файл существует, чтобы вы могли просмотреть файл .swp для него.
2 :) Теперь "rm -i * .swp", т.е. удалите файл ".swp" из каталога.
3 :) Теперь подтвердите, был ли удален файл .swp.
4 :) Теперь наслаждайтесь этими предупреждениями.
источник
rm -rf
какой стати вы бы предложили удалить файл? Я заменил-rf
на более толковый-i