ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Vim в терминале: режимы, сохранение и исправление текста

Автор: · Обновлено

Vim встречается на сервере как редактор конфигурации и сообщений Git. Главное затруднение новичка связано с режимами: одинаковая клавиша либо вводит символ, либо выполняет команду. Навык начинается с безопасного учебного файла, а не с правки рабочего сервиса. Для встроенного курса можно запустить vimtutor, если он установлен вместе с Vim.

Открыть отдельный файл

vim_lab=$(mktemp -d)
printf 'server=dev\nport=8080\nstatus=draft\n' >"$vim_lab/app.conf"
vim -Nu NONE "$vim_lab/app.conf"

-Nu NONE отключает пользовательскую конфигурацию и плагины для предсказуемой тренировки. При открытии редактор находится в Normal: буква j перемещает курсор вниз, а не печатается. Стрелки тоже работают в обычном терминале. Комбинация Esc возвращает из режима ввода; нажать её перед командой сохранения — полезная привычка, когда текущее состояние непонятно.

Режимы и первые изменения

Нажмите i для Insert и введите # training, затем Enter. Вернитесь через Esc. Команда a начинает ввод после курсора, A — в конце строки; o создаёт строку ниже. Normal предназначен для действий над текстом, Insert — для ввода, Visual — для выделения. Двоеточие открывает командную строку Vim, где команда выполняется после Enter.

В Normal gg перемещает к первой строке, G — к последней, 0 — в начало текущей, $ — в конец. w идёт к следующему слову. Число перед командой задаёт повтор: 3j спускается на три строки. Команды удобнее осваивать группами на одном файле, сверяя результат после каждого действия.

Сохранить, выйти или отказаться

Последовательность в NormalРезультат
:w и EnterЗаписать текущий файл, остаться в редакторе
:w новое-имя и EnterЗаписать содержимое по указанному пути
:wq и EnterЗаписать файл и закрыть окно
:q и EnterЗакрыть окно, если нет несохранённых изменений
:q! и EnterЗакрыть окно, отбросив несохранённые изменения

Начинайте эти последовательности с Esc. Сообщение No write since last change означает, что изменения ещё не записаны: решите, нужны они или нет. В сеансе с несколькими окнами и буферами выход из одного окна не обязательно закрывает весь Vim. Учебный пример открывает один файл, поэтому :wq завершает редактор.

Удалить, скопировать и отменить

В Normal dd удаляет строку, 3dd — три строки, yy копирует строку во внутренний регистр, p вставляет после курсора либо ниже строки для построчного регистра. u отменяет изменение, Ctrl+R возвращает отменённое. Точка повторяет последнее изменение, поэтому перед повтором убедитесь, что курсор стоит в правильном месте.

v включает посимвольное выделение, V — построчное, Ctrl+V — блочное. Выделите две строки через V и j, затем нажмите y и p: копия появится ниже. Esc снимает выделение. Системный буфер обмена зависит от сборки и окружения: наличие +clipboard видно в vim --version; обычный yy сам по себе не обещает доступ из другого приложения.

Поиск и замена с подтверждением

В Normal наберите /dev и Enter, затем n для следующего совпадения или N для предыдущего. :set hlsearch подсвечивает найденное, :nohlsearch временно убирает подсветку. Чтобы поменять все значения dev на test, выполните :%s/dev/test/gc: процент обозначает весь файл, g — все совпадения в строке, c — подтверждение каждой замены. Отвечайте y или n, q завершает замену.

Это регулярное выражение: точка означает любой символ. Для буквального поиска сложного фрагмента можно начать шаблон с \V, но обратная косая черта всё равно остаётся специальной. Перед массовой заменой сохраните понятную исходную версию и просмотрите каждое совпадение; нужное слово может встретиться в комментарии или другом ключе.

Ошибка и диагностика

Если вместо команды появились буквы :wq, редактор был в Insert. Отмените ошибочный ввод, нажмите Esc и повторите. Permission denied при сохранении исправляют проверкой владельца и выбранного пути; для системной конфигурации часто подходит sudoedit, который открывает временную копию с контролируемой записью. Удалять найденный swap-файл вслепую нельзя: сначала исключите живой сеанс и рассмотрите восстановление через vim -r файл.

Практика

На учебном файле добавьте комментарий, замените dev на test с подтверждением, скопируйте строку порта и отмените копирование. Сохраните и выйдите. Снаружи выполните cat "$vim_lab/app.conf": комментарий должен присутствовать, порт остаться один, сервер иметь значение test. Откройте файл снова, удалите строку и выйдите через :q!; проверьте, что сохранённый файл не изменился. Так видна разница между буфером и диском.

Что важно запомнить

Режим определяет смысл клавиши. Esc, явное сохранение и проверка файла после выхода дают надёжную основу; скорость придёт с повторением небольших операций, а не с заучиванием всех команд сразу.

Частые вопросы

Как выйти из режима insert?

Нажмите Esc и убедитесь, что исчез индикатор INSERT, если он отображается. После этого команды перемещения, удаления и двоеточие снова управляют редактором.

Чем vi отличается от Vim?

Vim расширяет интерфейс vi, но доступные функции зависят от реализации и сборки. Проверьте vi --version; не рассчитывайте на плагины и системный clipboard на минимальном сервере.

Что делать, если случайно удалена строка?

Сразу нажмите u в Normal и проверьте восстановленный фрагмент. Если после удаления уже были другие изменения, отменяйте осознанно: каждая следующая отмена меняет историю буфера.

Источники