Utilisation de vi

État : {a_reli}

Retour au document principal

Pré-requis

Objectifs

vi est l'éditeur par défaut de la plupart des distributions Linux. Il est considéré comme aussi essentiel que grep ou cat, on le trouve donc dans le répertoire /bin.

Les modes de vi

Pour effectuer les opérations d'édition complexes comme le copier/collé, vi fonctionne dans trois modes différents.

Le mode normal

C'est un mode d'édition et de navigation. En général, les commandes sont simplement une lettre. Par exemple, utilisez j (jump) pour passer à la ligne suivante.

Tenez comme règle d'or que si vous souhaitez effectuer une opération plusieurs fois, vous pouvez faire précéder la commande par le nombre de fois. Par exemple 10j saute 10 lignes.

Il arrive que les touches directionnelles du clavier ne soient pas convenablement gérées. Dans ce cas, il reste possible de se déplacer en utilisant les commandes h j k l qui auront les effets suivants :

touche

direction

h

gauche

j

bas

k

haut

l

droite

NdT : il y a un moyen mnémotechnique : j ressemble à une flèche basse.

Le mode ligne de commande

On entre dans ce mode en tapant sur deux points (":"). Les deux points apparaissent en bas à gauche de l'écran. Ce mode peut être utilisé pour rechercher du texte, enregistrer, quitter, ou lancé une commande shell.

Le mode d'insertion

Le plus simple pour entrer dans ce mode à partir du mode normal est de taper i ou a. Ce mode est le plus intuitif et est surtout utilisé pour saisir du texte dans un document.

La touche Echap sort du mode d'insertion et retourne au mode normal

Éléments de texte

Le mode normal permet d'utiliser des éléments de texte (mots ou des paragraphes) comme mouvements, ce qui permet d'appliquer des commandes d'édition aux documents sans utiliser de souris.

Mots, phrases et paragraphes

e resp. b

se déplacer à la fin (e : end) / au début (b : beginning) du mot actuel

( resp. )

se déplacer au début / à la fin de la phrase actuelle

{ resp. }

sé déplacer au début / à la fin du paragraphe actuel

w

Même chose que e mais inclue l'espace à la fin du mot

Début et fin

^

début de ligne

$

fin de ligne

1G

début du fichier

G

fin du fichier

On peut utiliser ces mouvements pour se déplacer dans le texte un mot (w), ou un paragraphe (}) à la fois, aller au début de la ligne (^) ou à la fin du fichier (G). Mais on pourra également utiliser ces élements pour des commandes de suppression ou de copie.

Insertion de texte

Si, à partir du mode normal, vous tapez i, vous pouvez saisir du texte dans votre document. Comme pour toutes les fonctionnalités de vi, il y a plusieurs manière d'y arriver. Le tableau ci-dessous liste tous les modes d'insertion possibles :

Commandes d'insertion

a

ajoute du texte, le curseur se plaçant après le caractère actuel

A

ajoute du texte en fin de ligne

i

insère du texte sur la position actuelle

o

insère du texte en créant une nouvelle ligne au dessous

O

insère du texte en créant une nouvelle ligne au dessus

s

supprime le caractère actuel et insère

S

supprime la ligne actuelle et insère

Lorsqu'on modifie un document, il est très pratique de supprimer la partie du texte que vous souhaitez remplacer juste avant d'entrer en mode d'insertion, ce qui est possible grâce à la commande c (change). Comme pour les autre commandes de ce paragraphe, c vous place en mode d'insertion, mais vous pouvez également préciser la portion de texte que vous souhaitez supprimer avant. Par exemple c$ supprime le texte du curseur à la fin de ligne.

Il existe une autre commande pour remplacer un caractère (rien d'autre !) : r. Tout d'abord, placez le curseur sur le caractère à remplacer puis tapez r puis un autre caractère. Le nouveau caractère remplace l'ancien. Avec cette commande, vous restez en mode normal, vous ne passez pas en mode insertion.

Couper / Coller

Pour supprimer un caractère à partir du mode normal, on utilise x, dd pour supprimer la ligne actuelle. On peut ensuite copier l'élément supprimé avec la commande p.

Presque toutes les commandes vi peuvent être répétées en spécifiant un nombre avant la commande. On peut également appliquer la commande à un éléments (mot, phrase ou paragraphe) en plaçant l'élément après la commande.

Exemples :

On peut simultanément supprimer un élément et passer en mode d'insertion avec la commande c. Comme toujours, vous pouvez utiliser cette commande avec un élément de texte comme w ou {.

Le dernier éléments supprimé est toujours placé dans le tampon (buffer) et peut être collé avec la commande p. C'est équivalent à une opération de copier/coller

Copier / Coller

La commande de copié dans vi en mode normal est y (pour yank, la lettre c ayant déjà été prise pour change), et la commande pour coller est p (paste).

Si on copie une ligne en entier, le texte collé sera inséré sur la ligne en dessous su curseur.

La sélection du texte se fait avec les éléments de texte w, l, }, $, etc. Il y a quelques exceptions, comme l'exemple suivant :

