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.
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.
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 :
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 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.
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.
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.
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.
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.
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.
bien 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.
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.
Pour sauvegarder le contenu du buffer (c'est-à-dire l'écrire dans le fichier du disque), entrez :
:w |
et appuyez sur Return.
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.
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! |
Une fois que vous avez quitté un fichier vi, vous pouvez l'imprimer à l'aide de la commande suivante :
$ lp nom_fichier |
où 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".
La présente section décrit plusieurs catégories de commandes vi permettant :
Le déplacement dans un fichier
L'insertion de texte
La modification et le remplacement de texte
L'annulation des modifications apportées au texte
La suppression de texte
La copie et le déplacement de texte
La répétition de commandes
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.
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.
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.
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 :
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.
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.
Appuyez sur la touche Return pour positionner le curseur au début de la ligne suivante.
Appuyez sur la touche Back Space pour déplacer le curseur d'un caractère vers la gauche.
Appuyez sur la barre d'espacement pour déplacer le curseur d'un caractère vers la droite.
Appuyez sur H ("high") pour amener le curseur en haut de l'écran.
Appuyez sur M ("middle") pour amener le curseur au centre de l'écran.
Appuyez sur L ("low") pour amener le curseur en bas de l'écran.
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.
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.
Pour faire défiler un demi-écran vers le bas, appuyez sur Ctrl-D ("Down").
Pour faire défiler en arrière (vers le haut) une page-écran, appuyez sur Ctrl-B.
Pour faire défiler en arrière un demi-écran, appuyez sur Ctrl-U.
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.
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é.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.)
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.
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.
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.)
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.
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).
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.
Pour supprimer une ligne, positionnez le curseur sur la ligne, puis tapez dd. La ligne et l'espace qu'elle occupait sont supprimés.
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).
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.
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.
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.
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.
seules 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.
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.
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é).
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.
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.)
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.
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 |
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.
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 |
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.
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 \\.
Vous pouvez affiner la recherche en associant à la chaîne des indicateurs signalant les états suivants :
Début de ligne
Fin de ligne
Début de mot
Fin de mot
Caractères génériques
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 |
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 |
vous pouvez annuler toute opération de recherche-remplacement avec demande de confirmation en appuyant sur Ctrl-C.
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.
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 |
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 :
Commencez par sauvegarder votre travail en cours dans le fichier paint. Tapez :w et appuyez sur Return.
Pour éditer le fichier orwell, tapez :n orwell et appuyez sur Return.
Apportez des modifications d'édition dans le fichier orwell, puis sauvegardez votre travail.
Une fois votre travail dans orwell terminé et sauvegardé, trois possibilités vous sont offertes :
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.
Pour copier des lignes d'un fichier à l'autre, procédez comme suit :
Editez le premier fichier.
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.
Sans sortir de vi, éditez le fichier suivant (orwell dans le présent exemple) :
:n orwell |
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.
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.
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 |
où 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.
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 |
Ouverture d'un fichier en lecture seule |
|
Commandes du curseur |
|
h |
Déplacement d'un caractère vers la gauche |
j |
Déplacement d'une ligne vers le bas |
k |
Déplacement d'une ligne vers le haut |
l |
Déplacement d'un caractère vers la droite |
w |
Déplacement d'un mot vers la droite |
W |
Déplacement d'un mot vers la droite (depuis un signe de ponctuation) |
b |
Déplacement d'un mot vers la gauche |
B |
Déplacement d'un mot vers la gauche (depuis un signe de ponctuation) |
e |
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 |
~ | |
u |
Annulation de la dernière commande |
U |
Annulation des modifications apportées sur la ligne en cours |
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! |