Avec La commande d'édition VIM, nous pouvons créer une macro2) d'une commande vim complète que nous souhaitons répéter ultérieurement.
Dans un fichier d'une page web, nous nous trouvons à devoir réactiver des liens préparés mais commentés (et donc inactifs) par // ainsi :
// ligne web ancrée // ligne web ancrée // ligne web ancrée
// ligne web ancrée // ligne web ancrée // ligne web ancrée
// ligne web ancrée // ligne web ancrée // ligne web ancrée
Nous désirons supprimer : ''// “ devant chacune des troisième ligne pour obtenir ceci :
// ligne web ancrée // ligne web ancrée ligne web ancrée
// ligne web ancrée // ligne web ancrée ligne web ancrée
// ligne web ancrée // ligne web ancrée ligne web ancrée
Nous ouvrons ce fichier avec vim, puis, pour déclencher l'enregistrement de la macro, nous tapons :
qa
Un avis : Enregistrement survient et tout ce que nous tapons à présent est l'enregistrement de cette macro nommée “a”.
Nous pouvons voir en direct sur le texte ce que notre commande vim exécute sur la ligne visée.
Terminer la macro par Q
En cas d'erreur, il suffit de quitter la macro par Q
puis, d'utiliser la lettre U
pour restaurer la ligne et recommencer la macro différemment, en la nommant de manière identique.
Pour relancer cette macro nommée “a”, tapons @+A
et voilà.
Concrètement, pour en revenir à notre exemple, en mode commande (tapez echap) après s'être placé sur la troisième ligne du premier groupe de ligne, tapons :
qa:s/\/\/ //
(validation)
4jq
(validation)
2@a
(validation)
qa:s/\/\/ //
Notez les caractères antislach d'échappement afin que le caractère / soit lu comme un caractère normal et non comme un signe spécial. Voir : regexp.
Validez et aussitôt, la ligne concernée devient :
// ligne web ancrée // ligne web ancrée ligne web ancrée
pour se placer 4 lignes plus loin, continuons la macro en tapant :
4jq
ce qui correspond à :
Et maintenant ?
Et maintenant, nous pouvons réenclencher cette macro nommée “a” sur les lignes suivantes.
Nous sommes déjà positionnés sur la prochaine ligne à modifier, tapons :
2@a
Et sur validation, les lignes visées seront modifiées.
De :
// ligne web ancrée // ligne web ancrée ligne web ancrée
// ligne web ancrée // ligne web ancrée // ligne web ancrée
// ligne web ancrée // ligne web ancrée // ligne web ancrée
Nous obtenons bien :
// ligne web ancrée // ligne web ancrée ligne web ancrée
// ligne web ancrée // ligne web ancrée ligne web ancrée
// ligne web ancrée // ligne web ancrée ligne web ancrée
Super !
Bien sûr, au début, cela demande un peu de reflexion, mais je pense qu'il serait dommage de ne pas utiliser cet outil macro de vim plus opportunément encore !
Merci à adrien sur le chan #slackware-fr et à toute la communauté pour sa joyeuse entraide (malgrès les charriages à propos de nos distros libres respectives ! Scrongnongnon…)