Manuel de l'Utilisateur Expérimenté Solaris

Chapitre 6 Utilisation de l'éditeur vi

vi (prononcé "vi-aï", abréviation d'éditeur pleine page) est l'éditeur de texte standard de SunOS. Comme vi ne fonctionne pas en multi-fenêtrage, il peut être utilisé sur un terminal quelconque pour l'édition d'un grand nombre de formats de fichiers.

Sans être un traitement de texte à proprement parler car il n'est pas conçu pour traiter des textes formatés, cet éditeur permet de saisir et d'éditer un texte. Pour générer des impressions formatées, l'éditeur vi a recours à un programme d'émulation de composeur, tel que nroff, troff ou ditroff. Ce programme permet de formater un texte créé sous vi en insérant des codes qui sont ensuite interprétés par l'émulateur.

vi contient un grand nombre de commandes, dont la plupart ont des fonctions qui se recoupent. Ceci peut être assez déroutant pour les nouveaux utilisateurs. Toutefois, ce chapitre a pour objectif de vous offrir un aperçu des principales commandes vi. Lorsque vous commencerez à utiliser vi, vous vous apercevrez qu'il s'agit d'un éditeur de texte extrêmement performant, et qu'il vous faudra un certain temps avant d'être opérationnel.

Il existe une version de vi en lecture seule, appelée view. Lorsque vous ouvrez un fichier sous view, vous pouvez utiliser les commandes vi, mais vous ne pouvez pas écrire (ou sauvegarder) vos modifications. Cette version permet de consulter un fichier vi sans risquer de le modifier par erreur.

Lancement de vi

Les sous-sections suivantes vous expliquent comment démarrer vi, saisir du texte dans un fichier, sauvegarder (écrire) ce fichier et quitter vi. Vous allez également pouvoir créer un fichier d'entraînement qui vous servira pour la suite de ce chapitre.

Création d'un fichier

Démarrez vi, puis éditez le fichier paint comme indiqué dans cet exemple :

$ vi paint

Si le fichier paint existe déjà, vi ouvre le fichier existant ; s'il s'agit d'un nouveau fichier, vi le crée. Dans le but de l'exercice, paint doit être un nouveau fichier.

L'écran d'édition de vi suivant apparaît :

Figure 6-1 L'écran d'édition de vi

Graphic

Le curseur apparaît dans le coin supérieur gauche de l'écran. Les lignes blanches sont désignées par une série de tildes (~) placés les uns en-dessous des autres.

Vous pouvez également démarrer vi sans préciser de nom de fichier, en entrant simplement vi. Vous pourrez alors nommer le fichier au moment où vous quitterez l'éditeur.

La ligne d'état

La dernière ligne de l'écran, appelée ligne d'état, contient le nom du fichier et le nombre de lignes et de caractères qu'il comporte. Lorsque vous créez un fichier, comme dans notre exemple, la ligne d'état signale qu'il s'agit d'un nouveau fichier.

Les deux modes de l'éditeur vi

L'éditeur vi offre deux modes de fonctionnement : le mode insertion et le mode commande. Le mode insertion permet de saisir du texte dans un fichier, alors que le mode commande permet d'entrer des commandes exécutant des fonctions vi particulières. Le mode commande est utilisé par défaut.

Comme vi n'indique pas le mode en cours, les nouveaux utilisateurs ont souvent du mal à opérer la distinction entre les deux modes. Mais, il vous suffit de retenir quelques concepts fondamentaux dès le départ pour éviter de connaître l'habituel "stress vi."

Lorsque vous ouvrez pour la première fois un fichier sous vi, vous êtes toujours en mode commande. Avant de pouvoir saisir dans ce fichier, vous devez taper l'une des deux commandes d'entrée vi suivantes : i ("insérer") pour insérer du texte à l'emplacement du curseur ou a ("ajouter") pour insérer du texte après le curseur. (L'utilisation de ces commandes et d'autres commandes d'entrée vi est décrite plus en détail dans la suite de ce chapitre.)

Pour repasser en mode commande, appuyez sur Esc. Si vous ne savez plus dans quel mode vous vous trouvez, appuyez sur Esc pour vous assurer que vous êtes bien en mode commande, puis continuez. Si vous appuyez sur Esc alors que vi est déjà en mode commande, le système émet un signal sonore et l'écran clignote, mais cela n'a pas d'importance.

Mode insertion

Pour insérer du texte dans le fichier d'entraînement paint, entrez la commande d'insertion i de vi. vi quitte le mode commande et passe en mode insertion.

Entrez ensuite quelques courtes lignes de texte, en appuyant sur Return à la fin de chacune d'elles. Les caractères entrés apparaissent à gauche du curseur et repoussent les caractères existants vers la droite. Pour l'instant, vous pouvez corriger vos erreurs en effectuant un retour en arrière à l'aide de la touche Back Space et en retapant la ligne avant d'appuyer sur Return. Vous apprendrez plus tard à éditer le texte que vous avez entré.

Lorsque vous avez fini d'insérer votre texte dans le fichier paint, appuyez sur Esc pour repasser en mode commande. Le curseur se positionne sur le dernier caractère saisi. Vous pouvez alors entrer d'autres commandes vi.

Si, selon vous, vi a un comportement inattendu, vérifiez que vous n'êtes pas en mode "Caps Lock". Dans ce cas, le texte saisi apparaît en majuscules. Sur certains systèmes, la touche F1 (généralement située à côté de la touche Esc) a la même fonction que la touche Caps Lock. Il peut donc vous arriver d'appuyer dessus par erreur au lieu d'appuyer sur Esc.


Remarque :

