Поиск и удаление нескольких строк - PullRequest
37 голосов
/ 15 января 2010

В vim

: г / Джордж Буш / д

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

Что если я захочу удалить 5 строк ниже, начинающихся с Джорджа Буша ?

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

Ответы [ 3 ]

97 голосов
/ 15 января 2010

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

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

: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
11 голосов
/ 07 сентября 2012

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

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

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

5 голосов
/ 15 января 2010

:g/George Bush/d 6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...