Как удалить строки в Vi и 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 — сохранить и выйти
Основное: удаление одной строки
- Нажмите Esc, чтобы войти в нормальный режим.
- Перейдите к строке, которую хотите удалить (стрелками или поиском).
- Нажмите 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)
- Оцените цель: какие строки и почему должны быть удалены?
- Сделайте резервную копию (:w filename.bak).
- Попробуйте команду на небольшой выборке (временный файл).
- Выполните удаление в Vim или через sed/awk.
- Проверьте результат и сохраните изменения (:w).
- Зафиксируйте изменения в системе контроля версий (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 в уверенную привычку.
Похожие материалы
Как отформатировать USB в exFAT для Linux, Windows и macOS
Настройка и персонализация Apple Watch
Как быстро проверить, потянет ли ваш ПК игру
Переключение на 5 GHz в Windows 10
Почему Outlook не показывает всю почту и как это исправить