vous pouvez être appelé à effacer ou à rafraîchir l'écran afin de supprimer, par exemple, les messages intempestifs du système. Pour rafraîchir l'écran, passez en mode commande et appuyez sur Ctrl-L. Cette opération correspond à la commande Rafraîchir d'OpenWindows.


Mode commande

Lorsque vous ouvrez un fichier sous vi, vous vous trouvez en mode commande. Ce mode vous permet d'entrer des commandes qui mettent en oeuvre un grand nombre de fonctions. La plupart des commandes vi se composent d'une ou deux lettres et d'un chiffre en option. Il existe généralement une version des commandes en majuscules et une version en minuscules. Ces deux versions assurent des fonctions apparentées mais néanmoins distinctes. Par exemple, la commande a permet d'ajouter les caractères tapés à la droite du curseur, alors que la commande A permet de les ajouter à la fin de la ligne.

La plupart des commandes vi s'exécutent sans que vous ayez besoin d'appuyer sur Return. Il est toutefois nécessaire de le faire pour les commandes commençant par deux points (:). Il arrive que l'on classe ces commandes dans un troisième mode vi, le mode dernière ligne. Car lorsque vous entrez deux points en mode commande, les deux points et ce qui suit s'affichent sur la dernière ligne de l'écran. Mais il ne faut pas oublier que toutes les commandes vi sont lancées à partir du mode commande.

Les commandes précédées de deux points sont en fait des commandes ex. vi et ex sont deux interfaces distinctes du même logiciel d'édition de texte. Alors que vi est une interface orientée écran, ex est une interface orientée ligne. Toutes les commandes ex sont disponibles à partir de l'éditeur vi. Lorsque vous appuyez sur la touche ":", vous passez en fait à l'interface orientée ligne, ex. Cela vous permet d'exécuter de nombreuses commandes de manipulation de fichiers sans quitter vi. Pour plus d'informations, reportez-vous à la section "Utilisation des commandes ex"", dans le présent chapitre.

Fermeture d'une session

Lorsque vous éditez un fichier sous vi, les modifications ne sont pas effectuées directement dans ce fichier, mais dans une copie de ce dernier créée par vi dans un espace de mémoire temporaire appelé buffer. La version permanente du fichier sur le disque n'est modifiée que lorsque vous écrivez (sauvegardez) le contenu du buffer.

Cette méthode a des avantages et des inconvénients. D'un côté, vous pouvez quitter un fichier en annulant toutes les modifications apportées au cours d'une session d'édition et en laissant la version du disque intacte. Mais d'un autre côté, vous pouvez perdre le contenu (non sauvegardé) du buffer de travail en cas de blocage du système. (Les utilisateurs de terminaux distants, connectés via des lignes téléphoniques, sont particulièrement vulnérables à ces interruptions inattendues.)

Il vaut donc mieux sauvegarder votre travail régulièrement, et, à plus forte raison, si vous y apportez des modifications substantielles.


Attention : Attention :

Graphicbien qu'il soit possible d'ouvrir plusieurs sessions vi simultanément sur un même fichier, cela n'est pas recommandé. Vous pourriez avoir des difficultés à distinguer les modifications entrées dans le fichier de celles qui s'y sont superposées au cours d'une session simultanée.


Sauvegarde des modifications et sortie de vi

vi offre bon nombre de commandes plus ou moins synonymes permettant de sauvegarder le contenu du buffer dans un fichier et de quitter vi. Ces commandes vous offrent la possibilité de sauvegarder, de sauvegarder et quitter ou de quitter sans sauvegarder.

Sauvegarde

Pour sauvegarder le contenu du buffer (c'est-à-dire l'écrire dans le fichier du disque), entrez :

:w

et appuyez sur Return.

Sauvegarde et sortie

Pour sauvegarder et quitter, entrez :

:wq

et appuyez sur Return. Vous pouvez également taper ZZ.

La commande ZZ ne doit pas être précédée de deux-points ni suivie de Return.

Sortie sans sauvegarde

Si vous n'avez apporté aucune modification à un fichier et que vous souhaitez simplement le quitter, entrez :

:q

et appuyez sur Return. Si vous avez apporté des modifications, vi ne vous permettra pas de quitter le fichier à l'aide de la commande :q. Il affichera le message : No write since last change (:quit! overrides).

Si vous ne voulez pas sauvegarder les modifications que vous avez apportées, entrez :

:q!

et appuyez sur Return.

Impression d'un fichier

Une fois que vous avez quitté un fichier vi, vous pouvez l'imprimer à l'aide de la commande suivante :

$ lp nom_fichier

nom_fichier désigne le nom du fichier vi à imprimer. L'impression est envoyée à l'imprimante par défaut. Le fichier est alors imprimé non formaté, ligne par ligne, tel qu'il apparaît à l'écran. Pour plus d'informations sur les commandes d'impression, reportez-vous au Chapitre 8".

Les commandes de base vi

La présente section décrit plusieurs catégories de commandes vi permettant :

Déplacement dans un fichier

Dans les sections précédentes, vous avez appris à créer, sauvegarder, imprimer et quitter un fichier vi. Maintenant que vous avez créé un fichier, vous devez connaître les concepts qui vous permettront de vous déplacer dans ce fichier. Ouvrez votre fichier d'entraînement et essayez, l'une après l'autre, les commandes décrites dans cette section.

Déplacement du curseur

Lorsque vous démarrez vi, le curseur se situe dans le coin supérieur gauche de l'écran vi. En mode commande, plusieurs commandes clavier vous permettent de déplacer le curseur : certaines touches alphabétiques, les touches de déplacement (flèches), les touches Return, Back Space (ou Del) et la barre d'espacement.


Remarque :

