Шпаргалка по командам vi в Linux | 3 режима Vim и визуальный режим

Открыть vi и обнаружить, что набранный текст не появляется, или закрыть окно, не зная, как выйти, — с этим хотя бы раз сталкивается каждый, кто впервые работает с сервером. Команда vi в Linux разделяет нормальный режим и режим вставки, поэтому достаточно понимать, в каком режиме вы сейчас, — дальше хватит нескольких клавиш. В этой статье три режима и команды для каждого из них сведены в таблицы, а на виртуальном сервере в браузере vi можно попробовать самому.
В AlmaLinux 9.8 и vi, и vim входят в пакет vim 8.2; экраны и сообщения в этой статье получены в vim. Если vim не установлен, установите его командой [dnf -y install vim-enhanced].
✅ Три режима vi
В vi одна и та же клавиша делает разное в зависимости от режима. Файл открывается в нормальном режиме; клавишей i вы переходите в режим вставки и набираете текст, клавишей Esc возвращаетесь, а двоеточием [:] переходите в режим последней строки, чтобы сохранить файл и выйти.
| Режим | Клавиша для входа | Назначение |
|---|---|---|
| Нормальный режим | В этом режиме открывается vi · Esc из любого другого режима | Перемещение курсора, удаление, копирование, вставка, отмена |
| Режим вставки | i a I A o O | Ввод текста. Внизу экрана — [-- INSERT --] |
| Режим последней строки | : | Сохранение, выход, замена, настройка номеров строк. Внизу экрана появляется : |
| Визуальный режим | v V Ctrl-v | Выделение диапазона, затем удаление, копирование или ввод сразу во все строки |
Открыть файл из консоли можно тремя способами.
| Команда | Описание |
|---|---|
| vi имя_файла | Открывает файл в нормальном режиме. Если файла нет, создаёт новый и показывает [New] |
| vi +20 имя_файла | Открывает файл с курсором на строке 20 |
| view имя_файла= vi -R | Открывает только для чтения. При правке — предупреждение [W10], при сохранении — [E45] |
Если ввести [vi httpd.conf] на виртуальном сервере ниже, откроется vi, а левое меню сменится командами внутри vi. Нажатие на чип вводит эту клавишу на экране, можно набирать и с клавиатуры.
✅ Шпаргалка по командам vi в Linux
🔲 Перемещение курсора
| Клавиша | Описание |
|---|---|
| h j k l← ↓ ↑ → | Перемещение на один символ. Работают и клавиши со стрелками |
| 0 · ^ | Начало строки (0) · первый непробельный символ строки (^) |
| $ | Конец строки |
| w · b · e | Начало следующего слова · начало предыдущего слова · конец следующего слова |
| gg · G | Первая · последняя строка файла |
| 20Gто же, что :20 | На строку 20. Замените число, чтобы перейти на нужную строку |
| H · M · L | Верхняя · средняя · нижняя строка экрана |
| Ctrl-f · Ctrl-b | На экран вниз · вверх |
| Ctrl-d · Ctrl-u | На полэкрана вниз · вверх |
🔲 Переход в режим вставки
Какой бы клавишей вы ни вошли в режим вставки, закончив ввод, нажмите Esc. cw, cc, C и s удаляют текст и сразу переводят в режим вставки, поэтому исправить слово или строку так быстрее, чем нажимать x и i по отдельности.
| Клавиша | Описание |
|---|---|
| i · a | Начать ввод перед курсором (i) · после курсора (a) |
| I · A | Начать ввод в начале (I) · в конце (A) строки |
| o · O | Создать пустую строку ниже (o) · выше (O) и начать ввод |
| cw | Удалить от курсора до конца слова и начать ввод |
| cc | Удалить всю строку и начать ввод |
| C | Удалить от курсора до конца строки и начать ввод |
| s | Удалить один символ и начать ввод |
| Esc | Закончить ввод и вернуться в нормальный режим |
🔲 Удаление и правка
Если после d указать клавишу перемещения, удалится соответствующий диапазон: dw — слово, dd — строка, dG — всё до конца файла, а если поставить впереди число, действие повторится столько раз.
| Клавиша | Описание |
|---|---|
| x · X | Удалить символ под курсором (x) · перед курсором (X). 3x — три символа |
| dw | Удалить от курсора до конца слова |
| dd | Удалить строку. 3dd — три строки |
| D= d$ | Удалить от курсора до конца строки |
| d0 | Удалить от начала строки до курсора |
| dG | Удалить от текущей строки до конца файла |
| :6d · :6,10d | Удалить строку 6 · удалить строки 6–10 |
| J | Присоединить следующую строку к концу текущей |
| r | Заменить символ под курсором следующим набранным символом |
| ~ | Сменить регистр |
| >> · << | Увеличить · уменьшить отступ строки |
🔲 Копирование, вставка и отмена
Удалённое, как и скопированное, можно вставить клавишей p, поэтому если нажать dd, а затем p, строка переместится вниз. u позволяет отменить несколько изменений подряд, а Ctrl-r снова выполняет отменённое.
| Клавиша | Описание |
|---|---|
| yy | Скопировать строку. 3yy — три строки |
| yw | Скопировать от курсора до конца слова |
| p · P | Вставить скопированное ниже (p) · выше (P). Если копировались символы — после · перед курсором |
| :1 co 7то же, что :1 t 7 | Скопировать строку 1 под строку 7 |
| :1,7 co 8 | Скопировать строки 1–7 под строку 8 |
| :1 m 8 | Переместить строку 1 под строку 8 |
| u | Отменить. При повторных нажатиях отмена продолжается |
| Ctrl-r | Повторить отменённое |
| . | Повторить последнее изменение |
🔲 Поиск и замена
Замена выполняется в режиме последней строки. Без диапазона она касается только текущей строки, с [%] — всего файла, а без g в конце в каждой строке меняется только первое совпадение.
| Клавиша | Описание |
|---|---|
| /строка | Поиск вниз от курсора. Дойдя до конца, поиск продолжается с начала: [search hit BOTTOM, continuing at TOP] |
| ?строка | Поиск вверх от курсора |
| n · N | Следующее совпадение в том же направлении (n) · в обратном (N) |
| * | Поиск вниз слова под курсором |
| :s/old/new/ | Первое old в текущей строке — на new |
| :s/old/new/g | Все old в текущей строке — на new |
| :%s/old/new/g | Все old во всём файле — на new |
| :10,20s/old/new/g | Все old в строках 10–20 — на new |
| :%s/old/new/gc | Замена с подтверждением каждого совпадения (y — заменить · n — пропустить · a — все · q — прекратить) |
🔲 Сохранение, выход и номера строк
| Клавиша | Описание |
|---|---|
| :w | Сохранить. По завершении — [36L, 1094B written] |
| :w имя_файла | Сохранить под другим именем. Исходный файл не меняется |
| :wq= :x = ZZ | Сохранить и выйти |
| :q | Выйти. Если есть несохранённые изменения — [E37: No write since last change] |
| :q! | Выйти без сохранения |
| :set nu · :set nonu | Показать · скрыть номера строк |
✅ Комментирование столбца в режиме визуального блока Vim
Чтобы вставить одинаковый текст в начало нескольких строк, вместо нажатия i в каждой строке используйте режим визуального блока. В нормальном режиме v выделяет по символам, Shift-v — по строкам, а Ctrl-v — по столбцам.
Вот как закомментировать целый блок конфигурационного файла. Поставьте курсор на первый символ первой строки, нажмите Ctrl-v, спуститесь клавишей j, выделяя строки, затем нажмите I, введите # и нажмите Esc.



Снять комментарии можно так же. Встаньте на # первой строки, выделите вниз через Ctrl-v и нажмите x — выделенный столбец удалится за один раз. Это можно повторить прямо на файле vhost.conf в симуляторе выше.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.