Ce document est mis à disposition selon les termes de la licence Creative Commons « attribution - pas d’utilisation commerciale - partage dans les mêmes conditions » 4.0 international (CC BY-NC-SA 4.0).

Ce fichier est destiné à vous enseigner les rudiments des éditeurs de texte vi et Vim et à vous permettre de les pratiquer dans la joie et la bonne humeur.

Vous pouvez vous déplacer dans ce fichier au moyen des touches fléchées (nous étudierons ultérieurement des méthodes de déplacement plus rapides, que vous pourrez alors également utiliser). Pour le moment, faites défiler ce fichier vers le bas.

Des exercices vous seront régulièrement proposés dans des zones similaires à celle ci-dessous :

Zone d’exercice
La zone d'exercice contient des indications permettant de réaliser l'exercice
sur le texte de la zone elle-même.

Il est essentiel de ne pas vous contenter de lire les exercices mais bien de les réaliser en suivant les directives.

Passage en mode insertion, en mode commande

L’une des difficultés de vi est qu’il dispose de deux modes de fonctionnement :

  • le mode de saisie des commandes (mode commande) ;

  • le mode d’insertion de texte (mode insertion).

Après son lancement, vi est en mode commande et il n’existe pas moins de six façons de passer en mode insertion en fonction de l’endroit auquel on souhaite voir apparaître le texte qu’on va saisir.

Le passage en mode insertion se fait en tapant l’un des six caractères i, a, I, A, o ou O au clavier.

Le passage en mode commande se fait au moyen de la touche d’échappement (située en haut et à gauche du clavier et estampillée Échap ou Esc selon les claviers).

Détaillons les six façons de passer en mode insertion.

Le caractère i (insert) permet de passer en mode insertion à l’endroit où se trouve le curseur, c’est-à-dire que le texte qu’on saisira par la suite apparaîtra à partir de la position actuelle du curseur.

Zone d’exercice
Au moyen des touches fléchées, déplacez le curseur de texte sur le caractère x
situé entre les deux flèches sur la ligne ci-dessous puis saisissez le
caractère i et tapez ce qui vous passe par la tête.

->x<-

Pour revenir au mode commande, appuyez sur la touche d'échappement.

Le caractère a (after) permet de passer en mode insertion immédiatement après le curseur, c’est-à-dire que le texte qu’on saisira par la suite apparaîtra à droite de la position actuelle du curseur.

Zone d’exercice
Au moyen des touches fléchées, déplacez le curseur de texte sur le caractère x
situé entre les deux flèches sur la ligne ci-dessous puis saisissez le
caractère a et tapez ce qui vous passe par la tête.

->x<-

Pour revenir au mode commande, appuyez sur la touche d'échappement.

Le caractère I permet de passer en mode insertion au début de la ligne sur laquelle se situe le curseur.

Zone d’exercice
Au moyen des touches fléchées, déplacez le curseur de texte sur le caractère x
situé entre les deux flèches sur la ligne ci-dessous puis saisissez le
caractère I et tapez ce qui vous passe par la tête.

->x<-

Pour revenir au mode commande, appuyez sur la touche d'échappement.

Le caractère A permet de passer en mode insertion à la fin de la ligne sur laquelle se situe le curseur.

Zone d’exercice
Au moyen des touches fléchées, déplacez le curseur de texte sur le caractère x
situé entre les deux flèches sur la ligne ci-dessous puis saisissez le
caractère A et tapez ce qui vous passe par la tête.

->x<-

Pour revenir au mode commande, appuyez sur la touche d'échappement.

Le caractère o (open) permet de créer une nouvelle ligne au-dessous de celle sur laquelle se situe le curseur (le reste du document est alors décalé d’une ligne vers le bas) et passer en mode insertion au début de cette ligne.

Zone d’exercice
Au moyen des touches fléchées, déplacez le curseur de texte sur le caractère x
situé entre les deux flèches sur la ligne ci-dessous puis saisissez le
caractère o et tapez ce qui vous passe par la tête.