la plupart des commandes vi font la distinction entre majuscules et minuscules. Ainsi, la "même" commande, selon qu'elle est entrée en caractères minuscules ou majuscules peut avoir des effets radicalement différents.


Déplacement à l'aide des flèches

Si votre clavier dispose de touches de déplacement (flèches), essayez-les. Vous devez pouvoir déplacer le curseur librement à l'écran à l'aide des flèches de déplacement vers le haut, vers le bas, vers la droite et vers la gauche. Mais ces flèches vous permettent uniquement de vous déplacer dans un texte ou des champs de saisie déjà existants.

Si vous utilisez vi à partir d'un terminal distant, les touches de déplacement du curseur peuvent ne pas fonctionner correctement. Cela dépend de l'émulateur de votre terminal. Si ces touches ne fonctionnent pas, vous pouvez utiliser à la place :

Déplacement mot par mot

Appuyez sur w ("word") pour déplacer le curseur mot par mot vers la droite.

Appuyez sur b ("back") pour déplacer le curseur mot par mot vers la gauche.

Appuyez sur W ou sur B pour déplacer le curseur du signe de ponctuation le plus proche au blanc suivant ou précédent.

Appuyez sur e ("end") pour positionner le curseur sur le dernier caractère du mot en cours.

Déplacement vers le début ou la fin d'une ligne

Appuyez sur ^ pour amener le curseur au début de la ligne en cours.

Appuyez sur $ pour amener le curseur à la fin de la ligne en cours.

Déplacement ligne par ligne

Appuyez sur la touche Return pour positionner le curseur au début de la ligne suivante.

Déplacement vers la gauche

Appuyez sur la touche Back Space pour déplacer le curseur d'un caractère vers la gauche.

Déplacement vers la droite

Appuyez sur la barre d'espacement pour déplacer le curseur d'un caractère vers la droite.

Déplacement vers le haut

Appuyez sur H ("high") pour amener le curseur en haut de l'écran.

Déplacement vers le centre

Appuyez sur M ("middle") pour amener le curseur au centre de l'écran.

Déplacement vers le bas

Appuyez sur L ("low") pour amener le curseur en bas de l'écran.

Pagination et défilement

Si vous essayez de vous déplacer vers le bas alors que le curseur se trouve en bas de l'écran ou vers le haut alors que ce dernier est en haut de l'écran, le texte défile vers le haut ou vers le bas. Dans un fichier de petite taille, cela permet d'afficher une plus grande partie de texte, mais il peut être fastidieux de se déplacer de cette manière dans un fichier plus long.

Vous avez pu constater que si vous positionnez le curseur au-delà du bas ou du haut de l'écran, le texte défilait vers le haut ou vers le bas. Si elle est intéressante pour les petits fichiers, cette méthode est fastidieuse pour les fichiers plus longs.

Vous pouvez feuilleter ou faire défiler un fichier, un écran ou un demi-écran vers l'arrière ou vers l'avant. (Vous pouvez entrer un peu plus de texte dans le fichier paint, de façon à obtenir un fichier plus long, pour pouvoir tester ces commandes.)

Il existe une différence fondamentale entre la pagination et le défilement. Le défilement consiste à déplacer le curseur ligne par ligne vers le haut ou vers le bas du texte, à la manière d'un rouleau de papier, alors que la pagination consiste à déplacer le curseur page-écran par page-écran vers le haut ou vers le bas du texte. Sur un système rapide, vous ne remarquerez peut-être pas la différence. Mais si vous travaillez sur un terminal distant ou dans toute autre condition susceptible de ralentir le fonctionnement de votre système, cette différence peut être très sensible.

Défilement d'une page-écran

Pour faire défiler une page-écran vers le bas, appuyez sur Ctrl-F ("Forward"). (Maintenez la touche Control enfoncée et appuyez sur la touche F.) Le curseur se positionne dans le coin supérieur gauche du nouvel écran.

Défilement d'un demi-écran vers l'avant

Pour faire défiler un demi-écran vers le bas, appuyez sur Ctrl-D ("Down").

Défilement d'un écran vers l'arrière

Pour faire défiler en arrière (vers le haut) une page-écran, appuyez sur Ctrl-B.

Défilement d'un demi-écran vers l'arrière

Pour faire défiler en arrière un demi-écran, appuyez sur Ctrl-U.

Insertion de texte

vi dispose de plusieurs commandes pour l'insertion de texte. Cette section décrit les plus utiles d'entre elles. Pour utiliser ces différentes commandes, qui font passer vi en mode insertion, vous devez vous trouver en mode commande. Pour vous en assurer, appuyez sur la touche Esc.

Ajout

La commande a (ajout) permet d'insérer du texte à la droite du curseur. Positionnez le curseur sur une ligne, tapez a, puis le texte à ajouter. Appuyez sur Esc lorsque vous avez terminé.

La commande A permet d'insérer du texte à la fin d'une ligne. Positionnez le curseur sur une ligne de texte, puis tapez A. Le curseur est renvoyé à la fin de la ligne, où vous pouvez insérer votre texte. Appuyez sur Esc lorsque vous avez terminé.

Insertion

Vous pouvez insérer du texte à la gauche du curseur en tapant i en mode commande.

La commande I permet d'insérer du texte en début de ligne. (Elle ramène le curseur en début de ligne, quelle que soit sa position sur la ligne.) Comme pour toutes les commandes décrites dans cette section, vous devez appuyer sur Esc pour repasser en mode commande après avoir entré le texte à insérer.

Ouverture de lignes

Les commandes suivantes permettent d'ouvrir de nouvelles lignes, que ce soit au-dessus ou en-dessous de la position courante du curseur.

