L'incontournable éditeur VI

Christophe Chisogne

Mercredi 18 octobre 2000


Cet article présente l'éditeur par excellence du monde Unix/Linux, à savoir vi. Rapide, puissant et compact, vi est l'éditeur de tout administrateur qui se respecte. Son utilisation n'étant pas vraiment naturelle, il faut apprendre à le dompter. Une fois cet effort accompli, on a du mal à s'en passer. Cet article vous apprendra les parties qui me paraissent les plus utiles.

1. A propos de cet article

Cet article a été rédigé pour servir au plus grand nombre, mais il est orienté vers un public d'informaticiens ou d'étudiants en informatique plutôt qu'au grand public. Il devrait être plus adapté aux novices en matière de Unix/Linux, avec évidemment une forte orientation vers Linux.

Si vous avez des commentaires sur cet article, n'hésitez surtout pas à m'envoyer un email ( mailto:christophe.chisogne@fundp.ac.be). Ceci permettra d'améliorer progressivement ce document, qui se trouve sur le site web du NamurLUG, le groupe d'utilisateurs de Linux de Namur. Vous pourrez le trouver sur http://www.namurlug.org.

Cet article a été rédigé au format ''linuxdoc'', ce qui a l'avantage de pouvoir générer des fichiers HTML, TXT ou RTF pour un accès aisé, mais aussi des fichiers PS ou PDF pour une impression haute qualité.

Le format ''linuxdoc'' n'est qu'une DTD SGML : les fichiers dans ce format sont donc des textes bruts parsemés de balises (tags). Cet article a donc pu être entièrement rédigé avec vi, l'éditeur qui y est présenté.

2. Édition de textes sous Linux

Une des tous premiers utilitaires dont on a besoin sur tout système d'exploitation, c'est un éditeur de texte. Par ''texte'', j'entends bien sûr les textes ''brut'', sans formatage.

Sur les systèmes de type Unix, on est certain de trouver le célèbre éditeur vi, même sur les systèmes très anciens : vi est livré en standard sur tous les Unix, ce qui en fait l'éditeur à base installée la plus large, le plus utilisé.

Il en existe un autre, GNU/Emacs, très performant et très versatile. Écrit par Richard Stallman lui-même (alias RMS), Emacs sait éditer des textes, lire des mails ou des news, lancer un shell, etc. Mais il n'est pas toujours installé, car il occupe beaucoup plus d'espace disque.

2.1 Qu'est-ce que vi ?

vi, est une abréviation pour ''VIsual editor''. C'est une extension de ed et ex, deux éditeurs plus anciens ne pouvant éditer les fichiers que ligne par ligne. Mais vi est tout de même un éditeur plein écran.

vi est rapide, puissant et compact : il tient sur une disquette de boot, capacité que lui envient pas mal d'autres éditeurs. Sous Linux existe une version améliorée de vi. Il s'agit de vim, pour ''VI iMproved''.

Il est tout de même nettement conseillé d'utiliser vim plutôt que vi, car il dispose d'un certain nombre de fonctionnalités supplémentaires que d'aucun jugerait indispensable d'un point de vue confort. Néanmoins, en cas de gros problème nécessitant de rebooter sur disquette, il vaut mieux savoir utiliser vi pur, étant donné que plus rien d'autre n'est possible, dans ce cas.

2.2 Fonctionnalités de vi

Dans la suite, le terme ''vi'' réfèrera à ''vim'', par facilité et abus de langage. Les fonctionnalités de vi sont bien plus élevées que celles attendues d'un éditeur texte par les utilisateurs de systèmes non Unix/Linux. Parmi celles-ci, on trouve notamment

2.3 Cas où vi est particulièrement adapté

L'administration sous Linux consiste souvent à éditer des fichiers de configuration en mode texte. C'est à ce niveau que l'on a un contrôle maximal sur ce qui peut se passer sur son système : il n'y a pas d'interface graphique qui cache les détails.

L'outil idéal de modification des fichiers de configuration en mode texte est incontestablement vi. Une fois qu'il est suffisamment maîtrisé, il n'est pas impossible d'avoir terminé une édition avec vim alors que la même édition sous Emacs en est encore au stade du chargement de l'éditeur.

Pour l'édition de scripts vim est aussi un maître-achat. Il existe d'ailleurs un nombre considérable de formats de fichiers textes pour lesquels vim utilise une coloration syntaxique appropriée.

Les seuls cas où l'on pourrait se dire que vim n'est pas l'éditeur idéal, c'est sans doute dans le cadre de projets plus importants. Lorsque l'on édite plus d'une vingtaine de fichiers simultanément, ça devient vite lourd. Dans ces cas, le besoin de plugins se fait sentir, et Emacs, l'éditeur le plus personnalisable au monde, remplit parfaitement cette tâche.

3. Concepts de base sous vim

Avant de commencer à expliquer les commandes utilisés sous vim, il est indispensable d'avoir bien compris les quelques principes de base de vim. Ils surprennent souvent le débutant, par leur caractère peu répandu.

3.1 Edition de fichiers

Pour lancer vim, rien de plus simple. Il suffit de taper son nom:

vim
Pour éditer un fichier, il suffit de passer son nom en paramètre:
vim monfichier.txt

L'édition se passe comme l'on peut s'y attendre. Le fichier à éditer est chargé en mémoire. vim utilise le terme ''buffer'' pour se référer aux fichiers édités, car ils sont placés en mémoire dans des ''buffers''. Ensuite, après avoir apporté toutes les modifications voulues au buffer, on peut l'écrire sur disque (sans quoi elles sont bien sûr perdues). L'écriture peut bien sûr se faire sous un autre nom, afin de garder intacte la version originale du fichier. Tout ceci est un fonctionnement classique bien connu.

3.2 Modes utilisés par vim

Les modes de travail utilisés par vim sont nettement moins naturels. Ils rebutent souvent le débutant, au premier abord. Mais une fois le pas franchi, ce système s'avère diablement efficace.

vim possède trois grands modes, entre lesquels on switche souvent :

  1. Le mode saisie ou insertion. C'est le mode que tout le monde connaît : lorsque l'on frappe des touches au clavier, les lettres sont insérées telles quelles dans le fichier texte. C'est le fonctionnement classique des autres éditeurs.
  2. Le mode commande est plus inhabituel. C'est le mode dans lequel on donne des commandes simples à effectuer sur le texte : déplacement dans le buffer, suppression d'éléments, remplacement d'un mot, etc. Dans ce mode, chaque lettre tapée lance la commande correspondante !
  3. Le mode ex, ou ligne de commandes. Mode similaire au précédent, il permet d'entrer des commandes, mais plus complexes cette fois. Dans ce mode, on tape une commande complexe après l'invite (:), et on la valide par la touche ENTER. Ces commandes groupe notamment les recherches/remlacement par expression régulière, l'écriture des buffers dans des fichiers, la sortie de vim, etc.

3.3 Changer de mode

Les deux premiers modes sont les plus utilisés au début. Au lancement de vim, on se trouve en mode commande. Pour pouvoir entrer du texte, il faut donc passer en mode insertion.

Pour passer en mode insertion lorsqu'on est en mode commande, il suffit de donner la commande i (insert) pour passer en mode insertion et insérer des caractères à partir de la position sous le curseur. Une alternative est de donner la commande a (append) pour passer en mode insertion et insérer des caractères à partir de la position qui suit celle sous le curseur.

