Linux vim save and exit

Как выйти из Vim: руководство по сохранению файлов и командам выхода

Перевод статьи «How to Exit Vim – Vim Save and Quit Command Tutorial».

Я пользуюсь Vim с тех самых пор, как стал учиться программированию. Во всех других редакторах и IDE я сразу же ставлю плагин Vim.

Конечно, я знаю, что работа с Vim с непривычки может быть трудна. В этой статье мы рассмотрим некоторые основные концепции, касающиеся работы с этим редактором, и одну из базовых тем: как выйти из Vim.

Я также буду указывать команды, с помощью которых можно открыть документацию редактора по той или иной теме. Для просмотра справки нужно сначала нажать ESC, затем запустить предложенную команду, например, :h vim-modes , и нажать Enter.

TL;DR – Как выйти из Vim

  1. Нажмите ESC один раз (иногда — два).
  2. Убедитесь, что у вас включена английская раскладка.
  3. Далее все зависит от вашей текущей ситуации и намерений:
  • Если вы не вносили никаких изменений в файл, введите :q и нажмите Enter/return
  • Если вы внесли изменения и хотите их сохранить, введите :wq и нажмите Enter/return
  • Если вы внесли изменения, но не хотите их сохранять, введите :q! и нажмите Enter/return

Ну а если вы хотите разобраться во всем этом подробнее, читайте дальше!

Что из себя представляют режимы Vim?

В Vim есть семь базовых режимов и семь дополнительных, которые считаются вариациями базовых. Если хотите узнать об этом подробнее, можете зайти в Vim и запустить :h vim-modes , чтобы почитать документацию.

К счастью, чтобы приступить к работе с редактором, все 14 режимов знать не обязательно. Но о трех знать все же следует. Это нормальный режим, режим вставки и режим командной строки.

Что такое нормальный режим Vim?

Нормальный режим имеет огромное значение. Именно в этом режиме мы можем запускать команды (есть исключения, но в этой статье мы не будем их рассматривать).

Скажем, если мы хотим почитать документацию по режимам (vim-modes), прежде чем вводить команду :h vim-modes , нам сперва нужно убедиться, что мы в настоящий момент находимся в нормальном режиме. Самый каноничный способ входа в нормальный режим — нажатие клавиши ESC. Даже если вы уже в нормальном режиме, нажатие ESC вас из него не выбросит, не переживайте.

Документация по режимам: :h Normal , :h mode-switching .

Что такое режим вставки?

Мы используем режим вставки для редактирования текущего файла (в Vim он обычно рассматривается как buffer). По умолчанию при открытии файла мы попадаем в нормальный режим. Если нужно внести изменения в файл, сначала нужно переключиться в режим вставки.

Самый обиходный способ для переключения — пребывая в нормальном режиме, поставить курсор в то место, где хотите редактировать, и нажать i .

Читайте также:  Как включить ipv6 в linux

Но есть и другие способы войти в режим вставки. Кроме i , можно нажать o , O , a , A , I и др.

Почитать подробнее можно в документации: :h Insert , :h i_ , :h o , :h O , :h a , :h A , :h I .

Что такое режим командной строки?

Режим командной строки обычно временный, он используется для запуска «Ex-команд» (не путать с командами в нормальном режиме!).

Любопытный факт: название Vim образовано от «Vi Improved» («улучшенный Vi»). Сам этот редактор создан на базе редактора vi. А вот vi создан на основе текстового редактора ex. И vi, и ex были созданы Биллом Джоем.

Еще один любопытный факт для пользователей macOS: в системах macOS есть только Vim, а команда vi — ссылка на vim.

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

Для возврата в нормальный режим нужно нажать клавишу ESC.

Подробнее читайте в документации: :h Command-line , :h cmdline-lines .

Как выйти из Vim

Для выхода из редактора Vim используется команда quit («выход»). Если вы заглянете в документацию :h quit , вы заметите, что перед quit стоит двоеточие. Это означает, что quit используется в режиме командной строки.

Чтобы войти в режим командной строки, сперва нужно убедиться, что вы находитесь в нормальном режиме, а затем просто набрать двоеточие. Теперь, перейдя в режим командной строки, можно просто набрать quit и нажать Enter или return.

Вероятно, вы также заметили в документации команду :q . Это сокращенная версия команды :quit . То есть выйти можно и выполнив :q .

Однако, стоит заметить, что если вы внесли какие-либо изменения в файл, такой метод выхода не сработает.

В таком случае нужно использовать команду :wq , которая означает «записать и выйти» («write and quit»).

Соответствующую документацию можно почитать, выполнив команду :h :wq .

Есть еще одна команда для выхода — 😡 . Она практически аналогична :wq . Согласно документации ( :h 😡 ), команда работает, «как :wq , но выполняет запись, только если в файле что-то изменилось».

Разница в том, что :wq сохраняет файл в любом случае, хоть меняли вы что-то в этом файле, хоть нет. А команда 😡 не будет сохранять файл, если изменений не было. Суть здесь в изменении времени модификации файла. При выполнении команды :wq время модификации точно изменится, а при выполнении 😡 — только если на самом деле были внесены какие-го правки.

Бывает, что нам вовсе не нужно сохранять сделанные изменения. Для этих случаев есть команда :q! . Восклицательный знак как бы превращает команду выхода в команду принудительного выхода.

Имейте в виду, что при вводе этой команды вы потеряете все внесенные изменения и у вас практически не будет шансов их восстановить.

Проблемы выхода из Vim и как их решать

Что, если я не хочу переходить в режим командной строки?

Можно нажать ZZ или ZQ , находясь в нормальном режиме. ZZ — то же самое, что 😡 , а ZQ — то же, что :q! .

