В чем разница между «выйти» и «прервать»?

23

Когда я пытаюсь открыть файл из нескольких экземпляров vim, я получаю сообщение об ошибке с несколькими вариантами:

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

В чем разница между «Quit» и «Abort»?

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

Kevin
источник
2
Есть :help swap-exists-choicesответ на ваш вопрос?
FDinoff
@FDinoff это помогает, но я все еще не совсем понимаю, что такое «Отмена». «также прервать дальнейшие команды. Это полезно при загрузке скрипта, который редактирует несколько файлов» - Предполагается, что «дальнейшие команды» происходят из скрипта vim? Действительно ли для сценария vim достаточно часто открывать новые буферы, что вызывает озабоченность?
Кевин

Ответы:

20

Попробуйте это: запустить vim file1в терминале, затем запустить vim -p file1 file2в другом терминале. Вторая команда предложит вам, как указано выше. Если вы ответите Quit, вы все равно можете редактировать file2. Если вы отвечаете, Abortвы просто выходите из Vim, тем самым «прерывая дальнейшие команды».

lcd047
источник
Так есть ли разница только при открытии во вкладках или разделенных окнах ( -p/ -o/ -O)? Просто используйте vim file1 file2выходы как при выходе, так и при прерывании, когда файл1 редактируется; и когда файл2 редактируется, приглашение не появляется до следующего нажатия, и в этом случае и выход, и прерывание просто возвращаются в файл1.
Кевин
1
Вы не понимаете Открытие файлов - это, по сути, последовательность команд. vim file1 file2выполняет две функции: устанавливает аргументы (с помощью которых вы можете получить доступ argv()) и загружает первый файл в буфер. Второй файл фактически загружается только при запуске :n(или подобном). Когда Vim запросит у вас аргументы, они уже заданы, поэтому, если у вас Quitв этот момент не осталось «дальнейших» команд для выполнения. Кроме того, другие вещи также считаются командами, fi autocmds и команды, установленные с vim -c. Вы должны думать обо всем этом с точки зрения команд, а не с точки зрения затронутых файлов.
lcd047
4

@FDinoff предложил проверить справку vim . На случай, если кто-то захочет увидеть это проще:

WHAT TO DO?                                     *swap-exists-choices*

If dialogs are supported you will be asked to select one of five choices:

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

O  Open the file readonly.  Use this when you just want to view the file and
   don't need to recover it.  You might want to use this when you know someone
   else is editing the file, but you just want to look in it and not make
   changes.

E  Edit the file anyway.  Use this with caution!  If the file is being edited
   in another Vim, you might end up with two versions of the file.  Vim will
   try to warn you when this happens, but better be safe then sorry.

R  Recover the file from the swap file.  Use this if you know that the swap
   file contains changes that you want to recover.

Q  Quit.  This avoids starting to edit the file.  Use this if there is another
   Vim editing the same file.
      When you just started Vim, this will exit Vim.  When starting Vim with
   files in several windows, Vim quits only if there is a swap file for the
   first one.  When using an edit command, the file will not be loaded and you
   are taken back to the previously edited file.

A  Abort.  Like Quit, but also abort further commands.  This is useful when
   loading a script that edits several files, such as a session with multiple
   windows.

D  Delete the swap file.  Use this when you are sure you no longer need it.
   For example, when it doesn't contain changes, or when the file itself is
   newer than the swap file.
      On Unix this choice is only offered when the process that created the
   swap file does not appear to be running.

Насколько я могу судить, abort используется, когда вы используете vim для проверки нескольких файлов, например:

vim file1.txt file2.txt

Если первый заблокирован и вы вызываете quit, он переходит к file2.txt, тогда как abort полностью вылетает из приложения.

AJFaraday
источник