Remplacement

:[plage]substitute/source/cible/[drapeaux]

Le mot-clé substitute n’est presque jamais tapé complétement. Généralement on utilise le diminutif s.
Voici un exemple d’utilisation :

:%s/developper/developpez/

Ceci remplacera la première occurence de ‘developper’ par ‘developpez’ sur toutes les lignes (%).
Sur le texte suivant :

Sur le site developper.com, il est possible de parler de langages sur lesquels vous developper.
Alors n’hésitez pas ! developper !

L’application de la commande précédente donnera :

Sur le site developpez.com, il est possible de parler de langages sur lesquels vous developper.
Alors n’hésitez pas ! developpez !


Si vous ne précisez pas de plage, le remplacement se fera sur la ligne courante uniquement.
Pour remplacer toutes les occurrences de la ligne, il suffit d’utiliser le flag ‘g’ en fin de commange.
:%s/developper/developpez/g

Un autre flag plus usité est le flag ‘c’ qui permet de valider (ou non) le remplacement de chaque occurrence.
A chaque occurrence trouvé, il sera demandé à l’utilisateur une réponse dont voici la liste :

Commande Description
y Effectuer le changement
n Ne pas faire le changement
a Faire le changement pour toutes occurrences qui suivent
q Quitter le remplacement (ne rien faire)
l Dernier changement puis quitter
Ctrl-E Faire défiler d’une ligne vers le haut
Ctrl-Y Faire défiler d’une ligne vers le bas

Motif source
Dans le motif source, vous pouvez utilisez des expressions régulières telles que ^Developpez qui ne recherchera le mot Developpez qu’en début de ligne.
Si dans votre motif source, vous devez y placer le caractère /, vous devrez l’annihiler par un antislash \.

:s/\//./g

Ceci permet de remplacer tous les / par . sur la ligne courante.

Autre solution, il est d’utiliser un autre caractère de séparation. Par exemple le caractère *.

:s*/*.*g

Motif plage
Détaillons maintenant le motif de plage. Nous connaissons % qui permet de parcourir l’ensemble du fichier.
Il existe une autre écriture dont l’effet est strictement identique : :1,$s/...
1 signifie la première ligne du fichier
$ signifie la dernière ligne du fichier

Nous avons donc simplement spécifier un interval de lignes.
. signifie la ligne courante
Ainsi, :.,$s/... permet d’indiquer un interval compris entre la ligne courante et la fin du fichier.
On peut aussi utiliser :

les numéros de ligne :5,10s/...
ajouter/soustraire des lignes :.+3,$-4s/... Recherche à partir de la 3ème ligne sous le curseur jusqu’à l’antépénultième ligne.
des motifs de recherche (et oui!) :?^void .\+(.*)?,/^void .\+(.*)/-1s/cpt/compteur/g Recherche la déclaration de la fonction vers le haut jusqu’à la ligne précédent la déclaration suivante.
En ce qui concerne les expressions régulières, vous pouvez vous référer au chapitre « Expressions rationnelles et commandes de recherche » du sommaire principal pour davantage d’informations.
les marqueurs :'a,'bs/... (cf. billet Utilisation des marques).
les sélections du mode visuel Sélectionner la plage en mode visuel (cf. billet Mode visuel) puis taper :. Vim affichera automatiquement :'<,'> pour indiquer qu’il a bien pris en compte la sélection. Vous pouvez alors taper la suite de la commande s/...

Laisser un commentaire