Skip to content

VI - L'éditeur de texte atypique

« vi » ... Les informaticiens devant travailler sous UNIX, Linux ou BSD, qu'ils soient exploitants, ingénieurs de production, administrateurs système, développeurs, etc ... ont déjà entendu ce nom. Et pour ceux qui ont dû travailler avec cet éditeur de texte, pour la plupart d'entre-eux cela leur rappelle une expérience - disons - spéciale, voire frustrante, car « vi » est un éditeur de texte très atypique, du fait de son mode d'édition pouvant sembler totalement contre-intuitif. Et pourtant ...

Je vais essayer de démystifier l'ovni qu'est « vi » pour que vous puissiez enfin l'utiliser sans en avoir peur ... Voire en tomber amoureux et du coup abandonner votre éditeur de texte favori.

Pour l'anecdote, tous les textes de mon blog sont saisis sous « vim », le clone de « vi » le plus puissant et le plus répandu.

Retour dans le passé

Projetons nous quarante ans plus tôt. Plus précisément cette superbe année 1976 où « vi » est né (comme moi d'ailleurs). Bill Joy, alors étudiant à l'université de Californie, située à Berkeley (UCB - University of California, Berkeley), travaille sur un nouveau mode d'édition de texte visuel pour l'outil « ex », outil fonctionnant sous UNIX et permettant d'éditer du texte, mais seulement ligne à ligne. De part sa simplicité, sa puissance et les améliorations qu'il apporte par rapport à « ex », ce nouveau mode d'édition visuel est très rapidement adopté par les utilisateurs de l'époque, tant et si bien que lors de la première release de BSD Unix en 1978, il devient de-facto l'éditeur de base du système sous le nom de « vi » (signifiant simplement « VIsual mode »). Bon, le fait que Bill Joy était responsable de produire cette première release de BSD n'y est peut-être pas étranger non plus.

Petite note sur sa prononciation : cela ne se prononce pas « vé-i », mais « vie-aïe ». Le fait que cela représente le chiffre romain « 6 » est totalement le fruit du hasard, ne cherchez pas de relation particulière entre les deux.

Bon, c'était la version résumée très rapidement de l'histoire. Pour la version longue, vous pourrez la trouver en cherchant un tout petit peu sur internet. On va maintenant passer aux choses sérieuses ...

Fonctionnement

Les modes

Pour commencer, il est important de comprendre que « vi » est un éditeur modal, c'est à dire qu'il possède deux modes principaux :

  • un mode « commande ».
  • un mode « insertion ».

Le mode par défaut est le mode « commande ». Pourquoi vous direz-vous ? Et bien cela permet de spécifier à l'éditeur comment vous allez éditer le texte que vous allez saisir, modifier, supprimer, etc ... Cela vous paraîtra plus clair dans quelques instants.

Le mode « commande »

C'est le mode principal de « vi ». C'est aussi celui qui lui offre toute sa puissance et qui permet à l'utilisateur d'être productif.

Tout d'abord il faut comprendre que « vi » possède plusieurs commandes, toutes matérialisées par une lettre, voire deux, ces commandes pouvant être altérées à l'aide de modificateurs.

Le mode « édition »

Le mode « édition » permet simplement de saisir les caractères de votre texte. Ici rien de bien extravagant. Pour revenir au mode « commande », il suffit de frapper la touche « Echap ».

Commandes

Ce billet n'a pas la prétention de remplacer la documentation de « vi ». Seront listées ci-après la majorité des commandes, mais en aucun cas l'intégralité. Le nombre de commandes peut effrayer, mais au final les noms sont logiques et simples à retenir.

Il est à noter que l'immense majorité des commandes peuvent être précédées d'un nombre permettant de signaler combien de fois la commande doit-être répétée.

  • « 3dd » signifie « couper 3 lignes ».
  • « 5cw » signifie « modifier 5 mots ».
  • « 10Ifoobar{Echap} » signifie « ajouter 10 fois le mot foobar en début de ligne ».
  • « 80aZ{Echap} » signifie « ajouter 80 fois le caractère Z après le caractère courant ».

De même certaines commandes comme copier/couper/coller peuvent être précédées d'un nom de tampon avant le nombre de répétitions. Ce nom de tampon est le caractère double-quote suivi d'une lettre minuscule de d'alphabet.

  • « "ayy » signifie « copier la ligne courante dans le tampon a ».
  • « "z5p » signifie « coller 5 fois ce qui est contenu dans le tampon z ».

Pour résumer, la majorité des commandes peuvent être saisies ainsi :

  • {commande}
  • [répétitions]{commande}
  • [tampon][répétitions]{commande}

Gestion des fichiers

Commande Description
:e Recharge le fichier s'il n'y a pas eu de modifications.
:e! Recharge le fichier même s'il y a eu des modifications.
:e {fichier} Edite le fichier spécifié.
:r Ajouter le fichier courant après la ligne courante.
:r {fichier} Ajouter le fichier spécifié après la ligne courante.
:w {fichier} Enregistre dans le fichier spécifié.
:n Passe au fichier suivant.
:q Quitter s'il n'y a pas eu de changements.
:q! Quitter même s'il y a eu des changements.
:wq Enregistrer et quitter.
:x Enregistrer et quitter.
ZZ Enregistrer s'il y a eu des changements et quitter.

Se déplacer

Commande Description
h Déplace le curseur à gauche.
j Déplace le curseur en bas.
k Déplace le curseur en haut.
l Déplace le curseur à droite.
w Déplace le curseur vers le début du mot suivant.
W Déplace le curseur vers le début du mot suivant délimité par un espace.
b Déplace le curseur vers le début du mot précédent.
B Déplace le curseur vers le début du mot précédent délimité par un espace.
e Déplace le curseur vers la fin du mot courant/suivant.
E Déplace le curseur vers la fin du mot courant/suivant délimité par un espace.
( Déplace le curseur vers le début de la phrase courante.
) Déplace le curseur vers le début de la phrase suivante.
{ Déplace le curseur vers le paragraphe précédent.
} Déplace le curseur vers le paragraphe suivant.
% Se déplace vers le caractère associé « () », « {} » ou « [] ».
0 Déplace le curseur au début de la ligne.
$ Déplace le curseur à la fin de la ligne.
G Déplace le curseur à la dernière ligne.
{n}G Déplace le curseur vers la ligne {n}.
f{c} Déplace le curseur vers le caractère {c} suivant.
F{c} Déplace le curseur vers le caractère {c} précédent.
T Déplace le curseur en haut de l'écran.
M Déplace le curseur au milieu de l'écran.
L Déplace le curseur en bas de l'écran.
:{ligne} Déplace le curseur vers la ligne spécifiée.
Ctrl+B Remonter d'une page.
Ctrl+F Descendre d'une page.
Ctrl+G Affiche les informations sur la dernière ligne.

Editer

Commande Description
a Ajoute du texte après le curseur.
A Ajoute du texte en fin de ligne.
i Insère du texte avant le curseur.
I Insère du texte en début de ligne.
o Ajoute une ligne après la ligne courante.
O Ajoute une ligne avant la ligne courante.
r Remplace le caractère courant.
R Remplace une suite de caractères.
x Efface le caractère courant.
X Efface le caractère précédent.
J Joindre la ligne suivante à la ligne courante.

Modifier

Commande Description
C Modifie du caractère courant jusqu'à la fin de ligne.
cc Modifie toute la ligne.
cw Modifie du caractère courant jusqu'à la fin du mot.
c$ Modifie du caractère courant jusqu'à la fin de ligne.

Copier

Commande Description
Y Copie la ligne courante.
yy Copie la ligne courante.
yw Copie du caractère courant jusqu'à la fin du mot.
y$ Copie du caractère courant jusqu'à la fin de ligne.
:y Copie la ligne courante.

Couper

Commande Description
D Coupe du caractère courant jusqu'à la fin de ligne.
dd coupe la ligne courante.
dw Coupe du caractère courant jusqu'à la fin du mot.
d$ Coupe du caractère courant jusqu'à la fin de ligne.
:d Coupe la ligne courante.

Coller

Commande Description
p Colle ce qui est présent dans le tampon après le curseur ou après la ligne courante.
P Colle ce qui est présent dans le tampon avant le curseur ou avant la ligne courante.

Divers

Commande Description
. Répéter la commande précédente.
~ Inverser la casse des caractères.
u Défaire.
Ctrl+R Refaire.

Chercher

Commande Description
/{regex} Recherche en avant l'expression régulière.
?{regex} Recherche en arrière l'expression régulière.
n Recherche l’occurrence suivante.
N Recherche l’occurrence précédente.

Remplacer

Commande Description
:s/{regex}/{chaine}/{drapeaux} Remplace l'expression régulière avec la chaine spécifiée.
  • Le drapeau « c » demande une confirmation pour chaque occurrence.
  • Le drapeau « g » permet de remplacer toutes les occurrences de chaque ligne.

Entraînez-vous

Avec un peu d'exercice, votre productivité est rapidement décuplée. La mise de fond étant d'apprendre les commandes de base, le reste n'étant que pratique. Avec une bonne pratique des expressions régulières, editer des textes avec « vi » devient une tâche incroyablement simple et rapide, le tout sans que les mains ne quittent jamais le clavier.

What else ?

J'espère que dorénavant vous n'aurez plus peur d'utiliser « vi » et qu'il deviendra pour vous un outil d'édition de texte que vous utiliserez naturellement.

Une coquille, une faute ?

Vous constatez une coquille, une faute d'orthographe ou de grammaire ? Dites-le moi par mail !

Rétroliens

Pas de rétroliens

Commentaires

Afficher les commentaires en Vue non groupée | Vue groupée

Pas de commentaires

L'auteur n'a pas autorisé l'ajout de commentaires pour ce billet.

Ajouter un commentaire


Pour éviter le spam par des robits automatisés (spambots), merci d'entrer les caractères que vous voyez dans l'image ci-dessous dans le champ de fomulaire prévu à cet effet. Assurez-vous que votre navigateur gère et accepte les cookies, sinon votre commentaire ne pourra pas être enregistré.
CAPTCHA

Form options

Les commentaires postés doivent être approuvés avant d'être affichés dans le blog.