Après avoir entré le texte souhaité, il faut revenir au mode commande, y compris si la commande qu'on veut donner est un simple déplacement dans le texte ! Pour sortir du mode insertion, il suffit d'appuyer sur la touche Escape. On peut alors entrer des commandes simples (déplacement dans le texte, suppression de la ligne courante, etc.

Le troisième mode devient vite indispensable pour profiter de la puissance de vim. Pour y rentrer (à partir du mode commande), on tape le caractère d'invite (:). vim passe alors en mode ligne de commande. Il attend que l'utilisateur tape sa commande complexe validée par la touche Enter. vim exécute alors la commande complexe (recherche, remplacement, etc), puis revient tout seul en mode principal, le mode commande.

Il faut évidemment constamment passer du mode commande au mode insertion, ce qui paraît abominablement lourd, a priori. Cependant, les avantages contrebalancent largement ces inconvénients. Une fois l'habitude prise, ce sont les modes plus classiques d'édition de texte qui paraissent contre-naturels !

Comme d'habitude sous Linux, il faut mettre les mains dans le cambouis : lancer vim, essayer les quelques commandes, chipoter un peu pour bien assimiler le concept, etc. Ce n'est qu'au fil du temps passé à s'exercer que l'investissement consenti devient extrêmement rentable.

3.4 Comment sortir de vim ?

Une question angoissante est : comment sortir de vim ? La manière classique est celle du mode ligne de commande (ex). Cela consiste à taper la ligne suivante, en validant par Enter:

:q!
Cette commande ''complexe'' (:) fait sortir de vim (q), sans enregistrer les modifications (!).

Une autre manière classique est d'utiliser la commande simple

ZZ
Cette commande (en mode commande, naturellement) fait sortir de vim, mais en enregistrant les éventuelles modifications.

3.5 Principes généraux de vim

Dans le mode ligne de commande (ex), vim utilise un certain nombre de conventions qu'il est très utile de connaître.

Une première convention est l'utilisation du caractère !. En ajoutant ce caractère directement après la commande, on obtient une version légèrement modifiée de la commande. Ainsi, :q sort de vim, sauf si le buffer a été modifié, tandis que :q! sort de vim même si le buffer a été modifié (càd avec perte des modifications, dans ce cas).

Une seconde convention est similaire à son équivalent sous Emacs : c'est la notion de répétition. En préfixant une commande par un nombre X (dans le mode commande ou ligne de commande/ex), on obtient le même effet que si on avait entré X fois la commande sans ce nombre. Ainsi, pour la commande dd qui supprime la ligne courante, la commande 5dd a pour effet de supprimer 5 lignes (comme si on avait tapé 5 fois la commande dd.

Après avoir rapidement passé en revue ces différents principes, on peut raisonnablement se lancer dans l'exploration de vim. Il suffira de donner une liste des commandes les plus utilisées, et de faire des essais sur machine pour voir si l'on a bien compris. Sous Linux, la meilleure façon de faire est bien souvent l'auto-formation par l'action (de préférence après présentation des concepts par une personne compétente).

4. Utilisation basique de vim

Il est temps de passer à la pratique, en appliquant les principes vus ci-dessus. Une première façon de faire est de lancer le tutoriel de vim. Pour ce faire, lancer, au niveau du shell, la commande

vimtutor
Si cette commande n'est pas disponible, ce n'est pas très grave. Il suffit de copier le fichier texte
/usr/share/vim/tutor/tutor
dans son répertoire personnel, puis de lancer vim en lui passant l'emplacement de la copie comme fichier à éditer (premier paramètre de la commande vim).

Une autre façon est de lire la documentation système (un peu longue), et de se mettre à la tâche. Pour ce genre de solution, autant lire d'abord ce qui suit avant de revenir à la doc complète : ce sont les formes les plus utilisées de vim.

4.1 Commandes de déplacement

Une des premières choses à connaître, ce sont les commandes de déplacement au sein d'un fichier. Parmi les très nombreuses, voici les plus utilisées. Il en existe encore d'autres, mais elles ne sont pas vraiement indispensables dans une utilisation standard (sauf pour les utilisateurs très avancés).

Déplacement d'une unité

Pour se déplacer d'un caractère (en mode commande), les commandes suivantes sont disponibles :

Ceci a l'air fort primitif, mais est indispensable sur les claviers qui ne disposent pas des touches fléchées ! Pour les autres claviers, l'utilisation des touches fléchées est possible.

Déplacement au sein d'une ligne

Voici comment se déplacer à l'intérieur de la ligne courante :

Les commandes ''f'' et ''t'' sont un peu spéciales. Elles acceptent comme argument un caractère. Par exemple: ''fp'' déplace le curseur sous le prochain caractère ''p'' de la ligne. C'est pratique pour un déplacement plus rapide au sein d'une ligne, mais surtout en association avec la commande ''d'' de suppression. Ainsi, ''df.'' supprime (d) tout depuis la position du curseur jusqu'au premier caractère ''.'' de la ligne (f.). Ceci correspond à la suppression de la fin de phrase courante.

La commande 't'' est utile aussi. Lorsqu'on édite du HTML, il est souvent utile de supprimer le texte du curseur jusqu'au prochain début de tab, non inclusif. Pour réaliser cela, la commande est ''dt<'', ce qui signifie supprimer les caractères à partir du curseur jusqu'au prochain caractère ''<'' de la ligne, non inclusivement.

Déplacements entre lignes

4.2 Commandes de changement de mode

En mode commande, lorsque l'on se trouve sur un caractère donné, on peut passer en mode insertion avec, principalement:

4.3 Commandes de suppression

Toujours en mode commande, voici quelques commandes utiles de suppression.

4.4 Commandes de modification

En mode commande, voici les commandes principales pour substituer du texte:

4.5 Commandes ''Fichiers''

4.6 Commandes couper-copier-coller

5. Commandes plus avancées

Vim possède aussi un certain nombre de fonctionnalités bien plus avancées. Les plus utiles parmi celles-ci sont présentées ci-dessous.

5.1 Recherches et remplacement

Pour chercher une occurence, il suffit de définir le terme recherché.

Pour remplacer une occurence, on précise en plus le terme de remplacement lorsque l'occurence est trouvée:

5.2 Sélection

Il est possible de définir un block sur lequel effectuer des actions plus tard. C'est la sélection telle qu'on la connaît habituellement.

Une fois la sélection effectuée, on peut effectuer des actions similaires à celles du couper-coller, et plusieurs autres. Par exemple:

5.3 Coloration syntaxique

5.4 Insertion d'un autre fichier texte

:r filename pour inclure le contenu du fichier ''filename'' à partir de la position du curseur.

5.5 Lancer un sous-shell

Pour lancer une commande shell, taper :! commande, en remplaçant commande par la commande désirée. C'est pratique dans de nombreux cas. Exemples:

5.6 Edition multi-fichiers

6. Pour aller plus loin

''Linux in a nutshell, a desktop quick reference'', est une excellente référence à avoir sur son bureau. On y trouve un condensé et des rappels sur les commandes de bases de Linux, sur les shells de type sh et csh, sur les expressions régulières, sur les éditeurs vi et emacs, les langages sed, awk, et perl, sur les gestionnaires de version RCS et CVS, etc. Comme souvent sous Linux, ce livre est disponible aux très bonnes éditions O'Reilly.

Pour en savoir plus sur vim, il suffit de consulter la documentation disponible sur son système (man, info, /usr/doc/vim/*). On trouve également un tutoriel nommé ''vimtutor''. Enfin, vim possède une documentation intégrée, accessible à l'intérieur de vim par la commande :help (:q pour sortir de l'aide et revenir à vim).

Si vous avez encore des questions après avoir lu tout cela, il vous reste deux possibilités: consulter un gourou local, voire lire le code source (pour une éventuelle modification).