Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
Software-soft edit-vi


L'éditeur vi

par Jean-Christophe

L'éditeur des vrais geeks


vi (prononcez vie-aïe ou [vi:ai]) est l'éditeur de texte de base sous Linux, vous risquez bien d'avoir à vous en servir au plus mauvais moment, c'est à dire lorsque plus rien d'autre ne fonctionne. Alors lisez ce qui suit avant d'être en pleine panique, vous serez content lorsque le moment sera venu de savoir modifier ce p*** de fichier de configuration qui empêche X de démarrer !

Que ceux qui se plaignent de vi essaient 'ex', ils ne seront pas décus :) Et se rendront compte des éditeurs qu'utilisaient leurs ancêtres !

Ce document vise uniquement à vous donner une référence rapide afin d'utiliser facilement vi.

Note : dans les distributions actuelles, vi a le plus souvent été remplacé par vim ou "vi improved". Celà ne fait aucune différence pour l'article, car la commande vi lance aussi vim.

Lancer VI

Pour lancer vi, c'est simple :
[root@taz X11]# vi XF86Config
Là, vi s'ouvre avec le fichier XF86Config dedans.
Bien entendu vous devez être dans le répertoire contenant le fichier ou indiquer le chemin complet.
Si vous tentez d'ouvrir un fichier inexistant, vi crééra ce fichier. Vous pouvez donc créér un nouveau fichier simplement en tapant [<b> vi nom_du_fichier</b>].

Se déplacer dans le texte

Vous pouvez utiliser les quatre flèches, mais aussi les touches [h], [j], [k] & [l] (pratique le jour où vous vous retrouvez connecté en telnet via un terminal ne disposant pas des touches fléchées !).

Les modes de VI

vi possède deux modes : le mode "Insert" et le mode normal. En mode normal vous ne pouvez pas insérer de texte dans le fichier, mais les touches du clavier sont autant de touches de commandes. En mode Insert, les touches de commandes (notamment les lettres !) se transforment en vraies lettres que vous pouvez insérer dans le fichier.

Insérer du texte

Lorsque vi s'ouvre, il est en mode normal. Pour passer en mode Insert :

  • tapez [<b>i</b>] ou [Insert] pour insérer du texte à l'endroit où se trouve le curseur,
  • tapez [<b>A</b>] pour ajouter du texte à la fin d'une ligne.

En mode Insert, vous pouvez taper du texte, effacer avec la touche [Suppr] ou [Bkspace]. Pour quitter le mode Insert, tapez [Esc].

Remarque : à la suite de votre fichier, vous voyez des lignes vides commençant par le caractère '~'. C'est normal : cela signifie juste que ces lignes sont vides, et les caractères '~' ne seront bien sûr pas enregistrés dans votre fichier.

Les commandes

Après avoir quitté le mode Insert, ou avant d'y être entré, les touches du clavier correspondent à des commandes. Voici ci-dessous les commandes de base qui vous permettront de vous y retrouver :

  • <b>:q!</b> [Entrée] pour quitter sans sauver,
  • <b>:w</b> [Entrée] pour enregistrer,
  • <b>:wq</b> [Entrée] pour enregistrer et quitter,
  • <b>x</b> efface le caractère qui se trouve sous le curseur,
  • <b>dd</b> efface la ligne sur laquelle se trouve le curseur,
  • <b>:u</b>[Entrée] permet d'annuler (ou <b>:undo</b>).

Plus...

