Vous êtes sur la page 1sur 12

Lditeur VI

Jean-Marc LICHTLE 11 juillet 2004

Table des matires


1 Introduction 1.1 Intrt de VI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Variantes de VI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Lancement 3 VI, un diteur modale 3.1 Le mode commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Le mode insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Dplacements du curseur 5 Laide en ligne, la manipulation des fentres 5.1 Aide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Manipulation des fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Lecture et enregistrement de chier 7 Les commandes ddition de texte 7.1 Insertion et suppression . . . . . 7.2 Annulation et rptition . . . . . . 7.3 Recherche de texte . . . . . . . . 7.4 Formatage de texte . . . . . . . . 7.4.1 Coupure de n de ligne . . 7.4.2 Largeur du texte . . . . . 7.4.3 Supprimer un saut de ligne 7.5 Copier et coller du texte . . . . . 7.5.1 Copier . . . . . . . . . . . 7.5.2 Coller . . . . . . . . . . . 8 Quitter et enregistrer 9 Sortie provisoire de VI pour accder au shell 3 3 3 4 4 4 4 5 5 5 6 6 7 7 7 7 7 7 8 9 9 9 9 10 10

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

TABLE DES MATIRES 10 Paramtrage permanent de VI 11 Lauteur 10 10

Page 2

11 juillet 2004

1
1.1

Introduction
Intrt de VI

VI est lditeur de base en environnement UNIX, on le retrouve donc dans toutes les versions de ce systme dexploitation et donc dans tous les systmes drivs, quil sagisse de LINUX, BSD ou dautres produits apparents. Alors quil est gnralement en compagnie dautres diteurs, EMACS en particulier, dans des distributions muscles, on le retrouve souvent seul dans les micro distributions de LINUX, celles qui tiennent que sur une disquette, comme TOMSRTBT ou sur un mini live-cd comme DAMN SMALL LINUX. Lapprentissage de VI, au moins des commandes de base, prsente par ailleurs un avantage insouponn. Qui ne sest jamais battu avec une page de manuel pour y chercher un mot particulier ? La commande de recherche de mot typique de VI fonctionne aussi lors des consultations de page man, comme elle fonctionne encore lorsquon visualise le contenu dun chier via more ou less. Lapport est le mme dans lutilisation de dselect, logiciel daide linstallation des packages .deb de DEBIAN. L aussi la syntaxe de recherche de VI sapplique. Dune faon plus gnrale, en prsence dun bon soft bien unixien, posez vous toujours la question de savoir si les commandes VI ne sappliqueraient pas par hasard. Enn VI est utilisable dans une fentre TELNET ce qui le rend incontournable pour faire de la maintenance de matriel distance. La question de savoir si son ergonomie est actuelle ou non ne se pose donc pas, VI est simplement incontournable. Pour ma part jutilise couramment EMACS que je trouve plus agrable, mais jai t contraint de me "mettre" VI pour travailler efcacement distance sur un serveur LINUX et utilisant comme terminal un PC tournant sous un systme dexploitation tout fait banal dit du ct de REDMOND (USA). A lusage je suis oblig dadmettre que lemploi de VI, mme sil reste moins intuitif que celui dEMACS, peut tre tout fait agrable. Le prsent document formalise donc mes notes et consigne les commandes qui, mes yeux, sont indispensables pour aborder lusage de VI.

1.2

Variantes de VI

Selon la distribution vous utiliserez VI ou VIM (improved). Un lien est souvent fait entre VI et VIM de telle sorte lancer la version tendue de lditeur. Il existe par ailleurs des versions graphiques comme gvim, mon propos, mme sil est certainement gnralisable ce produit, sera essentiellement centr sur les versions fonctionnant en mode texte pur, celles qui pourraient, le cas chans, vous sortir de lornire sur un systme malade ne pouvant plus faire tourner son serveur graphique. Certaines des commandes dcrites ici peuvent ne pas fonctionner sur les versions VI simples prsentes sur des distributions plus anciennes ou des micro distributions. Dans le mme ordre dide lutilisation de VI via Telnet peut rduire la palette des options offertes.

Page 3

11 juillet 2004

Lancement

VI se lance directement en mode console ou dans une fentre terminal (rxvt, xterm ou autre). Une fois lanc VI occupe toute la fentre. Une syntaxe trs classique comme vi essai.txt lance VI en afchant le contenu du chier essai.txt. Si ce chier nexiste pas VI le cre puis afche des lignes vides commenant par un symbole . En fait ces lignes sont ctives, le remplissage est purement visuel. Selon la version de VI que vous utilisez et son paramtrage vous aurez peut-tre une barre de menu dans le bas de lcran qui vous donnera quelques (maigres) informations sur la session en cours, nom du chier dit, position du curseur dans le texte.

