1. Não é difícil alcançar o comportamento usando uma substituição em duas etapas:
:,$s/BEFORE/AFTER/gc|1,''-&&
Primeiro, o comando de substituição é executado para cada linha, começando da atual até o final do arquivo:
,$s/BEFORE/AFTER/gc
Em seguida, esse :substitutecomando é repetido com o mesmo padrão de pesquisa, string de substituição e sinalizadores, usando o :& comando (consulte :help :&):
1,''-&&
O último, entretanto, realiza a substituição no intervalo de linhas da primeira linha do arquivo para a linha onde a marca de contexto anterior foi definida, menos um. Como o primeiro :substitutecomando armazena a posição do cursor antes de iniciar as substituições reais, a linha endereçada por ''é a linha que era a atual antes que o comando de substituição fosse executado. (O '' endereço refere-se à
' pseudo-marca; consulte :help :rangee :help ''para obter detalhes.)
Observe que o segundo comando (após o | separador de comando - consulte
:help :bar) não requer nenhuma alteração quando o padrão ou sinalizadores são alterados no primeiro.
2. Para economizar alguma digitação, a fim de trazer o esqueleto do comando de substituição acima na linha de comando, pode-se definir um mapeamento de modo normal, assim:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
A <c-b><right><right><right><right>parte final é necessária para mover o cursor para o início da linha de comando ( <c-b>) e, em seguida, quatro caracteres para a direita ( <right> × 4), colocando-o entre os dois primeiros sinais de barra, pronto para o usuário começar a digitar o padrão de pesquisa . Assim que o padrão desejado e a substituição estiverem prontos, o comando resultante pode ser executado pressionando
Enter.
(Pode-se considerar ter em //vez de ///no mapeamento acima, se preferir digitar o padrão, então digite a barra separadora, seguida pela string de substituição, em vez de usar a seta para a direita para mover o cursor sobre uma barra separadora já presente começando a peça de reposição.)
\vpattern- padrão 'muito mágico': caracteres não alfanuméricos são interpretados como símbolos regex especiais (nenhum escape é necessário)