Начинающие пользователи Linux знают что происходит после запуска текстового редактора Vim. Практически все испытывают сложности с выходом. Стандартные методы не срабатывают, зачастую всё заканчивается перезагрузкой.
Vim (сокр. от Vi Improved)— свободный текстовый редактор, созданный на основе более старого vi, разработанного Биллом Джойем. Автор Vim’а, Брам Моленар, создал его в 1991 году.
Vim кажется сложным, но именно его используют системные администраторы, DevOps-инженеры и разработчики по всему миру. Причина сложного освоения: неинтуитивность. В отличие от софта, в котором всё направлено на интуитивность, легкость, дружелюбность, Vim больше ориентирован на эффективность и перед освоением требует обучения. Обучиться можно самостоятельно, используйте vimtutor.
vimtutor ruПервое что нужно освоить - выход.

Сразу все команды запоминать не нужно, вы запомните их со временем. Для начала научитель выходить из программы.
Выход
Обычный выход
- Нажмите клавишу <ESC> для того, чтобы удостовериться, что вы в обычном режиме (Normal mode).
- Наберите:
:q! <ENTER>. Это означает, что вы должны набрать три символа:q!и нажать клавишу
ввод. Это позволит вам выйти из редактора БЕЗ СОХРАНЕНИЯ любых сделанных изменений.
Команды выхода
:q — выйти, только если нет несохранённых изменений
:wq — сохранить текущий открытый файл и выйти из Vim (даже если файл не изменился)
:x — выйти из Vim, но сохранять только только если были внесены изменения
ZZ — эквивалентно :x, обратите внимание, что нет :, это нажатие клавиши
:q! — выйти из Vim без сохранения открытого файла
:qa — закрыть все открытые файлы в текущей сессии Vim
:qa! — принудительный выход сразу из всех файлов без сохранения изменений
:wqa — сохранить все открытые файлы и выйти из Vim
:cq 42 — эта команда не только завершает работу, но и возвращает оболочке ненулевой код ошибки
Сохранение файла
:w — сохранить текущий открытый файл (даже если файл не изменился)
:w file.txt — сохранить текущий открытый файл как file.txt
:w! file.txt — сохранить файл как file.txt с возможностью перезаписи
:sav file.txt — сохранить текущий буфер как новый файл file.txt
:up[date] file.txt — аналогично :w, но сохраняется только при изменении буфера
Экзотические способы
Перезагрузить компьютер. Закрыть SSH сессию. Нажать REISUB. Выдернуть шнур питания.
Если вы случайно запустили Vim в режиме Easy Mode (например, vim -y), обычный Esc для выхода из режима вставки не работает. В этом режиме нужно использовать специальное сочетание Ctrl-L, чтобы вернуться в нормальный режим и затем выйти.
Существует продвинутый способ управлять Vim из терминала с помощью JSON API. Можно отправить специальную escape-последовательность, которая заставит Vim выполнить команду, например, drop для открытия файла. Однако этот способ работает не везде (например, может не работать в Windows Terminal) и требует знаний о терминальных протоколах.
Запустить Vim в screen или tmux. Тогда выход не нужен, просто завершаете открытую сессию.
Запустить Vim из другой команды, например, из mc.
Не прощаться с Vim, а убить его из другого терминала.
:!exec bash — заменить Vim на оболочку, это просто магия, как телепортация.
:python3 import vim; vim.command("qa!") — запустить в Vim скрипт, который выполнит выход за вас.
:!kill -15 $$ — выстрел в VIm изнутри Vim. Если Vim запущен не как дочерний процесс, это может закрыть весь терминал целиком.
:call setreg('*', "\<Esc>:qa!\<CR>") — через системный буфер обмена.
:let timer_id = timer_start(5000, {-> execute('qa!')}) — по таймеру.
:!kill -HUP $PPID — убить родительскую команду. Аккуратнее с этим.
Через внешний сигнал:
# В терминале
mkfifo /tmp/vim_exit_pipe
#В Vim
:silent! read /tmp/vim_exit_pipe | qa!
#из другого терминала напишите:
echo "bye" > /tmp/vim_exit_pipeПризвать OOM:
:r /dev/zero или :let g:big = repeat('x', 10**9).
И это не всё, ещё есть способы.