VI, un diteur modale

Il sagit certainement laspect le plus droutant pour le dbutant. Au lancement VI se trouve automatiquement en mode commande. Tout de que vous taperez sera interprt comme une commande et non comme du texte enregistrer . Lautre mode, appel mode insertion et sert, lui, entrer du texte. Selon la version de VI utilise lindication du mode courant napparat pas clairement dans la barre de menu. Ceci est particulirement vrai lorsquon utilise VI via TELNET. Une bonne pratique consiste donc ne JAMAIS rester en mode insertion mais toujours revenir au mode commande ds la n de la frappe. Ce retour sobtient en tapant Crtl-C ou ESC.

3.1

Le mode commande

Cest le mode initial au chargement. Deux types de commandes peuvent tre entres, les commandes directes et les commandes " :". Les commandes directes sont celles qui sexcutent directement, sur la frappe dune seule lettre, par exemple y pour copier, p pour coller, d pour effacer. Les commandes " :" attendent des arguments ventuels et surtout la frappe de la touche entre pour sexcuter, exemple :w foo.txt qui demande la sauvegarde sous le nom foo.txt. Aspect particulirement prcieux, le mode commande de vi prsente cette analogie avec certains shells doffrir un historique de commande consultable avec la che "haut". Cet amnagement permet souvent dviter de retaper une commande dj saisie prcdemment.

3.2

Le mode insertion

Cest le mode classique qui permet dentrer du texte. La frappe de i ou de A permet de passer du mode commande au mode insertion. La diffrence essentielle est que i laisse le curseur sa place alors que A dplace ce curseur en n de ligne ce qui est trs pratique pour raliser un ajout. ESC ou CRTL-C permet de revenir en mode commande.

Page 4

11 juillet 2004

Dplacements du curseur

Les dplacements au moyen des touches ches donnent parfois, selon le terminal utilis, des rsultats assez droutants. Un cas classique est lutilisation de VI avec LINUX, par exemple Mandrake 9.1, sur un PC tout fait ordinaire, clavier 102 touches etc. Dans ce genre de conguration : Les touches ches droite, gauche, haut et bas fonctionnent correctement aussi bien en mode commande quen mode insertion. Idem pour les touches page up et page down. Les touches home et n ont une action limite la ligne en cours. Trs en gros a fonctionne assez bien, hormis quil est impossible datteindre directement le dbut ou la n du texte. Commenons donc par l, en mode commande uniquement : gg transporte le curseur au dbut du texte (home en bon jargon informatique)... et G la n du texte. Nous voil donc sauvs, nous avons retrouv tous nos mouvements, du moins les plus courants. En plus de ces commandes simples et (relativement) intuitives, VI permet aussi le dplacement en mode commande au moyen des touches hjk et l : h pour gauche k pour haut j pour bas et l pour droite. vident non ? Non ? Bon, h et l ne devraient pas poser de problme, pour k et j je vais vous donner un truc, k dplace la ligne dcriture vers le haut, j dplace vers le bas. Vu ? Non ? Simple, la barre du k va vers le haut, la patte du j vers le bas ! Par ailleurs (toujours en mode commande) : 0 (zro) permet datteindre le dbut de ligne, $ - la n de ligne, w permet de sauter au dbut du mot suivant, b - au dbut du mot prcdent.

Laide en ligne, la manipulation des fentres

Laide en ligne ouvre une nouvelle fentre qui va diviser lcran en deux parties gales. Jai donc choisi de traiter ensemble les deux sujets, aide et manipulation des fentres.

5.1

Aide en ligne

Une aide est accessible en tapant :help en mode commande. Un petit mode demploi de laide safche alors, malheureusement en langue anglaise. Pour quitter laide taper :q ou :q ! La recherche daide sur un sujet donn est possible en tapant :help sujet, par exemple :help textwidth. Si on ignore la syntaxe exacte de la commande quon recherche il est possible de faire suivre la frappe partielle du mot par Ctrl-d ce qui va afcher toutes les entres possibles correspondant le demande formule. Par exemple :help width suivi de Ctrl-d va provoquer lafchage dune douzaine de possibilits parmi lesquelles textwidth, mais aussi screenwidth etc.
Page 5 11 juillet 2004

5.2

Manipulation des fentres

5.2

Manipulation des fentres

