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 :substitute
comando é 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 :substitute
comando 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 :range
e :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)