BooK (merci à lui) m'a offert un super mug, "the vi reference mug", toujours posé à côté de mon écran et qui me sert plus qu'à boire du café. Voici donc les principales commandes de VI, avec lesquelles vous devriez pouvoir vous débrouiller :

  • dans les commandes suivantes, n représente un nombre à taper ; lorsque n=1, vous pouvez l'omettre. Par exemple, "1dd" est synonyme de "dd",
  • de même, lorsque j'écris x,y pour indiquer une plage de lignes :
    • c'est optionnel,
    • x est optionnel (ex : ",10"),
    • y est optionnel (ex : "1,"), (dans ces deux cas, cela signifie : ligne courante (ex : ",$" signifie : "de la ligne courante jusqu'à la fin du fichier),
    • y peut être remplacé par $ qui signifie "fin de fichier",
    • 1,$ est équivalent à % (i.e. tout le fichier).
  • les touches à taper sont entre crochets lorsqu'elles n'apparaissent pas à l'écran, et en gras lorsqu'elles apparaissent dans la ligne de commande (en bas de l'écran).

Demander de l'aide

tapez [:]help pour en savoir plus sur vi,
[:]help howto pour débuter...
et [:]se all pour afficher toutes les options.

Insérer et remplacer du texte

Ces commandes vous placent toutes en mode "insertion". Pour en sortir, tapez la touche [Esc].

[A] Ajouter du texte à la fin de la ligne
[a] Ajouter du texte après le curseur
[i] Insérer du texte avant le curseur
[o] ou [O] Créer une ligne vierge sous ou au dessus du curseur
[R] Remplacer le texte à partir du curseur
n[s] Supprime n caractères et passe en mode insertion

Autres commandes :

n[<][<] ou <b>n[</b>>][>] Indente n lignes vers la gauche ou vers la droite
[:]ab ab Utiliser a comme une abbréviation pour b
[r]c Remplacer le caractère sous le curseur par c

Effacer du texte

n[d][d] Efface n lignes à partir de la ligne courante ([d][d] efface la ligne courante)
n[x] Efface n caractères à partir du caractère courant ([x] efface juste le caractère courant)
n[d][w] ou <b>n[</b>d][b] Efface les n mots suivants ou précédents, à partir du mot suivant
[d][/]str Efface tout depuis le curseur jusqu'à la première occurrence de str
[:]g/^$/d Efface toutes les lignes vides
[:]g/^ *$/d Efface toutes les lignes vides, même si elles contiennent un ou plusieurs espaces

Commandes sur les fichiers

[:]nfichier Ouvre le fichier fichier
[:]q! Quitter vi sans enregistrer les modifications
[:]wq Enregistrer et quitter
[:]sh Lance un shell ; lorsque vous tapez <b>exit</b> dans ce shell, vous revenez à vi
[:]filenom Change le nom du fichier courant, équivalent à "enregistrer sous" lorsque vous enregistrerez.
[:]x,yw fichier Enregistre les lignes x à y dans le fichier fichier
[:]x,yw>>fichier Ajoute les lignes x à y à la fin du fichier fichier
[:]e! Recharge le contenu du fichier dans l'état où il se trouvait à l'ouverture
[:]r fichier insère le contenu de fichier à l'emplacement du curseur

Mouvements du curseur

[h], [l], [k], [j]
ou [<-], [->], [[[Image:vi-vi_haut.gif]]], [[[Image:vi_bas.gif]]]
Déplace le curseur d'un caractère vers la gauche, la droite, le haut, le bas
[$] Déplace le curseur en fin de ligne.
[<b>]</b> (zéro) Déplace le curseur en début de ligne.
n[b] ou <b>n[</b>w] Déplace le curseur de n mots vers la gauche ou vers la droite.
n[G] Aller à la ligne n
[Ctrl][B], [Ctrl][F]
ou [Page up], [Page down]
Ecran précédent, suivant
n[|] Aller à la colonne n
[z][Entrée] Positionner la ligne courante en haut de l'écran
[m][m] Déposer la marque nommée 'm' à l'endroit du curseur. Les marques sont nommées de a à z dans le fichier courant. ([m][x] dépose la marque x).

Chercher, remplacer et copier

[/]str[Entrée] Recherche str , <b>:set ic</b> rend insensible à la casse.
[/]^str[Entrée] Cherche la prochaine ligne qui commence avec str
n[y][y] ou <b>n[</b>Y] Copie n lignes ([y][y] copie la ligne courante) dans le buffer
[n] Renouvelle la recherche précédente
[y][/]str Copie depuis le caractère courant, jusqu'avant str, dans le buffer
[y]n[w] Copie n mots à partir du mot courant, dans le buffer ([<b>y][w]</b> copie le mot courant)
[p] ou [P] Colle le contenu du buffer après ou avant le curseur (ou avant ou après la ligne courant si des lignes ont été copiées)
[:]x,ys/s1/s2/opt
Exemples :
[<b>:]%s/toto/titi/g</b>
Remplace tous les 'toto' par 'titi'
[:]1,$s/t[o,i]to/tata/
Remplace 'toto' ou 'tito' par 'tata'
Recherche entre les lignes x et y (optionnel) la chaîne s1 et la remplace par la chaîne s2 (pour remplacer chaque occurrence, utiliser l'option <b>g</b>). Remarque : <b>s1</b> et <b>s2</b> sont en fait des regexp (expressions régulières), permettant d'écrire un masque générique, mais c'est un autre sujet... Je vous conseille de taper <b>:help :s</b> et <b>:help regexp</b> dans votre vi favori...
[:]x,yg/str/cmd Recherche entre les lignes x et y (optionnel) la chaîne str et exécuter la commande <b>vi cmd</b> sur chaque occurrence

Cool et inusité

[~] Transforme les minuscules en majuscules et vice-versa
[.] (point) Répéte la dernière commande
[x][p] Echange le caractère courant avec le suivant
n[J] Supprime n retours à la ligne depuis la ligne courante
[d][']['] Efface tout de la ligne d'où on est parti par [<b>G]</b> jusqu'à la ligne courante
[d]['][m] Efface tout de la ligne de la marque (posée par [m][m]) jusqu'à la ligne courante
[y][']['] Copie tout de la ligne d'où on est parti par [G] jusqu'à la ligne courante
[y]['][m] Copie tout de la ligne de la marque (posée par [<b>m][m]</b>) jusqu'à la ligne courante
[:]%!sort Trie le fichier en cours d'édition
[:]%s/[Ctrl][V]
[Ctrl][M][Entrée]
Remplace les CRLF par des LF, plutôt supprime les CR (très utile).
Explication :
<b>:</b> fait passer en mode ligne,
<b>%</b> indique que la commande porte sur toutes les lignes du fichier,
<b>s</b> commande de substitution,
<b>/</b> début de la chaîne à remplacer,
Ctrl-V indique que le caractère qui suit doit être pris tel quel, même s'il s'agit d'un caractère de contrôle,
Ctrl-M c'est toute la différence entre un CRLF pour Windows et un LF pour Unix (vous pouvez aussi taper [Entrée] ; la Ctrl-M ou [Entrée] renvoient tous les deux un CR, i.e. le caractère de code 13),
Entrée signale qu'on a terminé de taper la commande, et notamment que la chaîne de remplacement est vide.
[:]syntax on Active la coloration syntaxique (dans vim, peut être ajouté dans le fichier ~/.vimrc)
[:]set number Affiche le numéro de ligne devant chaque ligne

Encore plus



@ Retour à la rubrique Administration système

@ Retour à la rubrique Logiciels


Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jean-Christophe Cardot le 02/11/1999.

Copyright

© 02/11/1999 Jean-Christophe Cardot

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 3.0 :
http://creativecommons.org/licenses/by-sa/3.0/
Affichages

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA