Editeur VI
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.
Exemples de commandes simples
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) |
Exemples de commandes avancées.
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 |