->x<-

Pour revenir au mode commande, appuyez sur la touche d'échappement.

Le caractère O (o majuscule) permet de créer une nouvelle ligne au-dessus de celle sur laquelle se situe le curseur (le reste du document est alors décalé d’une ligne vers le bas) et passer en mode insertion au début de cette ligne.

Zone d’exercice
Au moyen des touches fléchées, déplacez le curseur de texte sur le caractère x
situé entre les deux flèches sur la ligne ci-dessous puis saisissez le
caractère O et tapez ce qui vous passe par la tête.

->x<-

Pour revenir au mode commande, appuyez sur la touche d'échappement.

Déplacement

L’utilisation des commandes de déplacement n’entraînant pas de modification du document, vous pouvez les expérimenter au fur et à mesure sur le texte de cette partie. Il n’y aura donc pas de zone d’exercice.

Il est possible de se déplacer dans un document au moyen des touches fléchées, que ce soit en mode commande ou en mode insertion. À noter que d’anciennes versions de vi ne permettaient les déplacements qu’en mode commande.

En mode commande, on peut également utiliser h, j, k et l pour se déplacer respectivement vers la gauche, vers le bas, vers le haut et vers la droite. Comment s’en souvenir ? Ces quatre caractères sont à la suite les uns des autres sur le clavier. Le caractère h est le plus à gauche, le caractère l est le plus à droite donc chacun permet respectivement d’aller dans la direction correspondant à sa position. Pour j et k, il suffit de se souvenir comment on apprend à écrire, en matérialisant les lignes d’appui des lettres :

             /\
             | |
       .     | /
_____________|/______ ligne médiane
      /|     |/\
     / |     |_/
_______|_____|_\_____ ligne de pied
     / |
     | |
     \_/

Le caractère j a un jambage qui descend au-dessous de la ligne de pied donc il permet de se déplacer vers le bas. Le caractère k a une hampe qui remonte au-dessus de la ligne médiane donc il permet de se déplacer vers le haut.

Quel est l’intérêt de ces quatre commandes, dans la mesure où l’on dispose déjà des touches fléchées pour se déplacer ? Il s’avère que certains claviers n’ont pas de touches fléchées. C’est le cas par exemple de la majorité des claviers de téléphones ou de tablettes. Or ces appareils disposent d’applications permettant de se connecter sur des serveurs UNIX sur lesquels on peut avoir envie d’utiliser vi. Ces dans ce cas que les commandes h, j, k et l peuvent être utiles.

La commande 0 (zéro) permet de se déplacer en début de ligne, $ en fin de ligne.

Les commandes w (word) et b (back) permettent de se déplacer de mot en mot (respectivement en avant et en arrière). Il existe également des commandes W et B (en lettres capitales), qui ont un comportement différent vis-à-vis des caractères de ponctuation. Essayez les quatre pour voir.

Les commandes { et } permettent de se déplacer de paragraphe en paragraphe (respectivement en montant et en descendant).

La commande G (go) permet de se déplacer sur la dernière ligne du document. Précédée d’un nombre, elle permet de se déplacer à la ligne ayant ce numéro. Par exemple, la commande 200G permet de se déplacer à la ligne numéro 200. Attention lorsque vous saisissez 200G car rien ne s’affiche à l’écran. On peut également se déplacer en saisissant : (deux-points) suivi d’un numéro de ligne, en terminant par la touche <Entrée> par exemple :200 pour se déplacer à la ligne numéro 200. Les commandes commençant par : s’affichent toujours au bas de l’écran au fur et à mesure de leur saisie.

Suppression

La commande x supprime le caractère situé sous le curseur.

La commande dw (delete word) supprime la fin du mot à partir de la position du curseur jusqu’à la prochaine espace ou jusqu’au prochain signe de ponctuation.

La commande D (delete) supprime la fin de la ligne à partir de la position du curseur.

La commande dd supprime totalement la ligne, où que le curseur y soit situé.

Zone d’exercice
La ligne ci-dessous contient des caractères en trop. Supprimez-les en vous
déplaçant dessus et en utilisant la commande x :

Le Liimousin aa ddit : chauussette drroite, ooreille gauchhe !!

La ligne ci-dessous contient des mots dont la terminaison est présente deux
fois. Supprimez les terminaisons en trop en vous déplaçant dessus et en
utilisant la commande dw (il faudra aussi rajouter des espaces) :

Le Limousinsin a ditdit : chaussette droitete, oreille gaucheche !

La fin de la ligne ci-dessous est en trop. Supprimez-la en vous déplaçant au
bon endroit et en utilisant la commande D :

Le Limousin a dit : chaussette droite, oreille gauche ! oreille gauche !

Il y a deux lignes identiques ci-dessous. Supprimez-en une en vous déplaçant
dessus et en utilisant la commande dd :

Le Limousin a dit : chaussette droite, oreille gauche !
Le Limousin a dit : chaussette droite, oreille gauche !

Remplacement

La commande r (replace) permet de remplacer le caractère situé sous le curseur par celui qu’on saisit à sa suite. Une fois le second caractère saisi, on est toujours en mode commande.

La commande cw (change word) remplace la fin du mot à partir de la position du curseur par ce qui est saisi à sa suite. Elle passe pour cela en mode insertion.

La commande C (change) remplace la fin de la ligne à partir de la position du curseur par ce qui est saisi à sa suite. Elle passe pour cela en mode insertion.

La commande cc remplace la ligne par une ligne vide et passe en mode insertion.

Zone d’exercice
La ligne ci-dessous contient des caractères incorrects. Remplacez-les par les
bons en vous déplaçant dessus et en utilisant la commande r :

Le Lamousin a dit : chaussotte droita, ureille gauchi !

La ligne ci-dessous contient des mots dont la terminaison est incorrecte.
Corrigez-les en vous déplaçant dessus et en utilisant la commande cw :

Le Limouton a dit : chaussure droite, organe gauche !

La fin de la ligne ci-dessous est incorrecte. Remplacez-la en vous déplaçant au
bon endroit et en utilisant la commande C :

Le Limousin a dit : chaussette droite, panier à linge !

La ligne ci-dessous est totalement incorrecte. Remplacez-la par la bonne en
vous déplaçant dessus et en utilisant la commande cc :

C'est en forgeant qu'on devient forgeron.

Exécution multiple

Il est possible d’exécuter n fois la même commande en la préfixant par ce nombre. Ainsi, on peut effacer 5 lignes au moyen de 5dd.

On peut répéter la dernière commande à l’identique, sans avoir besoin de la retaper, au moyen de . (point). C’est l’une des caractéristiques les plus appréciées des amateurs de vi.

Zone d’exercice
La ligne ci-dessous contient 50 fois le caractère x. Placez-vous au début de la
ligne et effacez 10 caractères au moyen de la commande 10x puis répétez cette
action au moyen de la commande . (point) autant de fois que nécessaire pour
supprimer toute la ligne :

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Copier-coller, couper-coller

La commande yy (yank) copie la ligne sur laquelle se situe le curseur. Comme nous venons de le voir, on peut préfixer cette commande par un nombre afin de copier autant de lignes. Ainsi, la commande 5yy copie cinq lignes (celle sur laquelle se situe le curseur et les quatre situées au-dessous).

Après s’être déplacé au bon endroit, on peut utiliser deux commandes pour coller (paste) la ou les lignes copiées :

  • p les colle au-dessous de la ligne sur laquelle se situe le curseur ;

  • P les colle au-dessus de la ligne sur laquelle se situe le curseur.

Dans les deux cas, le reste du document est décalé vers le bas.

Zone d’exercice
Copiez la ligne ci-dessous en vous plaçant sur celle-ci puis en utilisant la
commande yy :

ceci est la ligne à copier

Puis collez-la au-dessous de la ligne suivante en vous plaçant sur celle-ci
puis en utilisant la commande p :

collez la ligne au-dessous

La ligne copiée est toujours en mémoire. Vous pouvez la coller au-dessus de la
ligne suivante en vous plaçant sur celle-ci puis en utilisant la commande P :

collez la ligne au-dessus

Vous pouvez vous entraîner à copier-coller plusieurs lignes en copiant celles
ci-dessous :

ligne à copier 1
ligne à copier 2
ligne à copier 3
ligne à copier 4
ligne à copier 5

et en les collant ici :

collez les lignes au-dessous ou au-dessus

Le couper-coller s’effectue selon le même principe. Il utilise la commande dd vue précédemment pour couper la ligne sur laquelle se situe le curseur. Là encore, on peut préfixer cette commande par un nombre afin de couper autant de lignes. Ainsi, la commande 5dd coupe cinq lignes (celle sur laquelle se situe le curseur et les quatre situées au-dessous).

Pour coller, on utilise les commandes p ou P.

Zone d’exercice
Coupez la ligne ci-dessous en vous plaçant sur celle-ci puis en utilisant la
commande dd :

ceci est la ligne à couper

Puis collez-la au-dessous de la ligne suivante en vous plaçant sur celle-ci
puis en utilisant la commande p :

collez la ligne au-dessous

La ligne coupée est toujours en mémoire. Vous pouvez la coller au-dessus de la
ligne suivante en vous plaçant sur celle-ci puis en utilisant la commande P :

collez la ligne au-dessus

Vous pouvez vous entraîner à couper-coller plusieurs lignes en coupant celles
ci-dessous :

ligne à couper 1
ligne à couper 2
ligne à couper 3
ligne à couper 4
ligne à couper 5

et en les collant ici :

collez les lignes au-dessous ou au-dessus

Annulation

L’erreur est humaine. Et il arrive régulièrement de commettre une erreur par mégarde. Il est alors possible d’annuler la dernière modification apportée au document en utilisant la commande u (undo). En répétant cette commande, on annule l’avant-dernière modification et ainsi de suite.

Zone d’exercice
Vous pouvez utiliser différentes commandes de modification du document (x, dw,
D, dd...) sur les lignes ci-dessous, puis tester l'effet de la commande u :

ligne de test 1
ligne de test 2
ligne de test 3
ligne de test 4
ligne de test 5

Il existe une autre forme d’annulation, permettant d’annuler la saisie d’une commande comprenant plusieurs caractères (celles ne consistant que d’un caractère ayant un effet instantané). Il s’agit tout simplement de la touche d’échappement.

Zone d’exercice
En mode commande, tapez d, comme si vous vouliez faire dw ou dd puis annulez
cette commande au moyen de la touche d'échappement.

Sauvegarder

Tant que vous ne sauvegardez pas votre fichier, toutes les modifications que vous lui avez apportées ne sont stockées que dans la mémoire vive de l’ordinateur et risquent donc d’être perdues en cas de coupure de courant ou d’arrêt inopiné du système. Il faut donc sauvegarder régulièrement sur disque le fichier sur lequel on travaille au moyen de la commande :w (write).

Zone d’exercice
En mode commande, tapez :w pour sauvegarder le fichier.

Recherche, remplacement

La recherche s’effectue au moyen de la commande / (barre oblique) suivie de la suite de caractères à rechercher (le tout s’affiche au bas de l’écran) et en termimant par la touche <Entrée>. À partir de sa position actuelle, le curseur est alors déplacé sur la première occurrence de cette suite de caractères vers le bas du fichier.

On peut ensuite se déplacer :

  • sur l’occurrence suivante au moyen de la commande n (next) ;

  • sur l’occurrence précédente au moyen de la commande N.

On peut également effectuer une recherche vers le haut du fichier en la débutant par la commande ? (point d’interrogation).

Zone d’exercice
Le mot « cassoulet » ne figure nulle part ailleurs que dans cette zone
d'exercice. Déplacez le curseur quelque part au-dessus, voire au début du
fichier, et effectuez une recherche sur le mot « cassoulet » en saissant
/cassoulet suivi de la touche <Entrée>. Puis testez l'effet des commandes n et
N.

Déplacez ensuite le curseur au-dessous de cette zone d'exercice, voire en fin
de fichier, et effectuez une recherche arrière sur le mot « cassoulet » en
saissant ?cassoulet suivi de la touche <Entrée>. Puis testez l'effet des
commandes n et N.

La syntaxe de la recherche et remplacement est plus compliquée mais le mécanisme est extrêmement puissant (nous n’en verrons d’ailleurs qu’une petite partie). On commence par saisir un : (deux-points) suivi :

  • d’un % (pour cent) pour effectuer une recherche et remplacement dans tout le fichier ;

  • de deux numéros de ligne séparés par une virgule pour effectuer une recherche et remplacement entre ces deux lignes (comprises).

Vient ensuite un s (substitute) qui indique qu’on souhaite effectuer une recherche et remplacement, puis un / (barre oblique) qui fait office de séparateur, puis la suite de caractères à rechercher, puis un autre /, puis la suite de caractères à utiliser comme remplacement, puis un dernier /. On ajoute généralement un g pour effectuer un traitement global. En effet, sans cela, lorsqu’une ligne contient plusieurs occurrences de la suite de caractères à rechercher, seule la première sera remplacée, ce qui n’est généralement pas ce qu’on veut. Enfin, on valide la saisie au moyen de la touche <Entrée>.

La recherche et remplacement est alors immédiatement effectuée.

Zone d’exercice
Le mot « blanquette » ne figure nulle part ailleurs que dans cette zone
d'exercice. Nous allons le remplacer par « garbure ». Pour cela, saisissez :

:%s/blanquette/garbure/g

et constatez le résultat au-dessus ainsi que sur les lignes ci-dessous.

Comment est votre blanquette ? La blanquette est bonne.
Comment est votre blanquette ? La blanquette est bonne.
Comment est votre blanquette ? La blanquette est bonne.

Vous pouvez essayer l'opération inverse sans l'option g pour expérimenter son
effet.

Divers

Pour réunir deux lignes, on utilise la commande J (join). La ligne sur laquelle se situe le curseur et la ligne suivante fusionnent pour n’en plus former qu’une seule. Une espace est automatiquement ajoutée entre les deux anciennes lignes.

Zone d’exercice
Réunissez les deux lignes ci-dessous en déplaçant le curseur sur la première et
en utilisant la commande J :

ligne 1
ligne 2

La commande ~ (tilde) :

  • change la casse du caractère situé sous le curseur (capitale en bas de casse et inversement) ;

  • déplace le curseur vers la droite.

Il est donc facile de changer totalement la casse d’une suite de caractères en utilisant la commande ~ plusieurs fois de suite.

Zone d’exercice
Déplacez le curseur au début du mot ci-dessous et changez sa casse en utilisant
la commande ~ cinq fois de suite :

CASSE

Essayez ensuite l'opération inverse avec la commande 5~ (exécution multiple).

Quitter

Pour quitter, on utilise la commande :q (quit). Si le fichier en cours d’édition a été modifié mais pas sauvegardé, l’opération est refusée.

Pour quitter même si le fichier en cours d’édition a été modifié mais pas sauvegardé, on utilise la commande :q! (avec un point d’exclamation).

Plus généralement, on quittera l’éditeur tout en sauvegardant préalablement le fichier. Pour cela, il existe trois commandes :

  • :wq

  • :x

  • ZZ

Vous avez l’embarras du choix.

Zone d’exercice
Testez l'effet de ces commandes.