Respostas:
eu usaria \zs
:%s/.*\zspattern/replacement/
Um pouco de explicação:
.
representa qualquer caractere único*
representa correspondência gananciosa (o maior número possível)No Vim, você pode usar âncoras de largura zero \zs
e \ze
definir o início e o fim do padrão pesquisado, com o qual deseja corresponder. Qualquer coisa antes \zs
e depois \ze
do seu padrão não será afetada pela substituição.
Para torná-lo fácil de entender, eu gostaria de usar este exemplo da Wikia 's Pesquisa e substituir :
Salve a digitação usando
\zs
e\ze
para definir o início e o fim de um padrão. Por exemplo, em vez de::s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
Usar:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
Para mais informações, consulte
.*
é ganancioso .
Você pode procurar a última correspondência agrupando tudo \(.*\)
, mas a última ocorrência de pattern
. Em seguida, sair com o grupo capturado \1
e adicionar o replacement
.
:%s/\(.*\)pattern/\1replacement/
\zs
solução de @ ryuichiro , em que sua \1
abordagem é funcionalmente equivalente, mas mais detalhada. (Por outro lado, pode ser mais fácil lembrar de alguns, principalmente se eles estiverem acostumados a outros tipos de expressões regulares))
Por uma questão de integridade, pensei em publicar uma alternativa. O Vim possui vários itens, alguns dos quais são semelhantes às asserções de busca padrão de expressões regulares mais comuns ( procura negativa / positiva / procura por trás). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
Nesse caso, queremos um lookahead negativo \@!
, o que significa que queremos afirmar que o átomo que precede o item não ocorre após o padrão . Nesse caso, o átomo é o próprio padrão precedido por qualquer outra coisa:
:%s/pattern\(.*pattern\)\@!/replacement/
A parte entre parênteses é de largura zero e não está incluída na partida, portanto não é substituída pela substituição.
:h \@!
para obter mais informações ou :h pattern-multi-items
para toda a seção que contém outras variações de aparência.
\zs
faz em sua resposta?