ZZ и ZQ считаются командами нормального режима, а 😡 и :q! — Ex-командами.

Читайте также:  Linux operating system language

Что, если :wq не сработает?

Вот это, кстати, вполне возможно, если вы открыли файл, который имеете право только читать, или если у файла нет имени.

Имейте в виду, что если файл доступен только для чтения, Vim не запрещает вам открыть его и работать с ним. Единственное — у вас не получится сохранить изменения и выйти при помощи :wq и даже :wq! .

Вы можете распрощаться со всеми своими изменениями и просто выйти из файла, выполнив :q! , а затем зайти снова (предварительно введя sudo ) и заново внести все нужные правки.

Также можно сохранить этот файл в директории, где у вас есть права записи, например, в своей домашней или даже в /tmp . После этого можно будет переместить этот файл в ту директорию, где у вас не было прав записи.

Чтобы это все проделать, выполните команду :w ~/my-backup-file . Файл сохранится в домашней директории. Затем при помощи команды mv переместите файл в нужное место.

Обратите внимание: так же следует поступать, когда Vim жалуется на отсутствие имени у файла.

Есть еще одно решение. Можно запустить команду :w !sudo tee % .

Здесь !sudo означает запуск команды sudo в вашей оболочке.

Например, команда :ls выведет список всех буфферов (открытых файлов) в Vim, а вот :!ls запустит команду ls из оболочки и отобразит результат.

tee копирует из стандартного ввода (stdin) в стандартный вывод (stdout).

% означает имя текущего файла.

Таким образом, мы можем использовать команду sudo из оболочки, скопировать содержимое текущего файла из Vim (в модифицированном виде) и перенаправить модифицированный контент в тот же файл (он указан путем использования % ).

~ :w !sudo tee % [sudo] password for stibbons: TL;DR – Как выйти из Vim 1. Нажмите ESC один раз (иногда - два). 2. Убедитесь, что у вас включена английская раскладка. 3. Далее все зависит от вашей текущей ситуации и намерений: ◦ Если вы не вносили никаких изменений в файл, введите :q и нажмите Enter/return ◦ Если вы внесли изменения и хотите их сохранить, введите :wq и нажмите Enter/return ◦ Если вы внесли изменения, но не хотите их сохранять, введите :q! и нажмите Enter/return W12: Warning: File "exit.txt" has changed and the buffer was changed in Vim as well See ":help W12" for more info. [O]K, (L)oad File:

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

Вы можете просто нажать Enter, потому что это внешнее изменение вы сделали намеренно.

Также вы можете заметить, что над предупреждением показывается содержимое измененного файла. Это нормально. Если не хотите это видеть, можете дополнить команду перенаправлением stdout в null :w !sudo tee% >/dev/null .

Что, если я заблудился и мне нужно немедленно выйти?

Если вы попытаетесь привычно нажать control + c , Vim покажет сообщение:

Type :qa! and press to abandon all changes and exit Vim

Но вы можете это обойти, нажав Ctrl + Alt + Delete в Windows или Force Quit… в macOS.

Когда вы в следующий раз откроете этот файл, вы, по идее, увидите это (я использую файл foo.txt в качестве примера):

Found a swap file by the name ".foo.txt.swp" owned by: stibbons dated: Fri Jun 25 00:42:16 2021 [cannot be read] While opening file "foo.txt" dated: Fri Jun 25 00:38:00 2021 (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 foo.txt" to recover the changes (see ":help recovery"). If you did this already, delete the swap file ".foo.txt.swp" to avoid this message.

Без паники! Это нормально. Vim пытается помочь вам восстановить ценные изменения, которые вы, возможно, потеряли.

Читайте также:  Segmentation fault error in linux

Проверив текущую директорию, вы найдете в ней скрытый файл с расширением .swp. Это swap-файл. Документацию можно посмотреть, введя команду :h swap-file.

Если нажать R для восстановления, мы увидим следующее:

Нажав Enter, вы увидите, что сделанные ранее изменения вернулись. После завершения процесса восстановления вы можете просто удалить файл .swp, чтобы сообщение об ошибке больше не выводилось.

Заключение

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

Источник

How to Exit a File in Vi / Vim Editor in Linux

In this article, we will learn how to exit Vi/Vim (after referred to as Vim) text editor using simple commands. In a previous article, we explained a simple tip on how to save a file in Vi or Vim after making changes to a file.

Before we move any further, if you are new to Vim, then we recommend reading through these 10 reasons why you should stick to using Vi/Vim text editor in Linux.

To open or create a new file using Vi/Vim, simply type the commands below, then press i to switch to insert mode (insert text):

$ vim file.txt OR $ vi file.txt

Press

After making changes to a file, press [Esc] to shift to the command mode and press :w and hit [Enter] to save a file.

Save File in Vim

To exit Vi/Vim, use the :q command and hit [Enter] .

Exit File in Vi Editor

To save a file and exit Vi/Vim simultaneously, use the :wq command and hit [Enter] or 😡 command.

Save and Exit File in Vi

If you make changes to a file but try to quite Vi/Vim using ESC and q key, you’ll receive an error as shown in the scrrenshot below.

Vi Error Quitting File

To force this action, use ESC and :q! .

Force Quit Vi File in Linux

Additionally, you can use shortcut methods. Press the [Esc] key and type Shift + Z Z to save and exit or type Shift+ Z Q to exit without saving the changes made to the file.

Having learned the above commands, you can now proceed to learn advanced Vim commands from the links provided below:

In this article, we learned how to exit Vim text editor using simple commands. Do you have any questions to ask or any thoughts to share? Please, use the feedback form below.

Источник

Оцените статью
Adblock
detector