Гид по технологиям

Как удалить строки в Vi и Vim — команды и примеры

5 min read Linux Обновлено 23 Dec 2025
Удаление строк в Vi/Vim — команды и примеры
Удаление строк в Vi/Vim — команды и примеры

Удаление одной или нескольких строк в Vim, интерфейс с подсветкой строки

Почему это важно

Редактирование текстовых файлов прямо в терминале — базовая навык для администраторов, разработчиков и инженеров DevOps. Vi и Vim присутствуют почти во всех Unix-подобных системах. Понимание простых команд удаления экономит время и предотвращает ошибки при редактировании логов, конфигураций и скриптов.

В одном предложении: Vi/Vim — modalный редактор; команды работают в «нормальном режиме», а ввод текста — в «режиме вставки».

Быстрая шпаргалка (cheat sheet)

  • Esc — перейти в нормальный режим
  • dd — удалить текущую строку
  • ndd — удалить следующие n строк (пример: 3dd удалит 3 строки)
  • D — удалить от курсора до конца строки
  • :n1,n2d — удалить строки в диапазоне с n1 по n2 (пример: :1,5d)
  • :.,$d — удалить от текущей строки до конца файла
  • :%d — удалить все строки в файле
  • :g/pattern/d — удалить все строки, соответствующие шаблону
  • :v/pattern/d — удалить все строки, НЕ соответствующие шаблону
  • u — отмена (undo)
  • :w — сохранить файл
  • :q — выйти
  • :wq — сохранить и выйти

Основное: удаление одной строки

  1. Нажмите Esc, чтобы войти в нормальный режим.
  2. Перейдите к строке, которую хотите удалить (стрелками или поиском).
  3. Нажмите dd — строка будет удалена целиком.

Примечание: команды регистрозависимы: d ≠ D. Команда D удаляет от курсора до конца строки; dd удаляет всю строку вне зависимости от позиции курсора.

Удаление нескольких строк подряд

Если нужно удалить несколько строк подряд, перед командой dd укажите число:

3dd   " удалит текущую строку + две следующие (всего 3 строки)
10dd  " удалит десять строк начиная с текущей

Это удобнее, чем многократное нажатие dd.

Удаление диапазона строк по номерам

Вы можете удалить диапазон, указав номера строк в командной строке Vim:

:1,5d    " удалит строки с 1-й по 5-ю
:150,150d " удалит только 150-ю строку, эквивалентно 150d в нормальном режиме

Особые адреса:

  • . — текущая строка
  • $ — последняя строка файла
  • % — весь файл (эквивалент :1,$)

Примеры:

:.,5d    " удалить от текущей до 5-й
:.,$d    " удалить от текущей до конца файла
:%d      " очистить весь файл

Удаление по регулярным выражениям (шаблонам)

Для удаления всех строк, подходящих под регулярное выражение, используйте глобальную команду g:

:g/delete/d      " удалить все строки, содержащие слово 'delete'
:g/^T/d         " удалить строки, начинающиеся с буквы T

Чтобы удалить все строки, НЕ соответствующие шаблону, используйте v или g!:

:v/word/d       " удалить все строки, которые НЕ содержат 'word'
:g!/word/d      " то же самое: инвертированная глобальная команда

Регулярные выражения Vim похожи на POSIX-совместимые, но имеют свои особенности — для сложных выражений ознакомьтесь с разделом help в Vim (:help regexp).

Примеры задач и их решения

  • Удалить строку 150 в /var/log/messages:
:150d
  • Удалить 5 строк начиная с текущей:
5dd
  • Удалить все строки, содержащие ‘ERROR’:
:g/ERROR/d
  • Удалить весь файл, оставив его пустым:
:%d
:w   " сохранить пустой файл

Безопасность: как не потерять данные

Важно избегать случайного удаления. Рекомендации:

  • Перед массовыми операциями сделайте резервную копию: :w filename.bak или cp в отдельном терминале.
  • Используйте undo (u) сразу после ошибки.
  • Если вы внесли много правок и хотите откатиться к сохранённой версии, закройте без сохранения (:q!) и откройте файл заново.
  • Для скриптов и автоматизации предпочитайте безопасные инструменты (см. раздел «Альтернативы»).

