Initiation à Vi

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Tous les utilisateurs de Linux ont Vi par défaut sur leur système, mais rares sont ceux qui savent l'utiliser. Partons à la découverte de cet éditeur si utile.

2 Pourquoi est-ce que j'utiliserais Vi ?

Si vous avez déjà eu l'occasion de voir quelqu'un en train d'apprendre à se servir de Vi, vous aurez sûrement remarqué que cela se traduit souvent par de nombreux jurons, et beaucoup d'énervement... Et pourtant, quelques moments de prise de tête sur le clavier pourront vous rendre bien des services.

2.1 C'est quoi ce truc compliqué

Vi, que vous prononcerez [vi:aj] si vous voulez être dans le coup, est l'éditeur de base de tous les systèmes Unix. Il fonctionne en mode console, sur tous les types de terminaux, et permet de lire, écrire et corriger des fichiers. Vi est basé sur le rudimentaire Ex, éditeur ligne par ligne : c'est en fait le résultat de la commande visual d'Ex, qui fait passer le fichier édité du mode ligne par ligne au mode plein écran. En clair, cela permet de voir le contenu du fichier sur lequel on veut intervenir.

Il est beaucoup plus puissant que d'autres éditeurs en mode graphique ou semi-graphique, tels Gedit ou Xedit, car il dispose de très nombreuses fonctionnalités qui n'existent pas par ailleurs. L'inconvénient, c'est que pour maîtriser les outils que Vi propose, il est nécessaire de se former à une syntaxe particulière, puisque Vi fonctionne en tapant des commandes spécifiques à ce programme. En plus, il y en a beaucoup, et elles ne ressemblent pas toujours à quoi que ce soit que vous ayez vu auparavant.

Utiliser Vi nécessite donc un apprentissage fastidieux. On se propose ici de vous donner quelques clés pour débuter, et pour vous montrer à quel point ce petit éditeur tout léger est pratique.

2.2 Comment ça fonctionne ?

Pour compliquer un peu les choses, Vi est un éditeur modal, c'est-à-dire que les touches que vous enfoncez ne vont pas avoir le même effet, en fonction du mode dans lequel vous êtes. Il y en a trois :

  • le mode insertion : c'est avec ce mode que vous allez pouvoir insérer du texte dans votre fichier ;
  • le mode commande : en mode commande, vous pouvez déplacer le curseur dans le texte, et taper un grand nombre de commandes qui vous permettront de multiples opérations, telles que la recherche de chaînes de caractères, leur déplacement, remplacement...
  • le mode Ex ou ligne de commande : il s'agit des commandes de l'éditeur Ex, qui ne fonctionnent pas tout à fait comme celles de Vi.

Au démarrage de Vi, on est en mode commande. On entre dans le mode insertion en tapant une des commandes d'insertion, que l'on va voir ci-dessous (i I a A o O). Pour en sortir, on tape [Esc], ce qui nous ramène au mode commande. Pour entrer en mode Ex, il faut taper : ou /, et les commandes ne sont lancées que lorsque vous tapez [Enter].

Le tout est de ne pas se tromper de mode ! Si l'on est en mode texte et que l'on croit être en mode commande, toute commande que l'on croit lancer ajoute du texte; vice versa, lorsque l'on se croit en mode texte, quelques caractères que l'on croit insérer peuvent avoir des conséquences fâcheuses s'ils se révèlent lancer des commandes d'effacement par exemple ! Et il est vrai que cela arrive souvent au début...

2.3 A quoi ça va me servir ?

Alors pourquoi est-ce qu'on irait s'embêter avec cet éditeur si compliqué ? Eh bien, tout simplement parce qu'un jour ou l'autre vous en aurez forcément besoin, et qu'il vaut mieux être préparé à cette éventualité ! Est-ce qu'il vous est déjà arrivé de ne pas pouvoir démarrer X, et d'avoir à bidouiller dans ses fichiers de configuration ? Est-ce que vous avez déjà eu à accéder à un ordinateur à distance et à modifier les options de fonctionnement de son système ? Et puis, sans aller chercher des situations compliquées, Vi est aussi très pratique pour faire de la programmation, que ce soit pour un simple script shell, ou pour utiliser des langages complexes.

3 Premiers pas avec Vi

Pour se servir de Vi, il est nécessaire de procéder par étapes, sinon on est vite surpassé par le nombre de commandes à mémoriser. On va d'abord voir ici quelques démarches basiques, qui suffisent à une utilisation régulière de Vi, mais qui ne permettent pas d'en découvrir toute l'efficacité.

3.1 Éditer, sauvegarder un fichier et quitter Vi

Pour démarrer Vi, il suffit de taper son nom dans une console. Ouvrir un fichier n'est pas bien plus compliqué :

Command vi
vi mon_fichier.txt

Votre fichier s'ouvre et remplit presque tout le terminal, sauf la dernière ligne qui affiche quelques informations le concernant : c'est sur cette dernière que vous taperez vos commandes, et que les messages d'erreur apparaîtront.

