Infos
préalables.
Le nom vi correspondant à la fois à des initiales et au nom de son fichier d'installation, il est usuellement prononcé en énonçant les deux lettres en anglais,
c'est-à-dire « vi-aille », [vi: aɪ], plutôt que comme un mot à part entière [vi].
L'analogie de ce nom avec le chiffre romain VI (six) est fortuite.
vi est un éditeur modal, c'est-à-dire que la signification des boutons et des touches change selon le mode dans lequel il se trouve.
vi est devenu de facto l'éditeur standard d'unix et il a été l'éditeur favori de nombreux hackers jusqu'à l'arrivée d'Emacs en 1984.
Il est à noter qu'Emacs est bien plus qu'un simple éditeur de texte et est pourtant souvent mis en concurrence avec vi.
À ce jour (2011), vi ou l'un de ses clones peut être trouvé dans presque toutes les installations de Unix.
La Single UNIX Specification (plus particulièrement l'« IEEE standard 1003.2, Part 2: Shell and utilities ») inclut vi.
Ainsi, tout système se conformant à cette spécification intègre vi.
Commande |
Effet |
h et l |
déplace le curseur d'un caractère à gauche et à droite |
j et k |
déplace le curseur sur la ligne suivante et précédente |
G |
déplace le curseur à la fin du fichier |
H et L |
déplace le curseur en haut [H] et en bas [L] de l'écran |
a |
insère du texte après le curseur |
A |
insère du texte à la fin de la ligne courante |
c |
efface un certain nombre de caractères, en fonction de la sous-commande (par exemple cl permet de changer le caractère courant, cw la fin du mot courant) puis passe en mode insertion |
dd |
supprime la ligne courante (et la copie dans le buffer) |
dw |
supprime le mot après le curseur (et le copie dans le buffer) |
dW |
supprime la chaîne de caractères après le curseur (s'arrête au prochain caractère blanc) |
D |
supprime la fin de la ligne à partir du curseur |
i |
insère du texte avant le curseur |
o |
ouvre une nouvelle ligne en dessous de la ligne courante |
O |
ouvre une nouvelle ligne au-dessus de la ligne courante |
p (minuscule) |
insère le contenu du buffer après le curseur (ou après la ligne courante si le buffer contient des lignes) |
P (majuscule) |
insère le contenu du buffer avant le curseur (ou avant la ligne courante si le buffer contient des lignes) |
:q |
quitte vi |
:q! |
quitte vi même si les modifications n'ont pas été enregistrées |
:s |
remplace une chaîne de caractère par une autre. Par exemple, :s/avant/après/ remplace le mot « avant » par le mot « après » sur la ligne courante |
u |
undo, annule les effets de la commande précédente |
w |
place le curseur sur le premier caractère du mot suivant |
:w |
enregistre le fichier courant |
:wq ou :x ou ZZ |
enregistre le fichier courant et quitte |
x |
supprime le caractère sous le curseur |
yy |
copie la ligne courante dans le buffer (p insère la ligne copiée après la ligne courante) |
y3y |
copie 3 lignes dont la ligne courante dans le buffer (p insère les 3 lignes copiées après la ligne courante) |
yw |
copie le mot après le curseur dans le buffer (p insère le mot copié après le curseur) |
y3w |
copie les 3 mots après le curseur dans le buffer (p insère les 3 mots copiés après le curseur) |
/ |
recherche une chaîne de caractères après le curseur. Une pression sur la touche "n" permet d'aller directement à l'occurence suivante. |
? |
recherche une chaîne de caractères avant le curseur |
#commande |
exécute # fois la commande, par exemple 5dd efface 5 lignes |
!commande |
exécute une commande shell, par exemple :!gcc -o hello hello.c |
Echap |
quitte le mode insertion (retourne au mode commande) |
Commande |
Effet |
>> |
ajoute une tabulation en début de ligne |
<< |
retire une tabulation en début de ligne |
"myy |
mémorise la ligne courante dans le registre "m |
"mp |
insère le contenu du registre "m après la ligne courante ou après le curseur |
:$ |
place le curseur à la dernière ligne du tampon |
:1 |
(ou tout autre numéro) place le curseur sur la ligne correspondante |
:.= |
renvoie le numéro de la ligne courante |
:10,20t 100 |
copie les lignes 10 à 20 à la ligne 100 |
:100$m 50 |
déplace de la ligne 100 à la dernière ligne à la 50ème ligne |
:10,20 s/TRUC/bidule/g |
remplace tous les TRUC par des bidule dans les lignes 10 à 20 |
:g!/machin/d |
efface les lignes ne contenant pas le texte machin |
:g/machin/d |
efface les lignes contenant le texte machin |
:r fichier.txt |
insère le contenu du fichier fichier.txt |
:10,20w fichier.txt |
enregistre les lignes 10 à 20 dans le fichier fichier.txt |
:e! |
ouvre à nouveau le fichier courant (sert par exemple si le fichier a été modifié entre temps) |
:r!ls -l |
insère le résultat de la commande ls -l dans le fichier |
:10,20g/condition/remplacer/resultat/gc |
remplace tous les remplacer par des resultat dans les lignes contenant condition, en demandant confirmation à chaque fois, entre les lignes 10 et 20 |
:40,50 g/condition/d |
efface les lignes contenant condition, entre les lignes 40 et 50 |
:s/.*/\U&/ |
passe la ligne courante en majuscule |
:%s/^mot// |
efface le mot mot s'il est en début de ligne |
:%s/foo/bar/g |
Remplace toutes les occurrences de foo par bar |
:3,7s%foo/bar%bar/foo%c |
Remplace après confirmation (c) aux lignes 3 à 7 les occurrences de la sous-chaîne foo/bar par bar/foo. Cela montre que l'on peut utiliser un autre caractère séparateur que / (ici %) |
:g/^[\.]*$/d |
supprime les lignes vides |