Tapez o pour ouvrir une ligne au-dessous de la position courante du curseur, puis insérez, au besoin, quelques lignes de texte. Appuyez sur Esc lorsque vous avez terminé.

Tapez O pour ouvrir une ligne au-dessus de la position actuelle du curseur.

Remplacement de texte

Le remplacement de texte implique de substituer une partie de texte à une autre. L'utilisation des différentes méthodes de remplacement de texte de vi dépend des circonstances.

Remplacement d'un mot

Pour remplacer un mot, positionnez le curseur au début du mot à remplacer. Tapez cw, suivi du nouveau mot, puis appuyez sur Esc.

Pour remplacer une partie de mot seulement, positionnez le curseur sur le mot, à droite de la partie à conserver. Tapez cw, entrez la correction, puis appuyez sur Esc.

Remplacement d'une ligne

Pour remplacer une ligne, positionnez le curseur sur cette ligne et tapez cc. La ligne est remplacée par une ligne blanche sur laquelle vous pouvez saisir une nouvelle chaîne de texte, quelle que soit sa longueur. Appuyez ensuite sur Esc.

Remplacement d'une partie de ligne

Pour remplacer une partie de ligne seulement, positionnez le curseur à droite de la partie à conserver. Tapez C, entrez la correction, puis appuyez sur Esc. Cela modifie la partie comprise entre le curseur et la fin de la ligne.

Substitution de caractère(s)

Pour substituer un ou plusieurs caractères au caractère situé sous le curseur, tapez s, suivi du (ou des) nouveau(x) caractère(s). Appuyez sur Esc pour repasser en mode commande.

Remplacement d'un caractère

Cette commande permet de remplacer le caractère mis en évidence par le curseur par un autre caractère. Positionnez le curseur sur le caractère et tapez r, suivi d'un caractère de remplacement unique. Une fois le remplacement effectué, vi repasse automatiquement en mode commande (vous n'avez pas besoin d'appuyer sur Esc).

Inversion de caractères

Avec vi, il suffit d'appuyer sur deux touches pour corriger les caractères inversés. Par exemple, si vous vous apercevez que vous avez tapé "lse" à la place de "les", vous pouvez corriger cette erreur en positionnant le curseur sur la première lettre à déplacer (dans le cas présent, la lettre s), puis en tapant xp. Le s et le e seront intervertis et vi repassera automatiquement en mode commande.

Coupure et assemblage de lignes

Pour couper une ligne sans modifier le texte, amenez le curseur à l'endroit où vous souhaitez couper la ligne, tapez r (pour "remplacer"), et appuyez sur la touche Return. Si vous tapez r alors que le curseur est positionné sur un caractère et que vous appuyez sur Return, ce caractère sera remplacé par Return.

Pour réunir deux lignes, positionnez le curseur sur la ligne supérieure et tapez un J majuscule. (Vous n'avez pas besoin d'appuyer sur Esc après avoir tapé J.)

Annulation de modifications

Lorsque vous éditez un texte et que vous modifiez le contenu d'un fichier vi, vous pouvez être appelé à revenir sur vos modifications. Les commandes d'annulation de vi vous permettent d'annuler une opération et de poursuivre votre travail.

Annulation de la dernière commande

Si vous commettez une erreur sous vi ou si vous avez changé d'avis une fois l'opération terminée, vous pouvez annuler votre dernière commande en appuyant sur u immédiatement après l'exécution de cette dernière. (Vous n'avez pas besoin d'appuyer sur Esc après avoir tapé u.) Si vous appuyez sur u une seconde fois, la commande Défaire est annulée.

Annulation des modifications apportées à une ligne

Tapez U pour défaire toutes les modifications que vous avez apportées à une ligne. Cette commande fonctionne uniquement si vous n'avez pas déplacé le curseur en dehors de la ligne. (Vous n'avez pas besoin d'appuyer sur Esc après avoir tapé U.)

Suppression de texte

Ces commandes vi permettent de supprimer les caractères, mots ou lignes que vous avez indiqués. Etant donné que vi reste en mode commande, toute nouvelle insertion de texte devra être précédée d'une commande permettant de passer en mode insertion.

Suppression d'un caractère

Pour supprimer un caractère, positionnez le curseur sur le caractère à supprimer, puis tapez x.

La commande x supprime également l'espace qui était occupé par le caractère ; lorsqu'une lettre est supprimée au milieu d'un mot, les lettres restantes sont accolées. La commande x vous permet également de supprimer des espaces sur une ligne.

Pour supprimer un caractère précédant le (à gauche du) curseur, tapez X (en majuscule).

Suppression d'un mot ou d'une partie de mot

Pour supprimer un mot, positionnez le curseur au début du mot, puis tapez dw. Le mot et l'espace qu'il occupait sont supprimés.

Pour supprimer une partie de mot, positionnez le curseur sur le mot, à droite de la partie à conserver, puis tapez dw pour supprimer le reste du mot.

Suppression d'une ligne

Pour supprimer une ligne, positionnez le curseur sur la ligne, puis tapez dd. La ligne et l'espace qu'elle occupait sont supprimés.

Suppression d'une partie de ligne

Vous pouvez également supprimer une partie de ligne.

Pour supprimer tout le texte figurant à la droite du curseur, positionnez le curseur à droite de la partie à conserver, puis tapez D.

Pour supprimer tout le texte figurant à la gauche du curseur, positionnez le curseur à droite de la partie à supprimer, puis tapez d0 (d-zéro).

Suppression de la fin du fichier

Pour supprimer tout le texte figurant entre la ligne en cours et la fin du fichier, tapez dG. Cette commande supprime également la ligne sur laquelle figure le curseur.

Suppression du début du fichier

