Dans la même famille, il existe encore l'éditeur sed (éditeur batch). vi n'est pas une application X-window et n'est donc pas orienté souris/menus. Si c'est ce que vous recherchez, voyez plutôt les éditeurs xedit, emacs, textedit, axe... Il est cependant bon de connaître les rudiments d'utilisation de vi qui est l'éditeur que l'on est certain de trouver sur tous les systèmes Unix. Nous ne décrivons ci-après que les commandes principales de vi.

Lancement de l'éditeur

vi {fichier}
Lancement de vi avec ouverture fichier en mode écriture
+ = positionnement à la fin du fichier
+n = positionnement au No de ligne n spécifié
+/chaîne = positionnement sur chaîne spécifiée
-r = application préalable du journal d'édition de la session vi précédente (à faire après session d'édition avortée par un crash)
vi -R fichier ou
view fichier
Lancement de vi sur fichier en mode lecture seulement

Prologue d'édition

Au lancement, vi consulte la variable d'environnement TERM qui défini le type de terminal (p.ex. "vt100", "xterm"...). Le prologue d'édition est constitué par le fichier ~/.exrc , à moins que l'utilisateur n'aie redéfini la variable d'environnement EXINIT. On peut introduire dans ce prologue toute commande ex de type ":commande" en omettant le caractère ":" : principalement configuration l'éditeur avec les commandes "set option" ou "set option=valeur" (voir la liste des options vi et leurs valeurs courantes avec la commande ":set all").

Les modes de travail de vi

Mode commande :
  • c'est le mode principal, dans lequel on se trouve en entrant dans l'éditeur
  • on a alors accès aux différentes commandes de déplacement et d'édition/insertion (commandes case sensitive)
Mode d'insertion :
  • on y entre avec les commandes : i, I, a, A, o, O, c..., C, s, S, R
  • on en sort avec <ESC> pour se retrouver dans le mode commande
Mode "ligne" (ou mode commande ex) :
  • c'est le mode dans lequel on passe des commandes de type ex agissant généralement de façon globale sur tout le fichier
  • on y entre avec ":", la commande que l'on frappe s'affiche au bas de l'écran, on la lance avec <CR>, et l'on se retrouve alors dans le mode commande
Lorsque l'on ne sait plus dans quel mode on se trouve, appuyer sur <ESC> : si on est déjà en mode commande, le terminal "beep" et on reste dans ce mode; si on est en mode d'insertion, on repasse en mode commande.

Sortie de l'éditeur

:wq ou ZZ
Sortie de vi avec mise-à-jour du fichier (Write Quit)
:q{!}
Quitte vi sans mise-à-jour du fichier. Le "!" est nécessaire si l'on veut quitter alors que l'on a touché au fichier

Positionnement/déplacement dans le fichier

Attention : il faut être en mode commande (donc sortir du mode d'insertion) pour pouvoir se déplacer dans le fichier !

  En avant       En arrière
  ********       **********

A) Déplacement du point d'insertion

-> (ou l," ") <- (ou h) Déplac.d'un car. (à droite ou à gauche) v (ou j) ^ (ou k) Déplac.d'une ligne (en bas ou en haut) w (ou W) b (ou B) Début mot (maj.=ignore ponctuation) (Word, Back) e (ou E) Fin mot (maj.=ignore ponctuation) $ 0 Fin ou début ligne courante + (ou <CR>) - Début ligne suivante ou précédente } { Début paragraphe suivant ou précédent n| Colonne n de la ligne courante H Haut de l'écran (High) M Milieu de l'écran (Middle) L Bas de l'écran (Low) mx Marque position courante par car. x (Mark) `x Se positionne sur marque x 'x Se positionne au début ligne marquée x

B) Déplacement du document

{n}G Déplac. en fin de fichier {ou à ligne No n} <ctrl-f> <ctrl-b> Déplac. d'une page-écran (Forward, Backward) <ctrl-d> <ctrl-u> D'une 1/2 page-écran (Down, Up) z<cr> Ligne courante au haut écran z. Ligne courante au milieu écran z- Ligne courante au bas écran

Insertion

Commandes mettant l'utilisateur en mode d'insertion (en sortir avec <ESC>) :
i
Insertion de texte sous le curseur
ni
Insère n fois la portion de texte
a
Insertion de texte après le curseur (Add)
I
Insertion de texte au début de la ligne courante
A
Insertion de texte à la fin de la ligne courante (Append)
o
Insertion d'une ligne après la ligne courante (Open)
O
Insertion d'une ligne avant la ligne courante

Destruction

{n}x
Détruit le caractère sous le curseur {les n car. depuis curseur}
{n}X
Détruit le caractère placé juste avant le curseur {les n car. placés avant le curseur}
ddéplacement
Détruit depuis la position courante le bloc de texte défini par la commande de déplacement. Exemples :
{n}dw ou d{n}w = détruit le mot courant {les n mots suivants}
{n}db ou d{n}b = détruit le mot précédent {les n mots précédents}
d0 = détruit en arrière jusqu'au début de la ligne
dG = détruit jusqu'à la fin du fichier
d`x = détruit jusqu'à la marque x
d/chaîne = détruit jusqu'à la prochaîne occurence de chaîne
{n}dd
Détruit toute la ligne courante {les n lignes à partir de la ligne courante}
D
Détruit la fin de la ligne courante (identique à d$)
J
Détruit le <CR> à la fin de la ligne courante (Join two lines)
Lorsque l'on est en mode d'insertion :
<DEL> ou <ctrl-h>
Revient en arrière d'un caractère
<ctrl-w>
Revient en arrière d'un mot

Remplacement

Commandes de modification d'un seul caractère, laissant l'utilisateur en mode commande :
rx
Remplace le caractère sous le curseur par le caractère x
~
Changement majuscule<->minuscule du caractère sous le curseur
Commandes mettant l'utilisateur en mode d'insertion (en sortir avec <ESC>) :
cdéplacement
Remplace le bloc de texte défini par commande de déplacement
Exemples : cw (remplace mot), cG (remplace jusqu'à la fin du fichier), etc...
{n}cc ou {n}S
Remplace la ligne courante dans son entier {les n lignes à partir de la ligne courante}
C
Remplace la fin de la ligne courante (identique à c$)
{n}s
Remplace le caractère sous le curseur {les n caractères qui suivent}
R
Remplacement dans une ligne en mode surécriture (overwrite)

Annulation

u
Annule la dernière modification (Undo)
U
Annule les changements faits dans la ligne courante

Recherche de chaînes de caractères

/motif
Recherche en avant la chaîne de caractère correspondant à motif (selon syntaxe expression régulière). Faire donc préfixer par le caractère "\" les caractères suivants qui, sinon, ont une signification particulière : / \ . ^ [ ] *
?motif
Recherche en arrière
n
Recherche occurence suivante de la même chaîne (Next)
N
Recherche occurence précédente de la même chaîne
fx
Positionnement sur prochain caractère x de la ligne courante
Fx
Positionnement sur précédent caractère x de la ligne courante

Substitution

:%s/chaîne1/chaîne2/gc
Substitue chaîne chaîne1 en chaîne2 dans tout le fichier (%) avec confirmation (c) : frapper "y" pour substitition et <CR> pour non-substitution. A la place de "%" on peut donner i,j pour indiquer de la ligne i à la ligne j (donner "$" pour spécifier la dernière ligne du fichier). En fait chaîne1 est aussi, comme dans la commande de recherche ci-dessus, une expression régulière.
:%s/Ctrlv Ctrlm/\n/g
donne :%s/^M/\n/g
Substitue retour chariot window en retour chariot unix dans tout le fichier % en global avec g. Ctrl v Ctrl m pour ^M et \n pour le retour chariot unix.

Utilisation du buffer

ydéplacement
Mémorise dans le "buffer" le bloc de texte défini par commande de déplacement (Yanke)
Exemples : yw (mémorise mot), yG (mémorise jusqu'à la fin du fichier), etc...
{n}Y ou {n}yy
Mémorise la ligne entière courante dans buffer {les n lignes à partir de la ligne courante}
p
Insère le contenu du buffer après le curseur (Put)
P
Insère le contenu du buffer avant le curseur
Les directives de destruction vues précédemment (d...) mémorisent également dans le buffer la partie de texte détruite que l'on peut donc aussi ultérieurement insérer avec les commandes p ou P.

Commandes diverses

.
Répète la dernière commande vi passée
:i,jmk
Déplace les lignes i à j après la ligne k (Move)
:!commande
Exécute commande Unix spécifiée (dans le shell défini par l'option shell) puis retourne dans vi
<ctrl-g>
Affiche le No de la ligne courante
<ctrl-l> ou <ctrl-r>
Raffraîchit l'écran

Interaction avec fichiers externes

:r fichier
Insère le contenu du fichier spécifié à la position courante
:r !commande
Insère la sortie standard de la commande Unix (dans le shell défini par l'option shell, par défaut Bourne)
:w{!} fichier
Sauve le buffer d'édition sur fichier spécifié {avec ! : overwrite protection}
:i,j w {>>} fichier
Sauve lignes i à j sur fichier spécifié {en mode append}

Options

Ne pas mettre le ":" lorsque l'on introduit ces commandes dans le prologue ~/.exrc
:set all
Affiche liste de toutes les options
:set option?
Affiche valeur de l'option spécifiée
:set option
Active l'option spécifiée
:set nooption
Désactive l'option spécifiée
:set option=valeur
Assigne valeur à l'option spécifiée
Quelques options particulièrement intéressantes :
{no}ic
Ignore différences entre majuscules et minuscules [ignorecase] lors d'une recherche (défaut : désactivé)
{no}nu
Affichage des Nos de ligne [number] sur la gauche de l'écran (défaut : désactivé)
{no}showmode
En mode d'insertion, affiche au bas de l'écran message indiquant le type d'insertion (défaut : désactivé)
{no}ai
Indente chaque ligne [autoindent] au même niveau que la précédente ou suivante (défaut : désactivé)
sw=n
Défini le nombre d'espaces [shiftwidth] pour auto-indentation (défaut : 8)
ts=n
Défini le nombre d'espaces [tabstop] insérés par touche <TAB> (défaut : 8)