- Как выйти из Vim: руководство по сохранению файлов и командам выхода
- TL;DR – Как выйти из Vim
- Что из себя представляют режимы Vim?
- Что такое нормальный режим Vim?
- Что такое режим вставки?
- Что такое режим командной строки?
- Как выйти из Vim
- Проблемы выхода из Vim и как их решать
- Что, если я не хочу переходить в режим командной строки?
- Что, если :wq не сработает?
- Что, если я заблудился и мне нужно немедленно выйти?
- Заключение
- How to Exit (Quit) Linux Vim/Vi editor
- Exit Vim in Terminal
- Exit Vim Using a Shortcut Key
- More Command Options to Quit Vim
Как выйти из Vim: руководство по сохранению файлов и командам выхода
Перевод статьи «How to Exit Vim – Vim Save and Quit Command Tutorial».
Я пользуюсь Vim с тех самых пор, как стал учиться программированию. Во всех других редакторах и IDE я сразу же ставлю плагин Vim.
Конечно, я знаю, что работа с Vim с непривычки может быть трудна. В этой статье мы рассмотрим некоторые основные концепции, касающиеся работы с этим редактором, и одну из базовых тем: как выйти из Vim.
Я также буду указывать команды, с помощью которых можно открыть документацию редактора по той или иной теме. Для просмотра справки нужно сначала нажать ESC, затем запустить предложенную команду, например, :h vim-modes , и нажать Enter.
TL;DR – Как выйти из Vim
- Нажмите ESC один раз (иногда — два).
- Убедитесь, что у вас включена английская раскладка.
- Далее все зависит от вашей текущей ситуации и намерений:
- Если вы не вносили никаких изменений в файл, введите :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 .
Но есть и другие способы войти в режим вставки. Кроме 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-командами.
Что, если :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 пытается помочь вам восстановить ценные изменения, которые вы, возможно, потеряли.
Проверив текущую директорию, вы найдете в ней скрытый файл с расширением .swp. Это swap-файл. Документацию можно посмотреть, введя команду :h swap-file.
Если нажать R для восстановления, мы увидим следующее:
Нажав Enter, вы увидите, что сделанные ранее изменения вернулись. После завершения процесса восстановления вы можете просто удалить файл .swp, чтобы сообщение об ошибке больше не выводилось.
Заключение
В этой статье мы рассмотрели некоторые базовые вещи относительно режимов Vim, а также подробно разобрали, как можно выйти из этого редактора. Также мы научились разрешать распространенные проблемы, связанные с выходом из Vim.
How to Exit (Quit) Linux Vim/Vi editor
Vim is a Linux text editor based on the older Vi editor. Vim is an enhanced version of Vi; many commands work for both Vi and Vim.
This guide will show you how to exit in the terminal or using a shortcut key.
Note: Some Linux distributions, such as Ubuntu 18.04 and 20.04, may come with the minimal version of Vim installed. Follow our guide to install the full version of Vim on Ubuntu.
- A Linux system
- Access to a terminal window / command line (Activities > Search > Terminal)
- A user account with sudo or root privileges (editing some files may require elevated privileges)
Note: If you need a test file for practicing, open a terminal window and enter vim test.txt . Next, press the letter i to switch to insert mode and type a few lines of text.
Exit Vim in Terminal
To issue commands in Vi/Vim, switch to command mode.
1. Press the Esc key.
2. You should see the ––INSERT–– label vanish from the lower-left.
3. To save your changes before you exit, type :w , and then Enter. This will save any changes made. Vim will respond by outputting the filename, whether it’s new, and how many characters were written to the hard drive.
4. To exit Vi/Vim, type :q and hit Enter.
Note: Want to personalize your Vim interface and add syntax highlighting? Learn How to Change and Use Vim Color Schemes.
Exit Vim Using a Shortcut Key
In addition to command mode, Vim also has the option for shortcut keys:
- To save a file in Vim and exit, press Esc >Shift + ZZ
- To exit Vim without saving, press Esc > Shift + ZX
More Command Options to Quit Vim
Here’s a list of commands for quitting Vim:
- Esc – switch to command mode
- :w – write out changes that were made
- :q – exit Vim
- :q! – exit Vim and discard any changes
- :wq – saves the changes, and exits Vim
- : x – save the changes made, and exits Vim
Note: Make sure to type a colon ( : ) first to signify a command. Use the Enter key to activate it.
You should now have several methods to exit Vi/Vim text editor. Next, learn other essential Vim commands.