Pour supprimer tout le texte figurant entre le début du fichier et la ligne en cours, tapez d1G. Cette commande supprime également la ligne sur laquelle figure le curseur.

Copie et déplacement de texte : commandes Yank, Delete et Put

La plupart des traitements de texte permettent de "copier et coller" et de "couper et coller" des lignes de texte. L'éditeur vi comporte également ces fonctions. Les commandes vi correspondant à la fonction "copier-coller" s'appellent yank et put ; et celles correspondant à la fonction "couper-coller" s'appellent delete et put.

Pour copier ou déplacer de petits blocs de texte sous vi, vous devez utiliser la combinaison de commandes yank, delete et put.

Copie de lignes

Deux commandes sont nécessaires pour copier une ligne : yy ou Y ("yank") et p ("put below"), pour insérer la nouvelle ligne au-dessous de la ligne à copier, ou P ("put above") pour l'insérer au-dessus. Les commandes Y et yy ont la même fonction.

Pour copier une ligne, positionnez le curseur sur la ligne choisie et tapez yy. Ensuite, amenez le curseur sur la ligne située au-dessus de l'endroit où vous voulez insérer (copier) la ligne extraite, puis tapez p. La copie de la ligne extraite apparaît sur une nouvelle ligne située en-dessous du curseur.

Pour placer la ligne extraite sur une nouvelle ligne située en-dessus du curseur, tapez P.

La commande yy fonctionne également par comptage. Par exemple, si vous voulez extraire 11 lignes, il vous suffit de taper 11yy. Onze lignes sont extraites à partir de l'emplacement du curseur et vi vous le signale en affichant le message suivant en bas de l'écran : 11 lignes extraites.

Vous pouvez également lancer les commandes P ou p juste après l'une des comandes de suppression décrites plus haut. Le texte que vous avez supprimé sera inséré respectivement au-dessus et en-dessous du curseur.


Attention : Attention :

Graphicseules les commandes de déplacement du curseur sont autorisées entre la commande d'extraction ou de suppression et celle d'insertion. Si vous effectuez une autre suppression ou extraction avant d'avoir inséré le texte à son nouvel emplacement, les lignes extraites seront perdues.


Déplacement de lignes

Le déplacement de lignes fait également appel à deux commandes : dd ("delete"), puis p ou P.

Pour déplacer une ligne, positionnez le curseur sur la ligne choisie, puis tapez dd. Et si par exemple vous voulez déplacer 5 lignes, tapez 5dd.

Ensuite, amenez le curseur sur la ligne située en-dessus de l'endroit où vous voulez réinsérer la ligne supprimée, puis tapez p. Le texte est inséré sur une nouvelle ligne en-dessous du curseur.

Vous pouvez également insérer la ligne supprimée en-dessus du curseur en tapant P.

Utilisation de buffers nommés

Pour insérer un même ensemble de lignes à différents endroits dans un document, vous pouvez extraire (ou supprimer) ces lignes et les placer dans un buffer nommé. Pour attribuer un nom à un buffer, faites précéder la commande d'un guillemet (") et du nom du buffer. Par exemple, pour extraire quatre lignes et les placer dans le buffer a, tapez "a4yy. Vous pouvez utiliser plusieurs buffers. Ainsi, vous pouvez très bien supprimer un texte à un endroit et l'insérer à plusieurs endroits différents. Pour supprimer 12 lignes et les placer dans le buffer b,tapez "b12dd.

Pour insérer le texte, faites précéder la commande p ou P de "n, n étant le nom du buffer. Pour insérer les lignes sauvegardées dans le buffer b, tapez "bP.

Vous pouvez écraser le contenu des buffers nommés en insérant de nouvelles lignes de texte. Les buffers sont sauvegardés jusqu'à ce que vous quittiez vi.

Lorsque vous utilisez les buffers nommés, vous pouvez supprimer et extraire d'autres parties de texte sans que cela n'affecte les lignes déjà sauvegardées dans des buffers nommés (sauf si vous écrasez volontairement un buffer nommé).

Utilisation d'un comptage pour la répétition des commandes

De nombreuses commandes vi peuvent être précédées d'un facteur de répétition (appelé comptage). Un nombre précède la commande, indiquant combien de fois l'opération doit être répétée.

La plupart des commandes décrites dans les sections précédentes peuvent recevoir un comptage. Par exemple, 3dd active trois fois consécutives la commande de suppression de ligne, et supprime donc trois lignes,2dw supprime deux mots et 4x quatre caractères ou espaces. Vous pouvez également utiliser le comptage pour les commandes de déplacement du curseur telles que 3w et 2Ctrl-F. Vous vous familiariserez avec ces fonctions en apprenant à vous servir des commandes vi. A la section "Récapitulatif des principales commandes vi "" proposée à la fin du présent chapitre, les commandes pour lesquelles le comptage est possible portent la mention "[count]".

Si vous tapez un point (.), la dernière commande de modification de texte est répétée. Par exemple, si vous venez de supprimer une ligne à l'aide de la commande dd, vous pouvez positionner le curseur sur une autre ligne et supprimer cette dernière simplement en tapant un point.

Utilisation des commandes ex

Les commandes ex sont plus précises et plus pratiques que yank, delete et put pour le traitement de blocs de texte importants. Au lieu de compter les lignes à l'écran, puis de rechercher le point d'insertion, il vous suffit d'indiquer à vi une série de lignes à déplacer ou à copier, puis la ligne précédant le point d'insertion. (Il n'y a pas de point d'insertion pour les commandes de suppresssion.)

Affichage et suppression des numéros de lignes

Pour afficher les numéros de lignes, tapez :set nu et appuyez sur Return.