Pour quitter Vi, il faudra taper la commande :q.

Si mon_fichier.txt n'existait pas encore, il sera créé lors du lancement de la commande $ vi mon_fichier.txt. Mais attention, il faudra l'enregistrer pour qu'il soit sauvegardé. Pour cela, c'est la commande :w qu'on utilise.

Prenez donc l'habitude avant de quitter Vi de lancer un petit :wq. Si vous avez modifié votre fichier, mais ne le sauvegardez pas en quittant, Vi vous le dira avec un message d'erreur:

File modified since last complete write; write or use ! to override.

Pour forcer à quitter sans sauvegarder les modifications, on utilise donc :q!.

3.2 Se déplacer dans un fichier

Expliquer comment se déplacer dans un fichier peut paraître assez bête... Mais il faut penser que Vi a été construit alors que les touches de déplacement du clavier n'existaient pas ! Si on peut les utiliser, il est bon de connaître les commandes à utiliser, au cas où :

  • h déplace le curseur d'un caractère à gauche ;
  • l déplace le curseur d'un caractère à droite ;
  • j déplace le curseur d'une ligne au-dessous ;
  • k déplace le curseur d'une ligne au-dessus ;
  • $ déplace le curseur sur le dernier caractère de la ligne ;
  • 0 (zéro) déplace le curseur sur le premier caractère de la ligne.

A ces commandes de déplacement basiques s'en ajoutent d'autres, bien plus performantes. On n'en évoquera ici que quelques-unes :

  • [Ctrl] + [F] permet d'avancer le curseur d'un écran ;
  • [Ctrl] + [B] permet de reculer le curseur d'un écran ;
  • G amènera votre curseur sur la dernière ligne du fichier ;
  • 3G amènera le curseur sur la troisième ligne du fichier ;
  • 3w ou 3b déplaceront le curseur de trois mots vers la droite ou vers la gauche ;
  • 3| amènera le curseur à la troisième colonne du fichier.

3.3 Écrire et corriger

Venons-en maintenant aux choses sérieuses, et insérons du texte dans notre fichier. Vi possède toute une série de commandes qui permettent de passer du mode commande au mode insertion, de différentes manières :

  • après avoir tapé a, vous insérerez votre caractère après le curseur ;
  • i insère le caractère avant le curseur ;
  • A insère le texte après le dernier caractère de la ligne courante ;
  • I insère le texte au début de la ligne courante ;
  • o insère le texte dans une nouvelle ligne au-dessous de la ligne courante ;
  • O insère le texte dans une nouvelle ligne au-dessus de la ligne courante.

Corriger votre texte présente avec Vi tout autant de possibilités (pensez bien à sortir du mode insertion en tapant [Esc] pour effectuer des corrections) :

  • x efface le caractère qui se trouve sous le curseur ; combiné à un facteur de répétition, la même commande effacera le nombre de caractères précisé à partir du curseur (exemple : 4x) ;
  • dw efface les caractères depuis celui qui se trouve sous le curseur et jusqu'au début du mot suivant, espace compris ; 5dw effacera les cinq mots suivant le caractère sous le curseur ;
  • D efface toute la ligne à partir du caractère sous le curseur ;
  • dd efface la ligne courante ; 4dd effacera quatre lignes à partir de la ligne courante ;
  • rt remplacera le caractère sous le curseur par le caractère t ; rb le remplacera par b, etc. ;
  • C remplace toute la ligne à partir du caractère sous le curseur par ce que vous taperez ensuite, l'insertion devant se terminer par [Esc] ;
  • ~ changera la casse du caractère sous le curseur : une minuscule deviendra une majuscule, et vice versa.

En cas d'erreur, vous avez aussi la possibilité d'utiliser la commande u, qui annule la dernière modification effectuée dans le texte.

4 Configurer Vi

A ce stade, et pour vous éviter pas mal de déconvenues, on va vous donner un truc... Il est possible de savoir à tout moment dans quel mode de fonctionnement de Vi on se trouve... Pour cela, passez en mode commande, ou vérifiez que vous y êtes en tapant [Esc], et tapez la commande :

Command
:set showmode

Puis, lancez la commande avec [Enter]. À partir de ce moment, et pour toute la session en cours, vous verrez apparaître le mode dans lequel vous vous trouvez à droite de la ligne de commande : Insert ou Command. Pratique, non ? Vous venez en fait de modifier la configuration par défaut de Vi. Et il existe de nombreuses autres options de configuration.

4.1 Les options de configuration de Vi

