Utilisation de vi
État :
Sommaire
Pré-requis
- Aucun
Objectifs
- comprendre les trois modes de vi
- introduction aux commandes d'éditions les plus courantes
- utilisation des expressions régulières et des commandes sed
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 :
- supprimer un mot
dw
- supprimer le texte de notre position actuelle à la fin de ligne
d$
- supprimer le texte de notre position actuelle à la fin du paragraphe
d}
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 :
- copier le texte de la position actuelle à la fin de ligne
y$
- copier la ligne en entier
yy
- copier 3 lignes
3yy
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 :
- recherche vers le bas de mots commençant par "comp" dans tout le texte :
/\<comp
- recherche vers le haut de lignes commençant par la lettre "z" :
Upward search for lines starting with the letter z ?^z
- Recherche dans l'ensemble du texte du mot clé "VAR" et remplacement par "var" :
:% s/VAR/var
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 :
- enregistrer le document présent comme "nouveau" :
:w nouveau
- enregistrer les lignes 15 à 34 dans un fichier appelé "extrait" :
:w 15,24 extrait
- lire le fichier "extrait". Le texte sera collé au niveau du curseur :
:r extrait
: en mode ligne de commande :
. correspond à la ligne actuelle
$ correspond à la fin du document
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
La commande l (L minuscule) place le curseur un cran à gauche : _
La commande 3dd supprime 3 lignes : _
La commande 3wd supprime 3 mots : _
La commande :qw enregistre et quitte : _
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
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 " ;
Tapez u pour annuler les modifications
Copiez /etc/lilo.conf dans /tmp. Éditez le fichier et jouez avec les copier / coller (yy/p) et les couper / coller (dd /p)
Étudiez le résultat des commandes :x, ZZ, :quit, :wq, et :q! : quelles commandes enregistrent et n'enregistrent pas ?
Étudiez le résultat des différents modes d'nsertion : A, a, O, o, S et s
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
non - regardez comment les touches hjkl sont placées sur le clavieR. La touche l est à droite et déplace le curseur à droite.
oui
non - 3w déplace le curseur 3 mots plus loin, puis d est une commande incomplète. On peut supprimer 3 mots avec d3w
non - les commandes :qw sont lues de gauche à droite. Donc quitter (q) doit toujours être en dernier.
Page consultée 505 fois