Les numéros de lignes s'affichent dans la marge de gauche. Uniquement visibles à l'écran, ils n'apparaissent pas à l'impression du fichier.

1 A te voir si bleu, si profond,
2 Et si brusquement, ô désert !
3 Comme les Grecs de Xénophon
4 Je me suis écrié : la mer !
~
~
~
~
~
~
:set nu

Pour supprimer les numéros de lignes, tapez :set nonu et appuyez sur Return.

Copie de lignes

La commande de copie ex présente le format général suivant :

:noligne,noligne co noligne

Les deux premiers nombres (séparés par une virgule) indique la série de lignes à copier. Le troisième désigne la ligne située avant le point d'insertion.

Par exemple, pour copier les lignes 1 à 5 du fichier paint et les insérer après la ligne 12, tapez :

:1,5 co 12

et appuyez sur Return.

Vous pouvez utiliser les abréviations suivantes pour indiquer des séries de lignes :

Ainsi, pour copier la série de lignes allant "de la ligne en cours à la ligne 5" et insérer ce bloc après la ligne 12, tapez :

:.,5 co 12

Pour copier la série de lignes allant "de la ligne 6 à la fin du fichier" et insérer ce bloc après la ligne 2, tapez :

:6,$ co 2

Déplacement de lignes

La commande de déplacement ex est analogue à la commande de copie décrite précédemment :

:noline,noline m noline

Les séries de lignes et les points d'insertion sont désignés de la même façon et les abréviations (. et $) sont les mêmes. La seule différence est que la fonction "déplacement" permet d'extraire un bloc pour l'insérer à un autre emplacement.

Par exemple, pour déplacer les lignes 1 à 5 en dessous de la ligne 12, tapez :

:1,5 m 12

et appuyez sur Return.

Suppression de lignes

Pour supprimer une série de lignes, utilisez la syntaxe de commande suivante :

:noligne,noligne d

Par exemple, pour supprimer les lignes 1 à 5, tapez :

:1,5 d

Recherche et remplacement avec vi

Il existe plusieurs façons de localiser une chaîne de caractères donnée dans un fichier avec vi, qui offre notamment une fonction de remplacement systématique très performante.

Recherche d'une chaîne de caractères

Une chaîne de caractères est composée d'un ou de plusieurs caractères consécutifs. Elle peut contenir des lettres, des chiffres, des signes de ponctuation, des caractères spéciaux, des espaces, des tabulations ou des retours chariot. Il peut s'agir d'un mot grammatical ou d'une partie de mot.

Pour rechercher une chaîne de caractères, tapez / suivi de la chaîne recherchée et appuyez sur Return. vi positionne le curseur sur la première occurrence de la chaîne trouvée. Par exemple, pour rechercher la chaîne "meta", tapez /meta et appuyez sur Return.

Tapez n pour passer à l'occurrence suivante de la chaîne ou N pour passer à l'occurrence précédente.

Pour effectuer une recherche en arrière dans un fichier, vous pouvez utiliser ? à la place de /. Dans ce cas, les directions n et N sont inversées.

Normalement, les commandes de recherche font la distinction entre majuscules et minuscules : une recherche du mot "chine" ne trouvera pas le mot "Chine." Pour éviter cette distinction, tapez :set ic. Pour revenir au mode par défaut, qui distingue les majuscules des minuscules, tapez :set noic.

Si vi trouve la chaîne recherchée, le curseur s'arrête à la première occurrence de cette dernière. Dans le cas contraire, vi affiche le message : Expression introuvable sur la dernière ligne de l'écran.

Certains caractères spéciaux ( / & ! . ^ * $ \ ?) ont une signification particulière pour le processus de recherche et doivent être «despécialisés» lorsqu'ils sont utilisés pour une recherche. Pour despécialiser un caractère spécial, faites-le précéder d'une barre oblique inversée (\). Par exemple, pour rechercher la chaîne "d'accord ?", tapez /d'accord\? et appuyez sur Return.

Etant donné que ces caractères spéciaux peuvent être interprétés comme des commandes par la fonction de recherche, vous devez indiquer qu'ils sont à inclure dans la chaîne recherchée en les faisant précéder d'une barre oblique inversée. Pour despécialiser une barre oblique inversée, tapez \\.

Affinement de la recherche

Vous pouvez affiner la recherche en associant à la chaîne des indicateurs signalant les états suivants :

Pour que la chaîne soit recherchée en début de ligne, faites-la précéder d'un caret (^). Par exemple, pour rechercher la prochaine ligne commençant par "Rechercher", tapez :

/^Rechercher

Pour que la chaîne soit recherchée en fin de ligne, faites-la suivre d'un symbole dollar ($). Par exemple, pour rechercher la prochaine ligne se terminant par "rechercher.", tapez :

/rechercher\.$

(Le point est despécialisé par la barre oblique inversée.)

Pour que la chaîne recherchée corresponde au début d'un mot, faites-la précéder de \< , et pour qu'elle corresponde à la fin d'un mot, faites-la suivre de \>. Ainsi, pour que la chaîne recherchée corresponde à un mot plutôt qu'à une chaîne, combinez les deux indicateurs de début et de fin de mot dans les attributs de la recherche. Par exemple, pour trouver la prochaine occurrence du mot (par opposition à la chaîne) "rechercher", tapez :

/\<rechercher\>

Pour remplacer une partie de la chaîne recherchée par n'importe quel caractère, tapez un point (.) dans la chaîne, à l'emplacement à partir duquel la concordance de caractères doit être trouvée. Par exemple, pour trouver la prochaine occurrence de "pain" ou "main", tapez :

/.ain