Exemples :

Recherche et remplacement

La recherche utilise les correspondances de motifs, nous devons donc utiliser les expressions rationnelles (regex). Tout comme beaucoup d'outils de manipulation de texte tels que grep et sed, vi prend en charge les expressions rationnelles.

Pour effectuer une recherche, on doit être en mode normal. La barre oblique / (slash) effectue la recherche vers l'avant et le point d'interrogation ? effectue la recherche en arrière.

On peut également effectuer des opérations de recherche et remplacement. La syntaxe est similaire à sed.

Exemples :

Annuler et rétablir

Au point où nous en sommes, ça vaut la peine d'indiquer qu'on peut toujours annuler les modifications ! En mode commande, on annule avec la commande u (undo) qui fonctionnent tant qu'on n'a pas enregistré le fichier. La commande pour rétablir (redo) est ^R.

Lancer une commande du shell

En mode ligne de commande, tout ce qui suit le point d'exclamation ! est considéré comme une commande shell.

Par exemple, alors que vous éditez lilo.conf ou grub.conf, vous souhaitez vérifier le nom de la partition racine. Vous pouvez taper :

:!df /   

Enregistrer et quitter

La commande pour enregistrer est :w (write). Par défaut, le document est enregistré en entier. Il arrive que vi refuse d'enregistrer le fichier parce que vous n'avez pas les droits suffisants. Dans ce cas, on peut essayer de forcer l'écriture avec :w!.

On peut également spécifier un nom de fichier alternatif. On peut également enregistrer des parties du texte sur un autre fichier ou lire et coller du texte d'autres fichiers dans le document présent. Voici quelques exemples pour illustrer ces possibilités.

Exemples :

/!\ : en mode ligne de commande :

Les commandes suivantes correspondent aux différentes possibilités pour quitter vi

:wq

enregistre et quitte

:q!

quitte sans enregistrer

:x

quitte en enregistrant (si modification

:quit

pareil que :q

:exit ou :e

pareil que :x

ZZ

pareil que :x

Résumé et exercices

Questions de révision

Oui ou Non

  1. La commande l (L minuscule) place le curseur un cran à gauche : _

  2. La commande 3dd supprime 3 lignes : _

  3. La commande 3wd supprime 3 mots : _

  4. La commande :qw enregistre et quitte : _

Voir les réponses

Commandes

Action pour vi

Description

c^,$

début et fin de ligne

1G,G

début et fin de document

b,e

début et fin de mot

(,)

début et fin de phrase

{,}

debut et fin de paragraphe

w,W

mot et mot incluant les césures et la ponctuation

h,j,k,l

touches de direction : gauche, bas, haut, droite

:!

appelle une commande shell

:quit,:q

quitte

:quit!,:q!

quitte en abandonnant les modifications

:wq

enregistre et quitte

:exit,:x,:e,ZZ

sort (en enregistrant les modifications si nécessaire)

/,?

recherche vers l'avant et vers l'arrière

a,A,i,o,O,s,S

place en mode insertion

c

place en mode insertion en modifiant un élément

r

remplace un caractère seul en mode normal

d,dd

supprime un élément ou une ligne

x

supprime un caractère

y,yy

copie un élément ou une ligne

p

colle le contenu du tampon

u,^R

annuler, rétablir

Travaux pratiques

  1. En tant que root, copiez /var/log/messages dans /tmp. En utilisant les fonctions de recherche et de remplacement de vi, faites débuter chaque ligne par " et finir avec " ;

  2. Tapez u pour annuler les modifications

  3. Copiez /etc/lilo.conf dans /tmp. Éditez le fichier et jouez avec les copier / coller (yy/p) et les couper / coller (dd /p)

  4. Étudiez le résultat des commandes :x, ZZ, :quit, :wq, et :q! : quelles commandes enregistrent et n'enregistrent pas ?

  5. Étudiez le résultat des différents modes d'nsertion : A, a, O, o, S et s

  6. Facultatif : si vous en avez le temps, le paquet vim-enhanced installe un programme appelé vimtutor qui vous guidera à travers les options de vi les plus courantes.

Réponses aux questions

  1. non - regardez comment les touches hjkl sont placées sur le clavieR. La touche l est à droite et déplace le curseur à droite.

  2. oui

  3. non - 3w déplace le curseur 3 mots plus loin, puis d est une commande incomplète. On peut supprimer 3 mots avec d3w

  4. non - les commandes :qw sont lues de gauche à droite. Donc quitter (q) doit toujours être en dernier.

Page consultée 279 fois