Pour passer de la fentre daide la fentre courante (ou pour faire passer le curseur entre deux fentres ddition) taper Ctrl-w j pour aller la fentre en dessous, Ctrl-w k pour la fentre au-dessus. Ces sauts permettent de copier trs simplement des portions de texte dune fentre lautre. Dautres commandes mritent un instant dattention : :split permet de crer une deuxime fentre dans lcran actif. :close ferme la fentre active. :only ferme toutes les fentres sauf la fentre active. Par dfaut :split ouvre une fentre supplmentaire contenant le mme chier. Vous pouvez aussi prciser le nom du chier ouvrir la suite de :split, par exemple :split essai.txt. Cette manipulation semble anodine mais cest la faon la plus simple de rcuprer une ou plusieurs lignes dun chier existant pour les copier dans le chier en cours ddition. Exemple : Vous tes en train de taper du code et vous souhaitez rcuprer quelques lignes de code bien tortueux que vous avez dj mis au point dans un autre contexte. Procder comme suit : Passez en mode commande (ESC). Tapez :split nom_chier.php pour charger le chier nomm nom_chier.php dans une demifentre qui apparaitra lcran. Votre curseur est pass par dfaut dans la nouvelle fentre, slectionnez la partie de texte souhaite et copiez l. Tapez Ctrl-w j pour faire passer le curseur dans la fentre du bas, (Ctrl-w k pour le faire passer en haut) ou alors Ctrl-w w pour le faire changer de fentre, cette dernire commande fonctionnant en ip-op cest dire que rpte une nouvelle fois elle fera revenir le curseur au point de dpart. Coller le texte copi lendroit souhait. Il suft maintenant de repasser en mode commande et de taper :only pour que le fentre supplmentaire ouverte tout lheure se referme et que la fentre ddition initiale reprenne sa taille dorigine. Les commandes de copie et collage sont vue par ailleurs.

Lecture et enregistrement de chier

:r foo.txt lit le chier foo.txt et linsre la position courante du curseur :w foo.txt enregistre ltat actuel du chier dans foo.txt :e foo.txt charge (ou recharge) le chier foo.txt. Cette dernire commande peut agir comme un puissant undo, surtout quand elle est associe au point dexclamation qui provoque le rechargement forc.

Page 6

11 juillet 2004

7
7.1

Les commandes ddition de texte


Insertion et suppression

La commande i est la commande de base pour passer du mode commande au mode insertion. Elle prsente deux variantes intressantes, I et A. La premire ajoute du texte en dbut de ligne, la seconde en n de ligne. A est donc trs pratique pour continuer une phrase en chantier en partant du mode commande. d efface la ligne courante et la colle dans le tampon deffacement. Cette commande est particulirement utile pour supprimer une ligne blanche. x efface le caractre situ sous le curseur v permet de passer en mode visuel, en clair marque le dbut dune zone de slection qui pourra tre efface par d par ex. y copie la zone slectionne d efface la zone slectionne et la colle dans le tampon. p colle le dernier tampon deffacement "3p colle le 3me tampon (en remontant). Attention, cette frappe doit se faire en aveugle et en mode commande. La touche INS permet de commuter entre le mode insertion et le mode "refrappe". Si ncessaire vous pouvez passer en mode refrappe en tapant R depuis le mode commande.

7.2

Annulation et rptition

:u ou :undo annule la dernire modication. . (point) rpte la dernire commande, plus prcisment le squence de frappe depuis le dernier passage en mode insertion. A utiliser avec doigt, exactement le genre de truc qui peut provoquer un bazar de premire grandeur, noubliez pas :u qui peut vous sauver la mise le cas chant.

7.3

Recherche de texte

/foo recherche de la squence de caractre foo en avant ?foo recherche en arrire n permet de recommencer la recherche, cest dire de trouver loccurrence suivante. N recherche loccurrence prcdente. fx recherche dun caractre (x) droite sur la ligne. Fx recherche dun caractre gauche sur la ligne.

7.4
7.4.1

Formatage de texte
Coupure de n de ligne

Ce paragraphe ne concerne que vim. Par dfaut VI "engrange" le texte et le coupe tout simplement en bout de ligne sans se demander si la coupure affecte le milieu dun mot ou non. Le moins que lon puisse dire est que ce genre de
Page 7 11 juillet 2004

7.4

Formatage de texte

comportement est assez dsagrable. Un petit coup de :set linebreak remet un peu dordre tout cela. Ici aussi une version courte de la syntaxe est possible sous la forme :set lbr. Leffet de cette commande est immdiat et affecte lintgralit du texte contenu dans le tampon ddition. Cette modication de prsentation na aucune consquence sur le texte enregistr. A supposer quon dite nouveau le texte quelques temps plus tard il faudra nouveau taper cette commande, sauf modier le chier de conguration de VI, mais cest le sujet dun autre paragraphe . 7.4.2 Largeur du texte

