1. Нетрудно добиться такого поведения с помощью двухэтапной замены:
:,$s/BEFORE/AFTER/gc|1,''-&&
Сначала выполняется команда подстановки для каждой строки, начиная с текущей и до конца файла:
,$s/BEFORE/AFTER/gc
Затем эта :substitute
команда повторяется с тем же шаблоном поиска, строкой замены и флагами, используя :&
команду (см. :help :&
):
1,''-&&
Последний, однако, выполняет замену диапазона строк от первой строки файла до строки, в которой была установлена предыдущая метка контекста, минус один. Поскольку первая :substitute
команда сохраняет позицию курсора до начала фактических замен, адресуемая строка ''
- это строка, которая была текущей до того, как была запущена эта команда замены. (The ''
адрес относится к
'
псевдо-метке; см :help :range
и :help ''
для деталей.)
Обратите внимание, что вторая команда (после |
разделителя команд - см.
:help :bar
) Не требует никаких изменений при изменении шаблона или флагов в первой.
2. Чтобы сэкономить время на вводе текста, чтобы вызвать скелет вышеуказанной команды подстановки в командной строке, можно определить отображение в нормальном режиме, например:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
Завершающая <c-b><right><right><right><right>
часть необходима для перемещения курсора в начало командной строки ( <c-b>
), а затем на четыре символа вправо ( <right>
× 4), таким образом, помещая его между первыми двумя знаками косой черты, чтобы пользователь мог начать вводить шаблон поиска. . Когда желаемый узор и замена готовы, получившуюся команду можно запустить, нажав
Enter.
(Можно было бы подумать о том, //
чтобы вместо ///
приведенного выше сопоставления, если кто-то предпочитает вводить шаблон, затем введите разделяющую косую черту самостоятельно, за которой следует строка замены, вместо использования стрелки вправо для перемещения курсора над уже существующей разделяющей косой чертой, начиная с запасная часть.)
\vpattern
- «очень магический» шаблон: не буквенно-цифровые символы интерпретируются как специальные символы регулярного выражения (экранирование не требуется)