Informations générales de développement numérique.

Informations MEZOTICAM - Activités générales : Plus de masque, mais restons vigilants. Les contraintes sanitaires obligent à un ralentissement des développements. | Guerre en Ukraine : Un conflit qui mène à une pénurie alimentaire et informatique. | Cybersécurité : La guerre en Ukraine nous montre combien il est important de renforcer la sécurité informatique.
Chiffre 1Chiffre 6Chiffre 3Chiffre 1Chiffre 2Chiffre 9
depuis le 15/05/2009
Lundi 4 Juillet 2022 | Saint Florent

Editeur VI


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.

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.

CommandeEffet
>>ajoute une tabulation en début de ligne
<<retire une tabulation en début de ligne
"myymémorise la ligne courante dans le registre "m
"mpinsè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 100copie les lignes 10 à 20 à la ligne 100
:100$m 50déplace de la ligne 100 à la dernière ligne à la 50ème ligne
:10,20 s/TRUC/bidule/gremplace tous les TRUC par des bidule dans les lignes 10 à 20
:g!/machin/defface les lignes ne contenant pas le texte machin
:g/machin/defface les lignes contenant le texte machin
:r fichier.txtinsère le contenu du fichier fichier.txt
:10,20w fichier.txtenregistre 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 -linsère le résultat de la commande ls -l dans le fichier
:10,20g/condition/remplacer/resultat/gcremplace 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/defface 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/gRemplace toutes les occurrences de foo par bar
:3,7s%foo/bar%bar/foo%cRemplace 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/^[\.]*$/dsupprime les lignes vides