Fixer une largeur Ce paragraphe ne concerne que les utilisateurs de VIM. Il peut arriver que lon souhaite limiter la largeur dun texte, par exemple 50 colonnes. Pour cela taper :set textwidth=50. Cette syntaxe peut dailleurs tre rsume en contractant textwidth en tw ce qui donne :set tw=50. Tout le texte qui sera tap partir de maintenant sera format 50 colonnes. Attention : il y a une diffrence fondamentale entre la coupure de ligne et le formatage en largeur et ignorer cette diffrence peut conduire des "prises de tte" assez svres. La commande linebreak ne fait rien dautre que changer le comportement de lafchage en coupant les phrases aprs des blancs pour ne pas sectionner les mots nimporte ou. En apparence textwidth fait de mme mais lapparence est trompeuse ! En fait textwidth va rajouter des sauts de lignes la n de chaque ligne. Ce sauts de lignes vont conduire des modications substantielles du comportement de VI : Si on utilise les touches ches le curseur va passer de ligne en ligne au lieu de passer de paragraphe en paragraphe comme il ne faisait dhabitude. Le saut de ligne est en effet interprt comme une n de paragraphe Si on corrige le texte en ajoutant ou en supprimant des caractres, des mots, les sauts de lignes vont rester en place et mettre un b... (bazar) assez sensationnel ! Si vous sauvegardez le texte et lafchez avec cat (par exemple), vous vriez immdiatement que lbr est sans consquence sur le texte alors que tw le modie. Il vaut donc mieux savoir ce quon veut faire avant de se lancer. Ce point tant prcis avanons encore un peu dans ltude de set tw. Pour formater un paragraphe placez le curseur dans le paragraphe et tapez :set tw=45 (exemple). Rien ne se passe dans limmdiat. Il faut taper gqap pour que la nouvelle largeur soit prise en compte. Une autre possibilit, mon avis plus sympathique est dcrite ci-dessous : Tapez set tw=.. le curseur tant plac nimporte ou dans le document. Utilisez la commande v (Visuel) pour surligner le passage modier Tapez gq pour mettre en place la mise en forme Notez que vous pouvez trs bien modier les largeurs de passages diffrents sans retaper set tw, la valeur tant mmorise elle sapplique chaque commande gq ou gqap. Supprimer laction de tw Panique bord, les lignes sont coupes nimporte comment, plus rien ne va comme vous voulez, comment faire pour revenir au bon vieux texte quon stait donn tant de mal taper ? Du calme, la documentation de VI vous indique que vous pouvez xer la valeur de tw zro pour annuler les effets prcdents. Nouvelle dception, cette fois les lignes "wrappent" 79 colonnes maxi ! Ma mthode dans ce cas est trs rustique, nayant pas trouv la

Page 8

11 juillet 2004

7.5

Copier et coller du texte

faon de me dbarasser de tw je le porte simplement une valeur loufoque, 9999 par exemple et je reformate le texte. 7.4.3 Supprimer un saut de ligne

Que vous soyez dans le cas dcrit plus haut ou que vous souhaitiez simplement "raccorder" entre elles deux lignes spares par un saut de ligne (une frappe sur la touche ENTER) les mthodes suivantes vont vous rendre service. En mode insertion il suft de se placer en n de ligne et de taper SUPPR pour effacer le saut de ligne non dsir. En mode commande cest encore plus simple puisquil suft, en positionnant le curseur nimporte ou sur la premire ligne, de taper "J" (majuscule) pour que le raccordement se fasse automatiquement ! Nul besoin daller la n de la ligne. Dans le cas dcrit ci-dessus il suft donc simplement, en tant sur la premire ligne de texte "amput" par tw, de taper "J" sur la premire ligne et de garder le doigt enfonc jusqu ce que toutes les lignes aient recoll au peloton.

7.5

Copier et coller du texte

Le copier / coller est certainement la fonction la plus utile dans un diteur de texte. Elle est donc bien videmment bien reprsente dans VI. 7.5.1 Copier

La suppression dune ligne au moyen de la commande dd efface bien entendu la ligne vise, mais elle copie aussi son contenu dans un tampon qui pourra tre rcupr par la suite. A ce titre dd est donc la permire mthode de copie. Pour le reste je propose dutiliser le mode VISUAL pour surligner le texte copier aprs quoi "d" ou "y" copie la partie surligne dans le tampon, avec suppression du texte orginal dans le cas de "d". Lemploi de VISUAL est trs simple, passer en mode commande, dplacer le curseur sur le premier caractre copier, taper "v" pour signier lentre en visual, dplacer le curseur jusquau dernier caractre copier. Attention, le dernier caractre qui sera copi est celui sur lequel clignote le curseur. Cest un peu droutant au dbut et puis on sy fait. 7.5.2 Coller

Le collage se fait en partant du mode commande. Il suft de positionner le curseur sur le caractre qui prcde lendroit ou on souhaite coller le texte aprs quoi une frappe sur "p" colle le texte. Toute le problmatique du copier coller est donc de se souvenir que le texte est enlev (ou copi) JUSQUAU curseur clignotant et quil est coll APRES le caractre sur lequel on arrte le curseur pour positionner le collage. Si vous gardez lesprit que avec VI la lettre y (yank) est utilise pour la copie alors que, couramment on lutilise plutt pour le collage (EMACS) alors vous serez par pour le sujet.

Page 9

11 juillet 2004

Quitter et enregistrer

:w enregistre le chier avec son nom par dfaut. :q quitte, sauf si le chier na pas t sauvegard auquel cas VI met un message derreur. :q ! force labandon de ldition non enregistre et ferme lapplication.

Sortie provisoire de VI pour accder au shell

Laccs au shell est possible tout moment au moyen de la commande :sh ou :shell. VI va ventuellement vous adresser un message vous signalant que votre chier de travail nest pas encore sauvegard. Une fois lactivit shell termine vous pouvez reprendre le cours de votre travail ddition en tapant simplement exit dans la fentre ainsi ouverte.

10

Paramtrage permanent de VI

Le paramtrage de VI seffectue soit dans un chier global valable pour tous les utilisateurs et gnralement enregistr sous /etc/vimrc (/usr/share/vim/vimrc avec Mandrake 9.2, /etc/vim/vimrc avec Debian Woody). Un utilisateur peut installer un chier .vimrc dans son rpertoire personnel de faon y enregistrer ses prfrences. Il suft de copier vimrc en le renommant .vimrc. Le . est important, sans lui le chier nest pas lu. Pour illustrer mon propos je suggre dajouter la ligne :

set linebreak
en n de chier. Cette simple modication suft rendre permanente la modication de paramtrage qui conduit des coupures de lignes propres comme il a t expos plus haut au paragraphe 7.4.1.

11

Lauteur

Jean-Marc LICHTLE, ingnieur Arts et Mtiers promotion CH73. Javance pas pas dans la dcouverte de LINUX en mettant un point dhonneur mettre au propre mes notes de travail. Cest ainsi que jai rdig diffrentes contributions sur des thmes aussi varies que : lutilisation de la commande rpm linstallation et la scurisation dun serveur Apache PHP MySQL lutilisation dun Minitel comme terminal de secours la mise en oeuvre de Gnuplot une introduction LaTeX une tude sur la programmation des micro contrleurs PIC16F84 avec une machine LINUX et quelques autres documents de la mme eau. Mon plaisir ? Recevoir un soir un mail dun lecteur qui mon travail a rendu service. Ce qui me met en rage ? Trouver un de mes papiers copi in extenso ceci prs que mon nom a t simplement remplac par celui du copieur. Depuis ce temps il a droit quelques lignes dans chacune de mes contributions.
Page 10 11 juillet 2004

La copie partielle ou totale de ce document est autorise avec cette simple restriction, plus une marque de politesse en fait, que mon nom reste associ au texte que jai cr surtout si la copie ralise reprsente une portion importante du travail que joffre la communaut.

Page 11

11 juillet 2004

Index
/, 7 ?, 7 $, 5 0, 5 p, 4, 7, 9 A, 4, 7 :q, 5, 10 b, 5 BSD, 3 Ctrl-c, 4 Ctrl-d, 5 Ctrl-w, 6 d, 4, 7, 9 DAMN SMALL LINUX, 3 dd, 9 :e, 6 Emacs, 3 Esc, 4 f, 7 G, 5 gg, 5 gq, 8 gqap, 8 h, 5 :help, 5 i, 4, 7 Ins, 7 J, 9 j, 5 k, 5 l, 5 lbr, 7 linebreak, 7 Mode :, 4 12 R, 7 :r, 6 :set, 8 :sh, 10 :shell, 10 :split, 6 Telnet, 3 textwidth, 8 Tomsrtbt, 3 tw, 8 :u, 7 :undo, 7 v, 7 Vim, 3 w, 5 :w, 4, 6, 10 .vimrc, 10 x, 7 y, 4, 7, 9 N, 7 n, 7 :only, 6

Vous aimerez peut-être aussi