Commandes vi sous Linux : aide-mémoire | les 3 modes de Vim et le mode visuel

Ouvrir vi et constater que rien de ce que l'on tape ne s'affiche, ou fermer la fenêtre faute de savoir en sortir : presque tout le monde passe par là la première fois qu'il touche à un serveur. La commande vi sous Linux, autrement dit l'éditeur vi, sépare le mode normal et le mode insertion : une fois que vous savez dans quel mode vous êtes, le reste se fait avec quelques touches. Cet article présente les trois modes et les commandes de chaque mode sous forme de tableaux, et vous permet d'essayer vi vous-même sur un serveur virtuel dans le navigateur.
Sous AlmaLinux 9.8, vi et vim proviennent tous deux du paquet vim 8.2, et les écrans et messages de cet article viennent de vim. S'il n'est pas installé, installez-le avec [dnf -y install vim-enhanced].
✅ Les trois modes de vi
Dans vi, une même touche fait une chose différente selon le mode. Un fichier s'ouvre en mode normal ; i fait passer en mode insertion pour taper du texte, Esc ramène au mode normal, et les deux-points [:] ouvrent le mode ligne de commande pour enregistrer et quitter.
| Mode | Touche pour y entrer | Rôle |
|---|---|---|
| Mode normal | Mode de départ de vi · Esc depuis un autre mode | Déplacer le curseur, supprimer, copier, coller, annuler |
| Mode insertion | i a I A o O | Saisie du texte. En bas de l'écran : [-- INSERT --] |
| Mode ligne de commande | : | Enregistrer, quitter, remplacer, régler les numéros de ligne. Un : s'affiche en bas de l'écran |
| Mode visuel | v V Ctrl-v | Sélectionner une zone, puis supprimer, copier ou saisir sur toutes les lignes à la fois |
Dans la console, il existe trois façons d'ouvrir un fichier.
| Commande | Description |
|---|---|
| vi fichier | Ouvre le fichier en mode normal. S'il n'existe pas, il est créé et [New] s'affiche |
| vi +20 fichier | Ouvre avec le curseur sur la ligne 20 |
| view fichier= vi -R | Ouvre en lecture seule. Une modification déclenche l'avertissement [W10], un enregistrement l'erreur [E45] |
Tapez [vi httpd.conf] sur le serveur virtuel ci-dessous : vi s'ouvre et le menu de gauche passe aux commandes de vi. Un clic sur une puce saisit cette touche à l'écran ; vous pouvez aussi la taper au clavier.
✅ Aide-mémoire des commandes vi sous Linux
🔲 Déplacer le curseur
| Touche | Description |
|---|---|
| h j k l← ↓ ↑ → | Déplacement d'un caractère. Les flèches marchent aussi |
| 0 · ^ | Début de ligne (0) · premier caractère non blanc de la ligne (^) |
| $ | Fin de ligne |
| w · b · e | Début du mot suivant · début du mot précédent · fin du mot suivant |
| gg · G | Première · dernière ligne du fichier |
| 20Gcomme :20 | Aller à la ligne 20. Changez le nombre pour aller à n'importe quelle ligne |
| H · M · L | Ligne du haut · du milieu · du bas de l'écran |
| Ctrl-f · Ctrl-b | Un écran plus bas · plus haut |
| Ctrl-d · Ctrl-u | Un demi-écran plus bas · plus haut |
🔲 Passer en mode insertion
Quelle que soit la touche utilisée pour y entrer, appuyez sur Esc une fois la saisie terminée. cw, cc, C et s suppriment puis passent aussitôt en mode insertion : pour corriger un mot ou une ligne, c'est plus rapide que d'appuyer séparément sur x et i.
| Touche | Description |
|---|---|
| i · a | Commencer la saisie avant (i) · après (a) le curseur |
| I · A | Commencer la saisie en début (I) · en fin (A) de ligne |
| o · O | Créer une ligne vide en dessous (o) · au-dessus (O) et commencer la saisie |
| cw | Effacer du curseur à la fin du mot et commencer la saisie |
| cc | Effacer toute la ligne et commencer la saisie |
| C | Effacer du curseur à la fin de la ligne et commencer la saisie |
| s | Effacer un caractère et commencer la saisie |
| Esc | Terminer la saisie et revenir au mode normal |
🔲 Supprimer et modifier
Ajoutez une touche de déplacement après d pour supprimer la zone correspondante. dw supprime un mot, dd une ligne, dG tout jusqu'à la fin du fichier, et un nombre placé devant répète l'action autant de fois.
| Touche | Description |
|---|---|
| x · X | Supprimer le caractère sous le curseur (x) · avant le curseur (X). 3x en supprime trois |
| dw | Supprimer du curseur à la fin du mot |
| dd | Supprimer la ligne. 3dd en supprime trois |
| D= d$ | Supprimer du curseur à la fin de la ligne |
| d0 | Supprimer du début de la ligne jusqu'au curseur |
| dG | Supprimer de la ligne actuelle jusqu'à la fin du fichier |
| :6d · :6,10d | Supprimer la ligne 6 · les lignes 6 à 10 |
| J | Joindre la ligne suivante à la fin de la ligne actuelle |
| r | Remplacer le caractère sous le curseur par le prochain caractère tapé |
| ~ | Inverser la casse |
| >> · << | Indenter · désindenter la ligne |
🔲 Copier, coller et annuler
Ce qui a été supprimé se colle avec p comme une copie : enchaîner dd puis p fait descendre une ligne. u remonte plusieurs étapes en arrière, et Ctrl-r rétablit ce qui a été annulé.
| Touche | Description |
|---|---|
| yy | Copier la ligne. 3yy en copie trois |
| yw | Copier du curseur à la fin du mot |
| p · P | Coller en dessous (p) · au-dessus (P). Pour une copie de caractères : après · avant le curseur |
| :1 co 7comme :1 t 7 | Copier la ligne 1 sous la ligne 7 |
| :1,7 co 8 | Copier les lignes 1 à 7 sous la ligne 8 |
| :1 m 8 | Déplacer la ligne 1 sous la ligne 8 |
| u | Annuler. Appuyer plusieurs fois remonte encore |
| Ctrl-r | Rétablir ce qui a été annulé |
| . | Répéter la dernière modification |
🔲 Rechercher et remplacer
Le remplacement se fait en mode ligne de commande. Sans plage, il ne vise que la ligne actuelle ; avec [%], tout le fichier ; et sans g à la fin, seule la première occurrence de chaque ligne change.
| Touche | Description |
|---|---|
| /chaîne | Rechercher vers le bas à partir du curseur. Arrivée à la fin, la recherche reprend au début [search hit BOTTOM, continuing at TOP] |
| ?chaîne | Rechercher vers le haut à partir du curseur |
| n · N | Résultat suivant dans le même sens (n) · dans le sens inverse (N) |
| * | Rechercher vers le bas le mot sous le curseur |
| :s/old/new/ | Remplacer le premier old de la ligne actuelle par new |
| :s/old/new/g | Remplacer tous les old de la ligne actuelle par new |
| :%s/old/new/g | Remplacer tous les old du fichier par new |
| :10,20s/old/new/g | Remplacer tous les old des lignes 10 à 20 par new |
| :%s/old/new/gc | Remplacer en confirmant chaque occurrence (y remplacer · n passer · a tout · q arrêter) |
🔲 Enregistrer, quitter et numéros de ligne
| Touche | Description |
|---|---|
| :w | Enregistrer. Ensuite s'affiche [36L, 1094B written] |
| :w fichier | Enregistrer sous un autre nom. Le fichier d'origine reste inchangé |
| :wq= :x = ZZ | Enregistrer et quitter |
| :q | Quitter. En cas de modifications non enregistrées : [E37: No write since last change] |
| :q! | Quitter sans enregistrer |
| :set nu · :set nonu | Afficher · masquer les numéros de ligne |
✅ Commenter une colonne d'un coup avec le mode visuel bloc de Vim
Pour insérer le même texte au début de plusieurs lignes, utilisez le mode visuel bloc au lieu d'appuyer sur i à chaque ligne. En mode normal, v sélectionne par caractères, Shift-v par lignes et Ctrl-v par colonnes.
Voici comment commenter d'un coup tout un bloc d'un fichier de configuration : placez le curseur sur le premier caractère de la première ligne, appuyez sur Ctrl-v, descendez avec j pour sélectionner les lignes, puis appuyez sur I, tapez # et appuyez sur Esc.



Pour retirer les commentaires, c'est pareil : sur le # de la première ligne, sélectionnez vers le bas avec Ctrl-v, puis appuyez sur x : la colonne sélectionnée est effacée d'un coup. Vous pouvez le faire tel quel avec vhost.conf dans le simulateur ci-dessus.
ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.