Court didacticiel sur Vi(m)
À quoi sert ce didacticiel
Ce didacticiel n’est pas exhaustif pour un sous et ce n’est pas son objectif du tout. L’objectif est de donner au lecteur une vue de Vi(m) et de lui donner un indicateur des commandes les plus utiles en moins de 10 minutes.
Bien que je ne couvre que Vi et Vim, la plupart des commandes indiquées s’appliquent à tous les éditeurs Vi like (Elvis, Neovim …)
Un peu d’histoire
Vim est un dérivé de l’éditeur de texte vi, ce dernier est le descendant de ex. Dans le milieu des années 70, alors que l’utilisation d’un terminal se généralise, le besoin pour un éditeur pleine page se fait sentir. Deux éditeurs vont naître de ce besoin:
- Vi
- Emacs
Vi est devenu un standard de facto et fait même parti des commandes standard selon la norme POSIX. Ce qui fait qu’on le trouve, d’une façon ou d’une autre sur tous les systèmes d’exploitation qui se réclament de prêt ou de loin de POSIX ou d’UNIX, de Mac OS X à Linux en passant par HP-UX ou FreeBSD. Bien sur, plus personne n’utilise, pour se faire, le Vi d’origine écrit par Bill Joy. Elvis ou Vim ou l’un des nombreux éditeurs Vim like l’ont remplacé depuis longtemps.
Ce qui fait que vous soyez développeur, devops ou administreur système, la connaissance des commandes de Vi est un impératif car vous rencontrerez cet éditeur à un moment ou à un autre de votre carrière.
Les modes de Vi
Vi dispose de trois modes distincts:
- Le mode de commandes.
- Le mode d’insertion.
- Le mode de la dernière ligne.
Par défaut, lorsque vous lancez Vi, vous êtes en command mode. On peut faire plein de chose dans ce mode, dont les plus communes:
- j Ligne suivante
- k Ligne précédente
- h Caractère précédent
- l Caractère suivant
On peut précéder n’importe la quelle de ces commande par un chiffre pour indiquer le nombre de fois qu’il faudra appliquer la commande:
- 7j 7 lignes plus bas
- dd Supprime la ligne courante
- yy Copie la ligne courante
- dw Supprime le reste du mot courant
- yw Copie le reste du mot courant
- P Colle ce qui a été copié ou supprimé
- x Supprime le caractère sous le curseur
- u Annule la dernière action (Vi annule toujours la dernière commande, si vous appuyez deux fois sur u, la seconde annule l’annulation. Sur Vim, u remonte l’historique des changement et CTRL-r annule l’annulation).
On peut passer en mode insertion par la commande i (insert), a (append) et r (remplace le caractère sous le curseur).
En mode insert, on rentre du texte. On ne peut rien faire d’autre que rentrer du texte.
On sort du mode insert avec la touche Esc qui nous renvoie en mode command.
Depuis le mode command, on passe en mode last line avec la touche :. Le curseur se place alors sur la dernière ligne de l’écran, juste après un :. Là encore, on peut faire plein de choses dans ce mode, dans tous les cas, on en sort avec la touche Enter.
- %s/toto/tata/g remplace toutes les occurrences de “toto” par “tata” dans tout le texte.
- s/toto/tata remplace la première occurrence de “toto” par “tata” dans la ligne courante.
- 1,3d supprime les lignes 1 à 3.
- 4,$y copie de la ligne 4 à la fin du texte.
Un ordre donné dans ce mode est composé de deux parties, une première indique sur quelle partie du texte s’applique l’ordre:
- 1,4 de la ligne 1 à 4
- 1,$ de la ligne 1 à la dernière ligne.
- % tout le texte
- si vous ne précisez rien, l’ordre s’appliquera à la ligne courante.
Les ordres les plus utiles sont:
- y pour copier dans le presse papier
- d pour supprimer
- s/pat1/pat2/ pour remplacer “pat1” par “pat2”. Si on le demande tel quel, seulement la première occurrence de “pat1” dans chaque ligne sera remplacée. Si on rajoute un “g” à la fin, toutes les occurrences de “pat1” seront remplacées.
- w pour sauver le fichier (on peut rajouter un “!” pour forcer l’écriture)
- q sortir de Vi
- wq sauver et sortir.
Bref, pour quitter Vi lorsque vous éditer du texte, sortez du mode insert avec Esc, puis taper :wq suivi de la touche Enter.