Альтернативные подходы (когда Vi/Vim не нужен)

Иногда проще или безопаснее использовать однострочные команды вне Vim:

  • sed — потоковый редактор, подходит для скриптов:
sed -i '/pattern/d' file.txt   # удалить строки по шаблону прямо в файле (-i изменяет файл)
sed -i '150d' file.txt         # удалить 150-ю строку
  • awk — мощный инструмент для условной фильтрации:
awk '!/pattern/' file.txt > out.txt   # сохранить все строки, не содержащие pattern
  • perl — для сложных регулярных выражений и многоступенчатых правок:
perl -ni -e 'print unless /pattern/' file.txt   # inplace удаление строк с pattern

Когда использовать альтернатиы: в автоматизированных скриптах, CI/CD, при обработке больших объёмов данных или когда нужно избежать интерактивных шагов.

Когда удаление в Vim может подвести (контрпримеры)

  • Большие бинарные файлы — Vim не предназначен для редактирования бинарных данных; операция может сделать файл нечитаемым.
  • Файлы с нестандартной кодировкой — регулярные выражения могут не сработать, если кодировка не UTF-8.
  • Массовые правки без резервной копии — уязвимы к ошибкам человека.

Практическая методика: безопасное удаление строк (мини-SOP)

  1. Оцените цель: какие строки и почему должны быть удалены?
  2. Сделайте резервную копию (:w filename.bak).
  3. Попробуйте команду на небольшой выборке (временный файл).
  4. Выполните удаление в Vim или через sed/awk.
  5. Проверьте результат и сохраните изменения (:w).
  6. Зафиксируйте изменения в системе контроля версий (git add && git commit).

Рольные чек-листы

Для начинающего:

  • Перейти в нормальный режим (Esc).
  • Поучиться командам dd, ndd, :n1,n2d.
  • Попробовать undo (u).
  • Записать пару примеров в заметки.

Для разработчика/DevOps:

  • Всегда делать резервные копии перед массовыми операциями.
  • Использовать sed/awk для автоматизации.
  • Включать тесты/проверки после правок.

Для системного администратора:

  • Не редактировать важные конфиги без проверки синтаксиса после правки.
  • Хранить резервные копии конфигураций.
  • Использовать управление конфигурациями (Ansible, Puppet) вместо ручных правок где возможно.

Критерии приёмки

  • Удалённые строки действительно отсутствуют в файле.
  • Файл имеет корректную кодировку и синтаксис (если применимо).
  • Создана резервная копия или изменения задокументированы.

Полезные советы и хитрости

  • Комбинируйте поиск и удаление: в нормальном режиме нажмите /pattern, затем n чтобы найти следующую, и dd для удаления найденной строки.
  • Используйте визуальный режим (V) для выделения нескольких строк и нажмите d, чтобы удалить выделенное.
  • Vimtutor — отличный способ быстро научиться основам: выполните команду vimtutor в терминале.

Итог

Удаление строк в Vi и Vim — простая, но мощная операция. Освойте dd, ndd, :start,endd и глобальные команды :g/:v, используйте резервные копии и альтернативы (sed/awk) для автоматизации. Практика и осторожность помогут избежать ошибок при работе с важными файлами.

Важно: начните с небольших упражнений и используйте Vimtutor, чтобы превратить знакомство с Vim в уверенную привычку.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как отформатировать USB в exFAT для Linux, Windows и macOS
Linux

Как отформатировать USB в exFAT для Linux, Windows и macOS

Настройка и персонализация Apple Watch
умные часы

Настройка и персонализация Apple Watch

Как быстро проверить, потянет ли ваш ПК игру
Игры

Как быстро проверить, потянет ли ваш ПК игру

Переключение на 5 GHz в Windows 10
Сеть

Переключение на 5 GHz в Windows 10

Почему Outlook не показывает всю почту и как это исправить
Инструкции

Почему Outlook не показывает всю почту и как это исправить

Как эффективно использовать Pinterest
Социальные сети

Как эффективно использовать Pinterest