Comme il s'agit d'une recherche de chaîne et non de mot, ce modèle de recherche peut également trouver les occurrences de "pains" ou "mains".

Pour rechercher des variantes de caractères dans une chaîne, placez les variantes entre crochets. Le schéma de recherche /[pm]chaîne permettra de trouver les chaînes commençant soit par p, soit par m. D'autre part, /[m-p]chaîne permettra de trouver les chaînes commençant par une lettre de l'alphabet comprise entre m et p.

Pour que la chaîne recherchée corresponde à zéro, une ou plusieurs occurrences du dernier caractère, tapez un astérisque (*) dans la chaîne. Vous pouvez combiner les crochets et l'astérisque pour trouver des variantes déterminées. Par exemple, pour trouver toutes les chaînes commençant par une lettre de l'alphabet et se terminant par "information" et pour trouver toutes les occurrences de la chaîne "information", tapez :

/[a-z]*information

Remplacement d'une chaîne de caractères

La procédure de remplacement d'une chaîne de caractères repose sur le même principe que les procédures de recherche précédemment décrites. Toutes les concordances de caractères utilisées dans la fonction de recherche peuvent être également utilisées dans la fonction de recherche-remplacement.

Pour remplacer une chaîne de caractères, tapez :

:g/chaîne_recherchée/s//chaîne_ remplacement/g

et appuyez sur Return.

Pour remplacer toutes les occurrences de la chaîne "pain" par la chaîne "main", tapez :

:g/pain/s//main/g

et appuyez sur Return.

Vous pouvez modifier cette commande de telle sorte que vi interrompe la recherche et vous demande de confirmer le remplacement de chacune des occurrences. La commande suivante utilise gc (où c correspond à "confirmer"). Dans cette commande, vi s'arrête à chaque occurrence de "pain" et vous demande de confirmer le remplacement. Répondez par y pour oui ou par n pour non.

:g/pain/s//main/gc


Remarque :

vous pouvez annuler toute opération de recherche-remplacement avec demande de confirmation en appuyant sur Ctrl-C.


Passage à une ligne donnée

Pour passer à la dernière ligne d'un fichier ouvert, tapez G. Pour revenir à la première ligne, tapez 1G.

Vous pouvez accéder à n'importe quelle autre ligne en tapant le numéro correspondant, suivi de G.

Par exemple, si vous quittez le fichier paint lorsque la ligne 51 est en cours d'édition, vous pouvez réaccéder à cette ligne lors de l'ouverture du fichier en tapant 51G.

Insertion d'un fichier dans un autre

vi facilite la "lecture" (l'insertion) d'un fichier dans le fichier en cours d'édition grâce à une commande du type :

:noligne r nom_fichier

Si vous ne précisez pas de numéro de ligne, vi insère le fichier à l'emplacement du curseur.

Par exemple, pour insérer le fichier orwell à la ligne 84 du fichier paint, tapez :

:84 r orwell

ou positionnez le curseur sur la ligne 84 et tapez :

:r orwell

Edition de plusieurs fichiers

vi vous permet d'éditer plusieurs fichiers à la fois. Si vous voulez éditer le fichier orwell alors que le fichier paint est en cours d'édition, procédez comme suit :

  1. Commencez par sauvegarder votre travail en cours dans le fichier paint. Tapez :w et appuyez sur Return.

  2. Pour éditer le fichier orwell, tapez :n orwell et appuyez sur Return.

  3. Apportez des modifications d'édition dans le fichier orwell, puis sauvegardez votre travail.

  4. Une fois votre travail dans orwell terminé et sauvegardé, trois possibilités vous sont offertes :

    • Quitter vi en tapant :q et en appuyant sur Return.

    • Retourner au fichier paint en tapant :n no et en appuyant sur Return.

    • Basculer d'un fichier à l'autre à l'aide de la commande :n no.

Edition d'une série de fichiers

Pour éditer une série de fichiers lors du démarrage de l'éditeur, entrez le nom de ces fichiers à la suite de vi au niveau du prompt de commande :

$ vi paint orwell

Les fichiers apparaissent dans l'ordre dans lequel ils sont entrés. Le fichier paint apparaît donc en premier. Une fois l'édition de paint terminée, tapez :n pour passer au fichier suivant, orwell. Pour passer au fichier suivant sans sauvegarder les modifications dans le fichier en cours, tapez :n! à la place de :n.

Si les noms des fichiers se ressemblent (par exemple, test1, test2, test3), vous pouvez utiliser des caractères génériques pour désigner un groupe de fichiers :

$ vi test*

Les noms des fichiers apparaîtront par ordre alphabétique pour l'édition.

Copie de lignes d'un fichier à l'autre

Pour copier des lignes d'un fichier à l'autre, procédez comme suit :

  1. Editez le premier fichier.

  2. Sauvegardez les lignes à copier dans des buffers nommés à l'aide de la commande yank. Par exemple, pour sauvegarder 10 lignes dans le buffer a, tapez "a10Y.

  3. Sans sortir de vi, éditez le fichier suivant (orwell dans le présent exemple) :

    :n orwell
    

  4. Ajoutez les lignes du premier fichier à l'aide de la commande put. Par exemple, pour insérer le contenu du buffer a en dessous du curseur, tapez ap.

    Le contenu des buffers est perdu lorsque vous quittez vi. N'utilisez pas la commande quit (:q) tant que vous n'avez pas terminé toutes les opérations liées aux buffers nommés.

Sélection des paramètres vi

Le fonctionnement et l'aspect de vi dépendent d'un certain nombre de variables, dont vous pouvez consulter la liste (et la sélection en cours) lorsque vi est en cours, en tapant :

:set all

et en appuyant sur Return.

Reprise après une panne

En cas de panne du système, le contenu de votre buffer risque d'être perdu. Mais il est souvent possible de récupérer votre travail en redémarrant vi à l'aide du format de commande suivant :

vi -r nom_fichier

nom_fichier représente le fichier qui était en cours d'édition au moment de la panne. Une fois le système relancé, vous recevez généralement un courrier électronique vous informant de la présence d'un fichier de récupération.

Récapitulatif des principales commandes vi

Le tableau suivant offre un rappel pratique des principales commandes vi.

Tableau 6-1 Principales commandes vi

Commande 

Explication 

Lancement de vi

 

vi nom_fichier

Ouverture ou création d'un fichier 

vi

Ouverture d'un nouveau fichier qui sera nommé ultérieurement 

vi -r nom_fichier

Récupération d'un fichier après une panne 

view nom_fichier

Ouverture d'un fichier en lecture seule 

Commandes du curseur

h

Déplacement d'un caractère vers la gauche 

Déplacement d'une ligne vers le bas 

Déplacement d'une ligne vers le haut 

Déplacement d'un caractère vers la droite 

Déplacement d'un mot vers la droite 

Déplacement d'un mot vers la droite (depuis un signe de ponctuation) 

Déplacement d'un mot vers la gauche 

Déplacement d'un mot vers la gauche (depuis un signe de ponctuation) 

Déplacement vers la fin du mot en cours 

Return 

Déplacement d'une ligne vers le bas 

Back Space 

Déplacement d'un caractère vers la gauche 

Barre d'espacement 

Déplacement d'un caractère vers la droite 

H

Déplacement vers le haut de l'écran 

M

Déplacement vers le centre de l'écran 

L

Déplacement vers le bas de l'écran 

Ctrl-F 

Défilement d'une page-écran vers l'avant 

Ctrl-D 

Défilement d'un demi-écran vers l'avant 

Ctrl-B 

Défilement d'une page-écran vers l'arrière 

Ctrl-U 

Défilement d'un demi-écran vers l'arrière 

Insertion de caractères et de lignes

 

a

Insertion de caractères à droite du curseur 

A

Insertion de caractères en fin de ligne 

i

Insertion de caractères à gauche du curseur 

I

Insertion de caractères en début de ligne 

o

Insertion d'une ligne en dessous du curseur 

O

Insertion d'une ligne en dessus du curseur 

Remplacement de texte

 

cw

Remplacement d'un mot (ou d'une partie de mot) à droite du curseur 

cc

Remplacement d'une ligne 

C

Remplacement de la partie de ligne allant de l'emplacement du curseur à la fin de la ligne 

s

Substitution d'une chaîne au(x) caractère(s) situé(s) à droite du curseur 

r

Remplacement du caractère situé à droite du curseur par un autre caractère 

r Return

Coupure de ligne 

J

Jointure de la ligne en cours à la ligne suivante 

xp

Inversion du caractère désigné par le curseur et du caractère situé à droite de ce dernier 

~

Changement du type de caractères (majuscules ou minuscules)

u

Annulation de la dernière commande 

U

Annulation des modifications apportées sur la ligne en cours 

:u

Annulation de la dernière commande de la dernière ligne 

Suppression de texte

 

x

Suppression du caractère désigné par le curseur 

X

Suppression du caractère situé à gauche du curseur 

dw

Suppression du mot (ou d'une partie de mot) situé à droite du curseur 

dd

Suppression de la ligne contenant le curseur 

D

Suppression de la partie de ligne située à droite du curseur 

dG

Suppression de la fin du fichier 

d1G

Suppression du début du fichier jusqu'à l'emplacement du curseur 

:5,10 d

Suppression des lignes 5 à 10 

Copie et déplacement de texte

 

yy

Extraction ou copie de ligne 

Y

Extraction ou copie de ligne 

p

Insertion de la ligne extraite ou supprimée sur la ligne située en dessous de la ligne en cours 

P

Insertion de la ligne extraite ou supprimée sur la ligne située en dessus de la ligne en cours 

:1,2 co 3

Copie des lignes 1 à 2 à la ligne située en dessous de la ligne 3 

:4,5 m 6

Déplacement des lignes 4 à 5 à la ligne située en dessous de la ligne 6 

Affichage des numéros de lignes

 

:set nu

Affichage des numéros de lignes 

:set nonu

Suppression des numéros de lignes 

Distinction des majuscules et des minuscules

 

:set ic

Recherche sans distinction majuscules-minuscules 

:set noic

Recherche avec distinction majuscules-minuscules 

Recherche d'une ligne

 

G

Passage à la dernière ligne du fichier 

1G

Passage à la première ligne du fichier 

21G

Passage à la ligne 21 

Recherche et remplacement

 

/chaîne

Recherche de chaîne

?chaîne

Recherche vers l'arrière de chaîne

n

Recherche de l'occurence suivante de chaîne dans le sens de la recherche

N

Recherche de l'occurence précédente de chaîne dans le sens de la recherche

:g/recherche/s//remplace/g

Recherche et remplacement 

Effacement de l'écran

 

Ctrl-L 

Effacement (rafraîchissement) d'un écran brouillé 

Insertion d'un fichier dans un autre fichier

 

:r nom_fichier

Insertion (lecture) du fichier après le curseur 

:34 r nom_fichier

Insertion du fichier après la ligne 34 

Sauvegarde et sortie

 

:w

Sauvegarde des modifications (écriture dans le buffer) 

:w nom_fichier

Ecriture dans le buffer du fichier nommé 

:wq

Sauvegarde de modifications et sortie de vi 

ZZ

Sauvegarde des modifications et sortie de vi 

:q!

Sortie sans sauvegarde des modifications