Apprenez en lisant dans l'ordre

Les bases de l'éditeur de texte vi

Apprends à démarrer vi, à passer du mode normal au mode insertion, à revenir avec Esc, et à enregistrer avec :wq ou abandonner avec :q! — tout en pratique dans un terminal en navigateur.

Démarrer vi et ses modes

vi est un éditeur de texte présent sur presque tous les serveurs Linux.

Dans ce cours, tu apprendras les opérations vi minimales qui fonctionnent sur n'importe quel serveur.

vi a deux modes.

Juste après le démarrage, tu es en mode normal, où les touches servent de déplacement ou de commandes et où tu ne peux pas taper de texte.

Appuyer sur i passe en mode insertion, où tu peux taper des caractères.

Appuyer sur Esc te ramène en mode normal.

Les deux modes de vi
mode normaldéplacement /commande (:wq etc.)mode insertiontu peux taper du textepasse avec iretour avec Esc
Juste après le démarrage, tu es en mode normal. i entre en mode insertion, et Esc ramène en mode normal.
vi memo.txt   # ouvre memo.txt (démarre en mode normal)
# appuie sur i  -> mode insertion (tu peux taper)
# tape du texte
# appuie sur Esc -> retour au mode normal

Bloqué ? Esc puis :q! te fait sortir

Si tu fais une erreur et que l'écran semble bloqué, appuie quelques fois sur Esc puis sur :q! pour sortir et recommencer.

Ça te ramène toujours en sécurité à l'état d'origine.

① Ouvre note.txt avec vi note.txt (ça démarre en mode normal).

② Appuie sur i pour passer en mode insertion et tape hello vi.

③ Appuie sur Esc pour revenir en mode normal, puis tape :wq et appuie sur Entrée pour enregistrer et quitter.

④ De retour au terminal, lance cat note.txt et confirme que ce que tu as tapé a bien été enregistré. (Lance-le correctement et une explication apparaîtra.)

Linux console
0 / 2 exécutée(s)
Loading Linux Terminal...

Enregistrer et abandonner — :wq et :q!

Taper : en mode normal ouvre une ligne de commande où tu peux saisir des commandes liées à la sortie.

:wq signifie write and quit — c'est-à-dire enregistrer et fermer.

:w enregistre seulement sans quitter, et :q quitte quand il n'y a aucun changement.

:q! abandonne les changements et force la sortie, revenant à l'état d'avant l'édition.

