Подтвердить что ты не робот

Поиск и удаление нескольких строк

В vim

: g/Джордж Буш /d

удаляет все строки с Джорджем Бушем.

Что делать, если я хочу удалить 5 строк ниже, которые начинаются с George Bush?

Еще один реалистичный пример - найти все DEBUG в журнале log4net и удалить до конца трассировки стека (который, как я знаю, будет еще на 10 строк ниже)

4b9b3361

Ответ 1

Глобальная команда - ваш друг - хорошо учитесь. Он позволяет запускать произвольные команды: ex в каждой строке, которая соответствует регулярному выражению. Это аббревиатура соответствует: g.

Чтобы удалить все строки, соответствующие "Джордж Буш":

:g/George Bush/ d

Следующая команда может иметь собственный префикс адреса/диапазона, который будет относиться к согласованной строке. Итак, чтобы удалить 5-ю строчку после Джорджа Буша:

:g/George Bush/ .+5 d

Чтобы удалить записи журнала DEBUG:

:g/DEBUG/ .,+10 d

Если вы знали, что трассировка стека имеет переменную длину, но всегда заканчивается пустой строкой (или другим регулярным выражением):

:g/DEBUG/ .,/^$/ d

Вы также можете выполнить команду для каждой строки, которая НЕ соответствует: g!. например заменить "Буша" на "Обаму" на каждой строке, которая не содержит слова "отстой":

 :g!/sucks/ s/Bush/Obama/

Команда по умолчанию предназначена для печати строки в окне сообщения. например для перечисления каждой строки с пометкой TODO:

 :g/TODO

Это также полезно для проверки регулярного выражения, которое соответствует ожидаемым линиям, прежде чем вы сделаете что-то деструктивное.

Вы можете связать несколько команд с помощью "|". например изменить Буша к Обаме и Джорджу к Бараку на каждой линии, которая не содержит "отстой":

 :g!/sucks/ s/Bush/Obama/g | s/George/Barack/g

Ответ 2

Чтобы удалить 3 строки под шаблоном, например. XXX
:g/XXX/+d3

Чтобы удалить текущую строку с шаблоном, а также еще две строки ниже :g/XXX/d+3

Примечание. Используйте "-" для операций над шаблоном.

Ответ 3

:g/George Bush/d 6