Réponses:
j'utiliserais \zs
:%s/.*\zspattern/replacement/
Un peu d'explication:
.
représente n'importe quel caractère*
représente l'appariement gourmand (autant que possible)Dans Vim, vous pouvez utiliser des ancres de largeur nulle \zs
et \ze
pour définir le début et la fin du motif recherché, que vous souhaitez faire correspondre. Tout ce qui se trouve avant \zs
et après \ze
dans votre modèle ne sera pas affecté par le remplacement.
Pour le rendre facile à comprendre, je voudrais utiliser cet exemple de la recherche et du remplacement de wikia :
Enregistrez la saisie en utilisant
\zs
et\ze
pour définir le début et la fin d'un motif. Par exemple, au lieu de::s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
Utilisation:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
Pour plus d'informations, consultez
Vous pouvez rechercher la dernière correspondance en regroupant tout \(.*\)
, mais la dernière occurrence de pattern
. Quitter ensuite avec le groupe capturé \1
et ajouter le replacement
.
:%s/\(.*\)pattern/\1replacement/
\zs
solution de @ ryuichiro , dans la mesure où votre \1
approche est fonctionnellement équivalente, mais plus verbeuse. (D'un autre côté, il peut être plus facile de s'en souvenir pour certains, en particulier s'ils sont habitués à d'autres saveurs d'expression régulière.))
Par souci d'exhaustivité, j'ai pensé publier une alternative. Vim a plusieurs éléments dont certains sont similaires aux assertions de recherche d' expression régulière plus standard (lookahead / lookbehind négatif / positif). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
Dans ce cas, nous voulons une anticipation négative \@!
, ce qui signifie que nous voulons affirmer que l' atome qui précède l'élément ne se produit pas après le motif . Dans ce cas, l'atome est le motif lui-même précédé de toute autre chose:
:%s/pattern\(.*pattern\)\@!/replacement/
La partie entre parenthèses est de largeur nulle et n'est pas incluse dans la correspondance, elle n'est donc pas remplacée par la substitution.
:h \@!
pour plus d'informations ou :h pattern-multi-items
pour la section entière contenant d'autres variantes de lookaround.
\zs
contient votre réponse?