1. Il n'est pas difficile d'obtenir le comportement en utilisant une substitution en deux étapes:
:,$s/BEFORE/AFTER/gc|1,''-&&
Tout d'abord, la commande de substitution est exécutée pour chaque ligne à partir de la ligne actuelle jusqu'à la fin du fichier:
,$s/BEFORE/AFTER/gc
Ensuite, cette :substitute
commande est répétée avec le même modèle de recherche, la même chaîne de remplacement et les mêmes indicateurs, à l'aide de la :&
commande (voir :help :&
):
1,''-&&
Ce dernier, cependant, effectue la substitution sur la plage de lignes de la première ligne du fichier à la ligne où la marque de contexte précédente a été définie, moins un. Étant donné que la première :substitute
commande stocke la position du curseur avant de commencer les remplacements réels, la ligne adressée par ''
est la ligne qui était la ligne actuelle avant l'exécution de cette commande de substitution. (L' ''
adresse fait référence à la
'
pseudo-marque; voir :help :range
et :help ''
pour plus de détails.)
Notez que la deuxième commande (après le |
séparateur de commande - voir
:help :bar
) ne nécessite aucune modification lorsque le modèle ou les indicateurs sont modifiés dans le premier.
2. Pour enregistrer un peu de frappe, afin d'afficher le squelette de la commande de substitution ci-dessus dans la ligne de commande, on peut définir un mappage en mode normal, comme ceci:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
La <c-b><right><right><right><right>
partie de fin est nécessaire pour déplacer le curseur au début de la ligne de commande ( <c-b>
) puis quatre caractères vers la droite ( <right>
× 4), le plaçant ainsi entre les deux premiers signes de barre oblique, prêt pour que l'utilisateur commence à taper le motif de recherche . Une fois que le motif souhaité et le remplacement sont prêts, la commande résultante peut être exécutée en appuyant sur
Enter.
(On pourrait envisager d'avoir //
au lieu de ///
dans le mappage ci-dessus, si l'on préfère taper le motif, puis taper soi-même la barre oblique de séparation, suivie de la chaîne de remplacement, au lieu d'utiliser la flèche droite pour déplacer le curseur sur une barre oblique de séparation déjà présente en commençant la pièce de rechange.)
\vpattern
- motif `` très magique '': les caractères non alphanumériques sont interprétés comme des symboles spéciaux de regex (aucun échappement nécessaire)