VI (4/x)


Apprendre VI, 4/X

Agir sur plusieurs lignes

Nous avons déjà vu les premières commandes qui agissent sur plusieurs lignes. Ce type de commande est très utile, mais nous pouvons aller plus loin avec les commandes issues de l’ancêtre de vi, ex. Nous verrons par exemple comment supprimer toutes les lignes entre la ligne courante et la dernière ligne du fichier.

Principe de fonctionnement

Ces commandes commencent toutes de la même façon. Il faut déjà être en mode commande, avec la touche ESC suivit par le caractère : (qui dit s’afficher sur la dernière ligne de la fenêtre). Viennent ensuite le numéro de la première ligne sur laquelle la commande doit agir, puis la dernière ligne, et enfin la commande. Sauvegarder de la ligne 11 à la ligne 27 dans un fichier nommé foo.txt donne :ESC:11,27 w foo.txt

Numéros de ligne

Pour utiliser de type de commande il faut connaître les numéros de ligne. Pour cela, il existe plusieurs astuces. Tout d’abord des raccourcis. Si 1 représente la première ligne, $ représente la dernière et . (point) représente la ligne courante (celle où se trouve le curseur). Ainsi :.,$ agit depuis la ligne courante jusqu’à la dernière ligne du fichier.

Pour connaître le numéro de la ligne courante, on utilise le raccourcis clavier CTRL-G.

1
2
~
"foo,txt" line 1 of 5 --20%--

Enfin, il est possible de demande l’affichage des numéros de ligne avec la commande :set number que l’on peut abréger en :set nu. L’inverse se fait avec :set nonumber qui s’abrège :set nonu. La commande set permet d’accéder aux paramétrages de vi. Nous verrons d’autres commandes de ce style plus tard. Vous pouvez tout de même commencer à en voir la liste avec :set all.

D’immenses possibilités

À partir de cette syntaxe de nombreuses actions sont possible sur le fichier en court d’édition. Supprimer la fin du fichier depuis la ligne courante s’écrit :.,$ d.

Substitutions de chaînes

La grande puissance de ces actions s’exprime dans la substitutions de chaînes. Pour changer une seule fois par ligne « Jacques » par « Anne », on utilise la commande :s/Jacques/Anne/. Pour changer toutes les chaînes « Jacques » par « Anne », on utilise :s/Jacques/Anne/g. Et vous me voyez venir, pour changer tous les « Jacques » par « Anne » sur les lignes 10 à 30, on retrouve la syntaxe de commande multiligne :10,30s/Jacques/Anne/g. Si vous remplacez g par un chiffre n, la substitution se fera sur la nénième apparition de la chaîne à substituer.

Expressions régulières

Je ne vais pas vous faire un cours complet sur les regex (nom familiers des expressions régulières), mais vous donner les des petits trucs utiles dans vi. Dans un script shell, le caractère # en début de ligne exprime que cette ligne est commentée et ne sera pas exécutée. Pour commenter les lignes 5 à 23, il faut donc ajouter # au début de ces lignes. Le début de ligne est exprimé avec le caractère ^. Ce qui nous donne :5,23s/^/#/. Selon le contexte, $ exprime la fin de fichier mais également la fin de ligne. Que fait la commande :s1,23/$/#/ ?

Billet précédent VI 3/x | Billet suivant VI 5/x

vi  unix  vim 

powered by FreeBSD