Touche / CommandeModeAction
vi fileOuvrir un fichier (démarre en normal)
iNormalEntrer en mode insertion
EscInsertionRevenir en mode normal
:wNormalEnregistrer (sans quitter)
:qNormalQuitter (quand il n'y a aucun changement)
:wqNormalEnregistrer et quitter
:q!NormalAbandonner les changements et quitter
:wq enregistre, :q! abandonne
:wqenregistre et quitte(contenu conservé):q!abandonne et quitte(retour à avant l'édition)
:wq enregistre les changements et quitte ; :q! jette les changements et quitte.

:q! ne conserve aucun changement

:q! quitte en jetant tous les changements de cette session d'édition.

C'est pratique quand tu te trompes en tapant et veux recommencer, mais quand tu as du contenu à conserver, utilise :wq.

vi draft.txt   # ouvre
# i pour insérer -> tape du texte -> Esc
# tape :q!       -> abandonne les changements et quitte (draft.txt reste vide)
cat draft.txt  # rien n'a été écrit

① Ouvre scratch.txt avec vi scratch.txt.

② Passe en mode insertion avec i, tape temporary, puis appuie sur Esc.

③ Tape :q! et appuie sur Entrée pour abandonner les changements et quitter.

④ De retour au terminal, lance cat scratch.txt et confirme que rien n'a été enregistré parce que tu as abandonné.

Linux console
0 / 2 exécutée(s)
Loading Linux Terminal...

Aller plus loin avec vi — a / o et :w

i n'est pas la seule façon d'entrer en mode insertion.

a commence à taper à droite du curseur, et o ouvre une nouvelle ligne sous le curseur et commence à taper.

Le A majuscule commence à la fin de la ligne, et O ouvre une nouvelle ligne au-dessus du curseur.

Tous reviennent en mode normal avec Esc de la même manière.

Tu peux aussi utiliser les commandes d'enregistrement de façon sélective.

:w enregistre seulement, sans quitter, donc tu peux continuer à éditer.

Pour une longue édition, enregistre souvent avec :w et ferme avec :wq à la fin pour rester en sécurité.

ToucheOù la saisie commence
iÀ gauche du curseur (avant lui)
aÀ droite du curseur (après lui)
oSur une nouvelle ligne ouverte en dessous
AÀ la fin de la ligne
OSur une nouvelle ligne ouverte au-dessus
Différentes façons d'entrer en mode insertion
itape à gauchedu curseuratape à droitedu curseuroouvre une ligneen dessous et tape
i commence à gauche, a à droite, et o sur une nouvelle ligne en dessous. Tous reviennent avec Esc.

① Ouvre practice.txt avec vi practice.txt.

② Appuie sur o pour ouvrir une nouvelle ligne en dessous et entrer en mode insertion, puis tape first line.

③ Appuie sur Esc, appuie de nouveau sur o pour ouvrir une autre nouvelle ligne, tape second line, et appuie sur Esc.

④ Tape :w et appuie sur Entrée pour enregistrer (sans encore quitter), puis tape :q pour quitter.

⑤ Au terminal, lance cat practice.txt et confirme que les deux lignes ont été enregistrées.

Linux console
0 / 2 exécutée(s)
Loading Linux Terminal...

Supprimer et copier des lignes — dd / yy / p

En mode normal, tu peux éditer ligne par ligne sans taper de caractères.

dd supprime (coupe) toute la ligne où se trouve le curseur.

x supprime un caractère sous le curseur, et u annule l'opération précédente (undo).

yy copie (yank) la ligne où se trouve le curseur, et p colle le contenu copié — ou coupé avec dd — sur la ligne sous le curseur.

Une ligne coupée avec dd peut aussi se coller avec p, donc ça marche aussi pour déplacer des lignes.

ToucheAction
xSupprimer un caractère sous le curseur
ddSupprimer une ligne (couper)
3dd / d3dSupprimer plusieurs lignes avec un compteur (ex. 3 lignes)
yyCopier une ligne (yank)
10yy / y10yCopier plusieurs lignes avec un compteur (ex. 10 lignes)
pColler la ligne copiée / coupée en dessous
uAnnuler l'opération précédente
Éditer des lignes avec dd / yy / p
ddcoupe la ligne actuelleyycopie la ligne actuellepcolle sur la ligneen dessous
dd coupe, yy copie, et p colle sur la ligne en dessous. Tout se tape en mode normal.

① Ouvre edit.txt avec vi edit.txt.

② Entre en mode insertion avec i, tape one et Entrée, puis two, et appuie sur Esc pour préparer 2 lignes.

③ Copie la ligne actuelle avec yy et colle-la en dessous avec p, en confirmant que la même ligne est ajoutée.

④ Ensuite supprime la ligne où se trouve le curseur avec dd.

⑤ Enregistre et quitte avec :wq, et vérifie le résultat avec cat edit.txt.

Linux console
0 / 2 exécutée(s)
Loading Linux Terminal...

Ajouter un compteur devant te permet d'opérer sur plusieurs lignes à la fois.

3dd (ou d3d) supprime 3 lignes, et 10yy (ou y10y) copie 10 lignes.

Si tu colles avec p après une suppression ou une copie, tu peux déplacer ou dupliquer plusieurs lignes en une seule opération.

Opérer sur plusieurs lignes avec un compteur
3dd / d3dsupprime 3 lignesd'un coup10yy / y10ycopie 10 lignesd'un couppcolle les lignescopiées d'un coup
En ajoutant un compteur devant : 3dd supprime 3 lignes, 10yy copie 10 lignes. Colle-les d'un coup avec p.

① Ouvre block.txt avec vi block.txt.

② Entre en mode insertion avec i, tape one et Entrée, et de même tape two jusqu'à five une par ligne pour 5 lignes au total, puis appuie sur Esc.

③ Tape :1 et appuie sur Entrée pour aller à la ligne 1, coupe les 3 lignes du haut avec 3dd (ou d3d), puis colle ces 3 lignes sous le curseur avec p et confirme que tu peux déplacer des lignes.

④ Copie 2 lignes avec 2yy (ou y2y) et colle-les en dessous avec p.

⑤ Enregistre et quitte avec :wq, et vérifie le résultat avec cat block.txt.

Linux console
0 / 2 exécutée(s)
Loading Linux Terminal...

Déplacer le curseur et chercher — gg / G et / ?

Dans un long fichier, sauter d'un coup t'amène à destination plus vite que de te déplacer ligne par ligne.

gg déplace le curseur sur la première ligne du fichier, et G sur la dernière ligne.

Même là où gg ne fonctionne pas, 1G déplace sur la première ligne.

Pour trouver du texte, utilise la recherche.

Taper /word puis Entrée cherche vers l'avant (vers le bas) le mot word à partir du curseur.

?word cherche vers le haut (en arrière), n se déplace vers la correspondance suivante dans le même sens, et N vers une correspondance dans le sens opposé.

Tout cela se tape en mode normal ; pas besoin d'Esc.

ToucheAction
gg / 1GAller à la première ligne
GAller à la dernière ligne
/wordChercher vers le bas (en avant) le mot word
?wordChercher vers le haut (en arrière) le mot word
n / NVers la correspondance suivante / précédente
Se déplacer avec gg / G et chercher avec / ?
gg / 1Galler à lapremière ligneGaller à ladernière ligne/word ncherche vers le bas,suivant?word Ncherche vers le haut,sens opposé
gg/G sautent à la première/dernière ligne ; /word cherche vers le bas et ?word vers le haut, n/N allant à la correspondance suivante/précédente.

① Prépare un fichier avec beaucoup de lignes en utilisant ls -l /bin > nav.txt.

② Ouvre-le avec vi nav.txt, va à la dernière ligne avec G, et à la première ligne avec gg (ou 1G).

③ Tape /sh et appuie sur Entrée pour chercher vers le bas les lignes contenant sh, puis va à la correspondance suivante avec n et à la précédente avec N.

④ Tape ?ls et appuie sur Entrée pour chercher cette fois ls vers le haut.

⑤ Comme tu n'as fait aucun changement, quitte avec :q et reviens au terminal.

Linux console
0 / 2 exécutée(s)
Loading Linux Terminal...
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Pour pouvoir taper du texte dans vi, sur quoi appuies-tu en mode normal ?

Question 2Sur quoi appuies-tu pour revenir du mode insertion au mode normal ?

Question 3Que se passe-t-il quand tu lances :q! ?