В энергии
:g/George Bush/d
удаляет все строки с George Bush.
Что, если я хотел удалить 5 строк ниже того запуска с George Bush?
Другой реалистический пример состоял бы в том, чтобы найти, что вся ОТЛАДКА в log4net регистрирует и удаляет в конец отслеживания стека (который я знаю, будут еще 10 строк ниже его),
Глобальная команда - твой друг - хорошо учись. Она позволяет выполнять произвольные команды :ex на каждой строке, которая совпадает с регексом. Сокращенно :g.
Для удаления всех строк, которые соответствуют "Джорджу Бушу":
:g/George Bush/ d
Следующая команда может иметь свой префикс адреса/диапазона, который будет относиться к соответствующей строке. Таким образом, чтобы удалить 5-ю строку после Джорджа Буша:
:g/George Bush/ .+5 d
Чтобы удалить записи DEBUG лога:
:g/DEBUG/ .,+10 d
Если вы знали, что трасса стека была переменной длины, но всегда заканчивалась пустой строкой (или другим регексом):
:g/DEBUG/ .,/^$/ d
Вы также можете выполнить команду на каждой строке, которая НЕ совпадает с :g!.. Например чтобы заменить "Bush" на "Obama" в каждой строке, которая не содержит слова "sucks":
:g!/sucks/ s/Bush/Obama/
Команда по умолчанию выводит строку в окно сообщения. Например, чтобы перечислить каждую строку, помеченную TODO:
:g/TODO
Это также полезно для проверки соответствия регексов ожидаемым строкам перед тем, как вы сделаете что-то разрушительное.
Вы можете соединить в цепочку несколько команд, используя "|". Например. изменить Bush на Obama AND George на Barack в каждой строке, которая не содержит "sucks":
:g!/sucks/ s/Bush/Obama/g | s/George/Barack/g