Résumé
Vi a été le premier éditeur plein écran. Étrangement, il représente un des principaux arguments à la fois des détracteurs d'UNIX et de ses défenseurs : s'il est compliqué à appréhender, c'est aussi un outil extrêmement puissant une fois maîtrisé. En ne tapant que quelques touches, un utilisateur de Vi peut déplacer des montagnes ! Mis à part Emacs, peu d'éditeurs de texte peuvent se vanter de cela.
La version incluse dans Mandrakelinux est en fait Vim, pour VI iMproved (VI aMélioré), mais nous le nommerons Vi tout au long de ce chapitre.
Si vous souhaitez en apprendre davantage sur Vi, vous pouvez jeter un œil au Guide de survie sous VI ou à la Page d'accueil de Vim.
Tout d'abord, l'invocation : elle est exactement la même que pour Emacs. Reprenons donc nos deux fichiers et tapons :
$ vi fichier1 fichier2
À partir de là, vous vous retrouverez devant une fenêtre comme celle- ci :
Vous vous retrouvez alors en mode commande devant le premier fichier ouvert. Et là, ça se complique légèrement... En mode commande, vous ne pouvez pas insérer de texte dans un fichier... Il vous faut pour cela passer en mode insertion.
Voici quelques raccourcis pour ajouter du texte :
En mode insertion, vous verrez la chaîne
--INSERT--
apparaître en bas de l'écran
(de cette façon vous savez dans quel mode vous êtes). C'est dans ce
mode et uniquement dans celui-ci que vous pouvez insérer du texte. Pour
revenir en mode commande, appuyez sur la touche Échap.
En mode insertion, vous disposez des touches Retour et Suppr pour effacer du texte à la volée. Pour vous déplacer dans le texte, aussi bien en mode commande qu'en mode insertion, vous disposez des touches fléchées. En mode commande, il existe également d'autres combinaisons de touches, que nous verrons plus loin.
Le mode ex est disponible en tapant le caractère : en mode commande : ce même : apparaîtra en bas de l'écran, le curseur s'y positionnera également et tout ce que vous tapez à la suite, suivi d'une pression sur Entrée, sera considéré par Vi comme une commande ex. Si vous effacez la commande jusqu'à « effacer » le :, vous revenez alors en mode commande et le curseur retrouvera sa place d'origine.
Pour enregistrer les modifications
faites dans un fichier vous taperez :w
en mode
commande. Si vous voulez enregistrer le contenu du tampon dans un
autre fichier, tapez la séquence :w
<nom_du_fichier>
.
Pour se déplacer d'un
fichier à l'autre dans un même tampon, parmi ceux ayant été passés sur
la ligne de commande, il vous faut taper :next
pour passer au fichier suivant et :prev
pour
retourner au fichier précédent. Vous pouvez aussi vous servir de
:e <nom_de_fichier>
, qui permet à la fois
de se déplacer vers le fichier désiré si celui-ci est déjà ouvert, ou bien
d'ouvrir un autre fichier. Vous disposez là aussi du
complètement.
Comme avec Emacs, vous
pouvez avoir plusieurs tampons visibles à l'écran. Pour cela, utilisez
la commande :split
.
Pour changer de tampon, tapez
Ctrl-w
j pour passer au tampon du dessous ou
Ctrl-w
k pour retourner au tampon du
dessus. Vous pouvez utiliser également les touches fléchées vers le
haut ou vers le bas en lieu et place de j ou
k. La commande :close
cachera
un tampon, la commande :q
le fermera.
Attention, Vi est tatillon : si vous tentez de cacher ou de fermer un tampon dont les changements n'ont pas été sauvegardés, la commande ne sera pas effectuée et vous aurez ce message :
No write since last change (use! to override)
soit : pas de sauvegarde
depuis le dernier changement (utilisez ! pour
forcer la commande). Dans ce cas, il n'y a qu'une solution :
faire ce qui est indiqué ! Tapez :q!
ou :close!
.
Outre les touches Retour et Suppr dans le mode d'édition, Vi dispose de beaucoup de commandes pour effacer, copier, coller, remplacer du texte en mode commande. Nous en verrons ici quelques-unes. Toutes les commandes présentées ici sont en fait séparées en deux parties : l'action à effectuer et sa portée. L'action peut être :
La portée désigne le groupe de caractères sur lequel la commande doit agir.
h, j, k, l : un caractère à gauche, en bas, en haut, à droite[12] ;
e, b, w : jusqu'à la fin (resp. au début) du mot courant, jusqu'au début du mot suivant ;
^, 0, $ : jusqu'au premier caractère non blanc de la ligne courante, jusqu'au début de la ligne courante, et jusqu'à la fin de la ligne courante ;
f<x>
:
jusqu'à la prochaine occurrence du caractère
<x>
; par exemple
fe
déplace le curseur jusqu'à la
prochaine occurrence du caractère
e
;
/<chaîne>
,
?<chaîne>
: jusqu'à la
prochaine occurrence de la chaîne ou expression régulière
<chaîne>
. ?<chaîne> en fait de même en remontant
dans le fichier ; par exemple, /toto
déplace le curseur jusqu'à la prochaine occurrence du mot
toto
;
G, H : jusqu'à la fin du fichier, jusqu'au début de l'écran.
Chacun de ces caractères de portée ou commandes de déplacement peut être précédé d'un nombre de répétition quand cela a un sens. G référence le numéro de ligne dans le fichier. À partir de là, vous pouvez faire toutes sortes de combinaisons.
Bien que beaucoup de ces commandes ne soient pas très intuitives, le meilleur moyen de se familiariser avec elles est la pratique. En tout cas, vous pouvez voir que l'expression « déplacer des montagnes avec quelques touches » n'est pas si exagérée que ça !
Vi dispose d'une commande que nous avons déjà vue pour copier du texte : la commande y. Pour couper du texte, utilisez tout simplement la commande d. Vous disposez de 27 mémoires pour y stocker du texte : une mémoire anonyme et 26 mémoires portant le nom des 26 lettres minuscules de l'alphabet.
Pour utiliser la mémoire anonyme, il suffira d'entrer la commande « telle quelle ».
Ainsi, la commande y12w
copie dans la mémoire anonyme les
12 mots après le curseur.[13]. Utilisez d12w
si vous voulez couper cette zone.
Pour utiliser l'une des 26
mémoires nommées, utilisez la séquence
"<x>
avant la commande, où
<x>
désigne le nom de la mémoire. Ainsi,
pour copier les mêmes 12 mots dans la mémoire k
, on
écrirait "ky12w
, et
"kd12w
si on veut les couper.
Pour coller le
contenu de la mémoire anonyme, vous disposez des commandes
p
ou P
(pour
Paste, soit coller), ce qui insérera le
texte après ou avant le curseur. Pour coller
le contenu d'une mémoire nommée, utilisez de la même façon
"<x>p
ou
"<x>P
(par exemple
"dp
collera le contenu de la mémoire
d
après le curseur).
Pour effectuer cette action, on va donc :
recopier les 6 premiers mots de
la phrase dans la mémoire r
(par
exemple) : "ry6w
[14] ;
passer dans le tampon
fichier2
, qui se situe dessous :
Ctrl-w j ;
Le résultat, présenté dans la Figure 4.6, « vim, après la copie du bloc de texte », est bien celui qui est attendu.
Quant à la recherche
de texte, elle s'avère très simple : en mode commande, il
suffit de taper / suivi de la chaîne à rechercher
et d'une pression sur la touche Entrée. Par
exemple, /partie
recherchera la chaîne
partie
à partir de la position courante.
Appuyer sur n conduit à la prochaine occurrence
et si vous arrivez à la fin du fichier, la recherche recommencera
depuis le début. Pour rechercher en remontant dans le fichier, il
faut remplacer / par ?.
Pour quitter, la commande est
:q
(en fait, cette commande ferme le tampon
actif, comme nous l'avons déjà vu, mais si c'est le seul tampon
présent, vous quittez Vi). Il existe un raccourci : la
plupart du temps, on n'édite qu'un seul fichier. Pour quitter,
vous avez deux solutions :
Par extension, vous aurez deviné
que si vous avez plusieurs tampons, :wq
sauvegardera le tampon actif puis le fermera.
[12]
Un raccourci pour dl
(effacer un caractère à droite) est x ; un
raccourci pour dh
est X ;
dd
efface la ligne courante.
[13] Si le curseur se trouvait au début du premier mot, évidemment !
[14] En anglais,
y6w
donne littéralement : «
Yank 6 words », soit
extirper 6 mots, et donc copier 6 mots en français.