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é.
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.
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.
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
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.
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.
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.
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 :
:
),
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.
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.
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.
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).
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.
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).
Pour se déplacer d'un caractère (en mode commande), les commandes suivantes sont disponibles :
Voici comment se déplacer à l'intérieur de la ligne courante :
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.
En mode commande, lorsque l'on se trouve sur un caractère donné, on peut passer en mode insertion avec, principalement:
Toujours en mode commande, voici quelques commandes utiles de suppression.
En mode commande, voici les commandes principales pour substituer du texte:
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.
Pour chercher une occurence, il suffit de définir le terme recherché.
set ic
pour ignorer la casse lors des recherches
(ne pas différencier majuscules et minuscules)set noic
pour ne pas ignorer la casse lors des recherches
(recherche case-sensitive, celle par défaut)Pour remplacer une occurence, on précise en plus le terme de remplacement lorsque l'occurence est trouvée:
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:
:r filename
pour inclure le contenu du fichier ''filename''
à partir de la position du curseur.
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:
:! sgml2html -l fr -c latin1 -s 1 fichier.sgml
pour
générer les pages html correspondant au fichier source linuxdoc que l'on
édite:! sort
pour trier les lignes du fichier par ordre
alphabétique. Ce type de commande peut même agir sur un bloc, s'il a été
sélectionné avant.
''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).