41

Как избавиться от надоедливых предупреждений при открытии файла с файлом .swp? Или как вообще не генерировать файлы .swp? Пример предупреждения:

E325: ATTENTION
Found a swap file by the name ".notes.swp"
          owned by: james   dated: Fri Dec  3 17:38:07 2010
         file name: ~james/school/se/project-dir/rottencucumber/doc/notes
          modified: no
         user name: james   host name: james-laptop
        process ID: 2251 (still running)
While opening file "notes"
             dated: Fri Dec  3 18:46:10 2010
      NEWER than swap file!

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r notes"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".notes.swp"
    to avoid this message.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

7 ответов7

41

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

19

Вставленное сообщение говорит о том, что у вас по-прежнему открыт файл "notes" в другом сеансе Vim. Это определенно не очень хорошая идея редактировать файл, который редактируется в другом месте.

Если это сообщение неверно, вам нужно определить, как неправильно завершился сеанс Vim, и избегать этого в будущем.

Что касается восстановления, это может быть проблемой в этом одном экземпляре, поскольку "notes" новее, чем связанный с ним файл Vsw .swp, но вы все равно можете попробовать. Просто убедитесь, что вы сначала скопировали файл "Заметки" в папку резервной копии.

Было бы неплохо прочитать " :help recover.txt ".

Урок здесь заключается в том, что вы не должны видеть это сообщение, и что вы имеете в виду что-то где-то пошло не так. Это (вероятно) не вина Вима.

Если на этом этапе вы все еще абсолютно не хотите, чтобы Vim создавал файлы .swp, чтобы вы могли восстановиться после сбоев и других связанных с этим проблем, вы можете поместить « set noswapfile » в ~/.vimrc .

10

Вы можете использовать -n, чтобы открыть vim без использования файла подкачки:

Чтобы делать это все время, просто поставьте

alias vim='vim -n' 

в вашем файле .bashrc или .bash_aliases

если вам когда-нибудь понадобится запустить vim без опции -n, просто запустите

\vim
2

vim удалит сгенерированный файл .swp при правильном выходе из него.

1

Это случилось со мной, когда мой терминал неожиданно закрыл мое соединение с открытым vi.

К счастью, я не потерял никаких изменений.

Чтобы удалить это предупреждение и отменить обмен:

  1. Найдите идентификатор процесса, глядя на process ID: 2251 (still running) , в данном случае это 2251
  2. Убедитесь, что вы получили правильный идентификатор ps 2251
  3. Убить процесс, используя kill 2251

И это все.

Помните, что для защиты вас существуют файлы подкачки, и вам не следует полностью их отключать.

0

Как избавиться от надоедливых предупреждений при открытии файла с файлом .swp?

Используйте опцию коротких сообщений в вашем ~/.vimrc:

set shortmess=A

Что также является значением по умолчанию при работе в режиме POSIX.

Однако не делайте этого: это похоже на удаление подушек безопасности вашего автомобиля для повышения эффективности использования топлива. В конечном итоге вы потратите больше времени на восстановление, чем когда-либо отвечая на вопрос.

-2

Я решил эту проблему в три простых шага:

1:) Запустите "ls -la" там, где файл существует, чтобы вы могли просмотреть файл .swp для него.

2:) Теперь "rm -i * .swp", т.е. удалите файл ".swp" из каталога.

3:) Теперь подтвердите, был ли удален файл .swp.

4:) Теперь наслаждайтесь этими предупреждениями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .