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 :
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.
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.
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.
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.
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.
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.
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é.
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.
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.
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.
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.
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.
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.
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).
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).
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.
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.
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.
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.
Testez l'effet de ces commandes.