Vi/Vim для начинающих: режимы, навигация и базовое редактирование
Практическое введение в vi и Vim: режимы работы, навигация, вставка, удаление, копирование, поиск, сохранение и безопасный выход.
Содержание статьи
Зачем знать vi
vi — консольный текстовый редактор, который встречается почти в любой Unix-подобной системе. На сервере по SSH может не оказаться графического интерфейса, а привычные редакторы не всегда установлены. При этом vi часто доступен даже в минимальной Linux-системе.
В Linux командой vi нередко запускается Vim — расширенная реализация редактора vi. Для базовой работы это почти не меняет подход: главное понять режимы и несколько команд.
Цель этой статьи — не выучить все возможности Vim, а научиться спокойно открыть файл, внести изменения, найти нужный фрагмент и корректно выйти.
Как открыть файл
Создайте учебный файл и откройте его:
printf 'server_name example.local;\nlisten 8080;\n' > ~/vi-lab.conf
vi ~/vi-lab.conf
Если файла ещё нет, vi создаст его при сохранении. Внизу окна обычно отображаются подсказки о состоянии редактора, а сам текст занимает основную часть терминала.
Перед работой с системной конфигурацией сделайте резервную копию:
sudo cp /etc/example.conf /etc/example.conf.bak
sudo vi /etc/example.conf
На реальном сервере сначала убедитесь, что путь указан правильно. Ошибка в имени файла может привести к созданию нового файла вместо редактирования нужного.
Три режима редактора
Главная особенность vi — разные режимы ввода команд и текста.
Normal mode
В обычном режиме нажатия клавиш — это команды: перемещение, удаление, копирование, поиск. При открытии файла редактор обычно находится именно в этом режиме.
Insert mode
В режиме вставки клавиши печатают текст. Перейти в него можно клавишей i, а вернуться в обычный режим — Esc.
Command-line mode
Команды сохранения, выхода и замены вводятся после : в обычном режиме. Например, :w сохраняет файл, а :q выходит из редактора.
Если непонятно, в каком режиме вы находитесь, нажмите Esc один или два раза. Это безопасный способ вернуться в обычный режим.
Ввод и исправление текста
Основные команды перехода в режим вставки:
i— вставить текст перед курсором;a— вставить текст после курсора;I— перейти в начало строки и начать вставку;A— перейти в конец строки и начать вставку;o— создать новую строку ниже и начать ввод;O— создать новую строку выше и начать ввод.
Попробуйте:
- нажмите
i; - введите текст;
- нажмите
Esc; - переместите курсор;
- нажмите
Aи добавьте продолжение строки; - снова нажмите
Esc.
В обычном режиме:
xудаляет символ под курсором;Xудаляет символ перед курсором;ddудаляет всю текущую строку;Dудаляет текст от курсора до конца строки;uотменяет последнее изменение;Ctrl-rвозвращает отменённое изменение.
Команда dd может показаться непривычной: первая d означает начало операции удаления, вторая повторяет её для всей строки. Многие команды vi строятся по такому принципу.
Навигация по тексту
Для начала достаточно этих клавиш:
h— влево;j— вниз;k— вверх;l— вправо;0— начало строки;$— конец строки;gg— начало файла;G— конец файла;Ctrl-f— прокрутка на экран вперёд;Ctrl-b— прокрутка на экран назад.
Стрелки обычно тоже работают, но клавиши h, j, k, l позволяют перемещаться, не покидая основной буквенный ряд. Это особенно удобно после привыкания к редактору.
Перед командой можно указать число. Например:
5j
переместит курсор на пять строк вниз, а:
3dd
удалит три строки, начиная с текущей.
Копирование и вставка
В терминологии Vim копирование называется yank:
yy— скопировать текущую строку;yw— скопировать слово от курсора;p— вставить после курсора;P— вставить перед курсором.
Пример для дублирования строки:
- поставьте курсор на нужную строку;
- нажмите
yy; - нажмите
p.
Удалённый текст также можно вставить: после dd нажмите p. Поэтому удаление в Vim часто похоже на вырезание.
Поиск
Для поиска по файлу в обычном режиме используйте /:
/listen
Нажмите Enter, и курсор перейдёт к найденному совпадению. Следующее совпадение ищется клавишей n, предыдущее — N.
Поиск в обратном направлении запускается через ?:
?server_name
Чтобы убрать подсветку найденных совпадений, выполните команду:
:nohlsearch
или сокращённо:
:noh
Поиск учитывает настройки редактора. В базовой работе достаточно помнить /текст, Enter, n и N.
Сохранение и выход
Сначала нажмите Esc, затем введите одну из команд:
:w— сохранить файл;:q— выйти;:wq— сохранить и выйти;:x— сохранить и выйти, если были изменения;:q!— выйти без сохранения.
После ввода команды нажмите Enter. Символ ! означает принудительное действие. Например, :q! отменит все несохранённые изменения в текущей сессии.
Частая последовательность для выхода после редактирования:
Esc
:wq
Enter
Если редактор сообщает, что есть несохранённые изменения, не используйте :q! автоматически. Сначала решите, нужно ли сохранить файл через :w или :wq.
Что делать, если редактор «не слушается»
Самая частая причина — вы находитесь в режиме вставки и ожидаете команды. Нажмите Esc, затем повторите действие.
Если внизу появилась строка, начинающаяся с :, / или ?, редактор ждёт завершения команды. Нажмите Enter, чтобы выполнить её, или Esc, чтобы отменить ввод.
Если случайно нажали Ctrl-z, процесс редактора мог быть приостановлен и вы вернулись в оболочку. Вернуть его на передний план можно командой:
fg
Не закрывайте терминал, пока не убедились, что файл сохранён. Если соединение с сервером оборвалось во время редактирования, Vim может оставить временный swap-файл. При следующем открытии внимательно прочитайте предупреждение и не выбирайте восстановление вслепую.
Минимальная тренировка
Откройте учебный файл:
vi ~/vi-lab.conf
Затем выполните упражнение:
- перейдите в конец файла командой
G; - создайте новую строку через
o; - введите
root_path /srv/example;; - нажмите
Esc; - найдите
listenчерез/listen; - перейдите к следующему совпадению клавишей
n; - скопируйте строку
yyи вставьте её ниже черезp; - отмените вставку командой
u; - сохраните и выйдите через
:wq.
После выхода проверьте результат:
cat ~/vi-lab.conf
Повторите упражнение несколько раз. Для первых шагов важнее уверенно переключаться между режимами и выходить без потери изменений, чем запоминать десятки команд.
Полезная шпаргалка
| Действие | Команда |
|---|---|
| Ввод перед курсором | i |
| Ввод после курсора | a |
| Новая строка ниже | o |
| Выйти из режима вставки | Esc |
| Удалить символ | x |
| Удалить строку | dd |
| Отменить изменение | u |
| Скопировать строку | yy |
| Вставить после курсора | p |
| Поиск вперёд | /текст |
| Следующее совпадение | n |
| Сохранить | :w |
| Выйти | :q |
| Сохранить и выйти | :wq |
| Выйти без сохранения | :q! |
Что изучать дальше
После освоения базовых команд стоит перейти к операторам и движениям: ciw, dw, c$, визуальному режиму, поиску и замене. Они позволяют редактировать текст быстрее и точнее, чем последовательность отдельных удалений и переходов.
В следующей статье разберём уверенную работу с vi: слова и движения, комбинации операторов, визуальное выделение, массовую замену и регистры.