La commande :set all vous donnera un aperçu de l'ensemble des options de configuration de Vi. Avec la commande :set, vous verrez uniquement les options par défaut que vous avez modifiées. Les options de Vi fonctionnent pour la plupart comme des commutateurs. Pour activer une option, on tape :set Nom_option et pour la désactiver :set noNom_option. Voici un aperçu des options utiles pour commencer :

  • showmode / noshowmode : pour activer ou désactiver l'affichage du mode dans lequel on se trouve ;
  • verbose / noverbose : par défaut, lorsque Vi ne peut effectuer ce que vous lui demandez, le programme vous en avertit par un bip sonore ; l'option verbose transforme ce bip en message écrit, très utile pour débuter ;
  • number / nonumber : cette option permet de numéroter les lignes du fichier ;
  • wrapscan / nowrapscan : lorsque vous effectuez une recherche dans votre fichier, l'activation de cette option permettra de continuer la recherche au début du texte ; sinon la recherche est stoppée à la fin du texte ;
  • showmatch / noshowmatch : cette option est très utile pour la programmation : elle permet, à chaque fois que vous fermez une accolade ou une parenthèse, de mettre en surbrillance l'accolade ou la parenthèse d'ouverture correspondante, pendant quelques secondes.

4.2 Rendre les modifications de configuration permanentes

Les modifications d'options que vous effectuez durant une session de Vi ne sont pas sauvegardées. Lorsque vous quittez le programme, elles s'annulent, et la configuration par défaut est réinitialisée au lancement suivant.

Pour rendre ces modifications permanentes, il est nécessaire de créer dans votre répertoire personnel un fichier .exrc :

Command
cd
vi .exrc

Indiquez ensuite dans le fichier créé les options que vous souhaitez démarrer avec Vi en notant leur nom précédé de set (sans les :) :

Configuration File ~/.exrc
set verbose
set showmode
set number

Puis sauvegardez et quittez avec :wq.

5 Fonctionnalités avancées=

Maintenant, vous en savez déjà assez pour utiliser Vi de manière tout à fait profitable. Voici toutefois un petit aperçu de quelques fonctions avancées, pour vous démontrer que Vi n'a rien à envier à un éditeur graphique.

5.1 Copier – coller

Vi dispose d'une mémoire tampon dont on peut ensuite copier le contenu là où on le souhaite dans le texte.

La commande yy ou Y copie dans la mémoire tampon la ligne courante, et 8yy copie huit lignes à partir de cette même ligne. La commande P insère le contenu de la mémoire tampon avant la ligne courante, et p l'insère après.

On peut aussi copier une série de caractères...

  • y$ pour copier jusqu'à la fin de la ligne ;
  • y8w pour copier huit mots à partir du mot courant ;
  • ... pour ensuite la coller où l'on veut avec p et P.

On notera aussi que tout ce qui est effacé est également gardé en mémoire tampon. On peut donc facilement faire un couper-coller. Par exemple, ddp effacera la ligne courante et la copiera en dessous de la ligne suivante.

5.2 Rechercher – remplacer

Deux commandes permettent de rechercher une chaîne de caractères dans un fichier :

  • /chaîne permet de chercher les occurrences de chaîne vers l'avant à partir de la position du curseur ;
  •  ?chaîne permet de chercher les occurrences de chaîne vers l'arrière.

Ces deux commandes sont activées en tapant [Enter]. Le curseur vient alors se placer sur le premier caractère de la chaîne trouvée.

Pour continuer la recherche dans la même direction, on utilise la commande n ; pour la poursuivre dans la direction opposée, on utilise N.

Si Vi ne trouve pas l'occurrence, le message Pattern not found apparaît. Lorsqu'une recherche a été fructueuse, la fin de la recherche est indiquée par le message "Reached end-of-file without finding the pattern" ou "Reached top-fo-file without finding the pattern".

Si vous aviez préalablement activé l'option wrapscan, la recherche s'effectuera dans la totalité du document, et le message annonçant la fin de la recherche devient Search wrapped.

Vi permet également de remplacer des chaînes de caractères recherchées par d'autres. C'est la commande s qu'on utilisera cette fois. Elle s'active en ligne de commande, si bien qu'on l'introduit avec :, et on la lance avec [Enter]. Son fonctionnement suppose plusieurs options. La syntaxe de base est la suivante :

Command
:s/chaîne_à_remplacer/chaîne_de_remplacement/

Cette commande remplace la première occurrence des caractères spécifiés dans la ligne courante. Il est possible de préciser la ligne ou la suite de lignes où l'on veut effectuer le remplacement :

Command
:1,3s/chaîne_à_remplacer/chaîne_de_remplacement/

remplace la première occurrence de chaque ligne de la ligne 1 à la ligne 3. Notez que . désignera la ligne active, et $ la dernière ligne du fichier.

Il est possible aussi de préciser que toutes les occurrences sur une même ligne doivent être remplacées, en ajoutant l'option g :

Command
:s/chaîne_à_remplacer/chaîne_de_remplacement/g

Pour qu'une confirmation vous soit demandée avant chaque remplacement, vous ajouterez l'option c :

Command
:s/chaîne_à_remplacer/chaîne_de_remplacement/c

Vous répondrez alors au message Confirm change? par y (yes) ou n (no).

Et voilà ! Vous pouvez désormais utiliser Vi de manière tout à fait efficace !! Entraînez-vous, et vous pourrez ensuite découvrir ses fonctionnalités expertes !

6 Ressources

http://www.unixgarden.com/index.php/comprendre/initiation-a-vi