Vous êtes connecté en SSH sur un serveur, vous devez corriger un fichier de configuration, et le seul éditeur disponible est vi. Ce guide vous apprend à ouvrir un fichier, le modifier et le sauvegarder avec vi, pas à pas. Vous repartirez avec les réflexes essentiels pour éditer n’importe quel fichier texte sur un système Linux minimal.
Ce que vous apprendrez :
- Comment ouvrir, modifier et quitter vi (la base absolue)
- Le système de modes qui rend vi unique
- Comment naviguer rapidement dans un fichier
- Comment chercher et remplacer du texte
Qu’est-ce que vi ?
Section intitulée « Qu’est-ce que vi ? »vi (prononcé « vi-aille », comme les initiales de visual) est un éditeur de texte en ligne de commande créé en 1976 par Bill Joy. Il est installé par défaut sur tous les systèmes Unix et Linux, y compris les conteneurs Docker les plus minimalistes et les serveurs d’urgence.
Pensez à vi comme un couteau suisse basique : il n’a pas toutes les options d’un couteau multifonction haut de gamme (c’est le rôle de vim), mais il est toujours dans votre poche quand vous en avez besoin.
| Caractéristique | vi | Éditeur graphique (VS Code, etc.) |
|---|---|---|
| Disponibilité | Partout, même sans bureau graphique | Nécessite un environnement graphique |
| Poids | Quelques Ko | Plusieurs centaines de Mo |
| Courbe d’apprentissage | Forte au début, puis rapide | Intuitive dès le départ |
| Usage typique | Dépannage serveur, édition rapide | Développement au quotidien |
Prérequis
Section intitulée « Prérequis »- Un terminal Linux (physique, VM ou WSL)
- Aucune connaissance préalable de vi
Pour vérifier que vi est disponible sur votre système :
which viRésultat attendu : /usr/bin/vi (ou un chemin similaire).
Premier contact : ouvrir, écrire, sauvegarder
Section intitulée « Premier contact : ouvrir, écrire, sauvegarder »Avant d’apprendre toutes les commandes, commençons par la seule chose qui compte quand on découvre vi : le cycle complet « ouvrir un fichier, taper du texte, sauvegarder et quitter ».
C’est la frustration numéro 1 des débutants : « Comment je sors de vi ? ». Réglons ce problème tout de suite.
-
Ouvrir vi sur un fichier de test
Créez un fichier temporaire pour vous entraîner sans risque :
Fenêtre de terminal vi /tmp/test-vi.txtVi s’ouvre. L’écran affiche des tildes (
~) sur les lignes vides. Vous êtes en mode commande : les touches du clavier n’écrivent pas de texte, elles déclenchent des actions. -
Passer en mode insertion pour écrire
Appuyez sur la touche
i(comme insert). En bas de l’écran, vous voyez-- INSERT --apparaître. Vous êtes maintenant en mode insertion : vous pouvez taper du texte normalement.Tapez quelques lignes :
Ceci est mon premier fichier édité avec vi.Ligne numéro deux.Et une troisième ligne pour s'entraîner. -
Revenir en mode commande
Appuyez sur la touche
Esc. Le message-- INSERT --disparaît. Vous êtes de retour en mode commande. -
Sauvegarder et quitter
Tapez
:wqpuis appuyez surEntrée.:ouvre le mode Ex (la ligne de commande en bas de l’écran)wsignifie write (écrire/sauvegarder)qsignifie quit (quitter)
-
Vérifier que le fichier a bien été sauvegardé
De retour dans le terminal, affichez le contenu du fichier :
Fenêtre de terminal cat /tmp/test-vi.txtVous devriez voir vos trois lignes de texte.
Voici une démonstration animée de ce cycle complet :

Quitter vi dans toutes les situations
Section intitulée « Quitter vi dans toutes les situations »C’est le problème le plus fréquent pour les débutants. Voici un tableau de référence rapide :
| Situation | Commande | Ce que ça fait |
|---|---|---|
| Sauvegarder et quitter | :wq puis Entrée | Écrit le fichier et ferme vi |
| Quitter sans sauvegarder | :q! puis Entrée | Abandonne les modifications |
| Juste sauvegarder | :w puis Entrée | Écrit le fichier, reste dans vi |
| Juste quitter (rien à sauvegarder) | :q puis Entrée | Ferme vi (échoue si modifications non sauvegardées) |
| Raccourci sauvegarde + quit | ZZ (majuscules, sans :) | Équivalent de :wq |
| Sauvegarder sous un autre nom | :w nouveau_nom | Crée une copie du fichier |
| Quitter tous les fichiers ouverts | :qa! | Ferme tout sans sauvegarder |
Comprendre les modes de vi
Section intitulée « Comprendre les modes de vi »Contrairement à nano ou à un éditeur graphique, vi ne fonctionne pas en mode « taper du texte » par défaut. C’est ce qui déroute les débutants.
Imaginez une radio à deux positions :
- Position « écouter » (mode commande) : les boutons servent à changer de station, monter le volume, chercher une fréquence. Rien ne sort du micro.
- Position « parler » (mode insertion) : tout ce que vous dites est transmis. Les boutons ne font plus rien.
Vi fonctionne exactement comme ça. Les mêmes touches font des choses complètement différentes selon le mode actif.
Les trois modes
Section intitulée « Les trois modes »| Mode | Comment y entrer | Ce qu’il fait | Comment le quitter |
|---|---|---|---|
| Commande | Esc (ou à l’ouverture) | Naviguer, supprimer, copier, coller | Tapez i, a, o ou : |
| Insertion | i, a, o, O | Écrire du texte | Appuyez sur Esc |
| Ex | : (depuis le mode commande) | Commandes longues (:w, :q, :%s/…) | Entrée pour exécuter, Esc pour annuler |
Le mode commande est le mode central. On y revient toujours entre deux actions. C’est le « carrefour » de vi.
Savoir dans quel mode on se trouve
Section intitulée « Savoir dans quel mode on se trouve »Un réflexe simple : regardez en bas à gauche de l’écran.
| Ce que vous voyez | Mode actif |
|---|---|
-- INSERT -- | Mode insertion |
-- REPLACE -- | Mode remplacement |
| Rien de spécial | Mode commande |
: suivi de texte | Mode Ex |
Les différentes façons d’entrer en insertion
Section intitulée « Les différentes façons d’entrer en insertion »Vous connaissez i pour passer en mode insertion, mais vi offre plusieurs
portes d’entrée selon où vous voulez commencer à écrire. Chacune vous fait
gagner du temps dans une situation précise.
| Touche | Action | Situation typique |
|---|---|---|
i | Insère avant le curseur | Cas général, correction au milieu d’un mot |
a | Insère après le curseur | Ajouter du texte à la suite d’un mot |
I | Insère au début de la ligne | Ajouter un commentaire # devant une ligne |
A | Insère à la fin de la ligne | Compléter une ligne existante |
o | Ouvre une nouvelle ligne en dessous | Ajouter une directive dans un fichier de config |
O | Ouvre une nouvelle ligne au-dessus | Insérer une ligne au-dessus de la ligne courante |
Exemple concret : vous éditez /etc/hosts et le curseur se trouve sur la
ligne 127.0.0.1 localhost. Voici ce que fait chaque touche :
i→ le curseur clignote avant le1de127: vous écrivez avanta→ le curseur se place après le1de127: vous écrivez aprèsA→ le curseur saute à la fin delocalhost: vous pouvez ajouter un aliaso→ une ligne vide apparaît en dessous : vous pouvez ajouter une entrée
Naviguer dans un fichier
Section intitulée « Naviguer dans un fichier »Avec vi, pas de souris. Tout se pilote au clavier. Au début, c’est déroutant. Mais une fois les commandes en mémoire musculaire, c’est bien plus rapide qu’un clic.
Déplacements caractère par caractère
Section intitulée « Déplacements caractère par caractère »Les quatre touches de base sont positionnées sous votre main droite :
↑ k← h l → j ↓| Touche | Direction | Astuce pour retenir |
|---|---|---|
h | Gauche ← | La touche la plus à gauche du groupe |
j | Bas ↓ | Le j « descend » sous la ligne de base |
k | Haut ↑ | Le k « monte » (pensez à kick vers le haut) |
l | Droite → | La touche la plus à droite du groupe |
Naviguer par mots
Section intitulée « Naviguer par mots »Pour aller plus vite que caractère par caractère, vi permet de sauter de mot en mot :
| Touche | Action | Exemple sur server_name localhost; |
|---|---|---|
w | Mot suivant (début) | Saute de server_name à localhost |
e | Fin du mot courant | Saute au e de server_name |
b | Mot précédent (début) | Revient de localhost à server_name |
Ajouter une majuscule (W, E, B) fait sauter entre les mots séparés
par des espaces uniquement, ce qui est utile dans les scripts.
Naviguer dans une ligne
Section intitulée « Naviguer dans une ligne »| Touche | Action |
|---|---|
0 (zéro) | Début de la ligne |
^ | Premier caractère non vide (utile pour les fichiers indentés) |
$ | Fin de la ligne |
Sauter à une ligne précise
Section intitulée « Sauter à une ligne précise »Quand un message d’erreur vous dit « erreur ligne 42 », vous voulez y aller directement :
| Commande | Action |
|---|---|
:42 | Aller à la ligne 42 |
gg | Aller à la première ligne du fichier |
G | Aller à la dernière ligne du fichier |
Naviguer dans l’écran
Section intitulée « Naviguer dans l’écran »| Touche | Action |
|---|---|
H | Haut de l’écran visible (High) |
M | Milieu de l’écran (Middle) |
L | Bas de l’écran (Low) |
Ctrl+f | Page suivante (forward) |
Ctrl+b | Page précédente (backward) |
Placer des marques (signets)
Section intitulée « Placer des marques (signets) »Quand vous travaillez sur un long fichier, vous pouvez poser des repères pour revenir rapidement à un endroit :
ma: pose une marque nomméeaà la position du curseur'a: revient à la ligne marquéea
C’est comme poser un marque-page dans un livre. Les marques vont de a
à z, soit 26 repères possibles.
Supprimer du texte
Section intitulée « Supprimer du texte »En mode commande, vi propose des commandes de suppression qui évitent de sélectionner laborieusement du texte avec la souris. Chaque commande suit une logique simple : d + portée (d pour delete).
Suppressions courantes
Section intitulée « Suppressions courantes »| Commande | Ce que ça supprime | Quand l’utiliser |
|---|---|---|
x | Le caractère sous le curseur | Corriger une faute de frappe |
X | Le caractère avant le curseur | Supprimer en arrière (comme Retour arrière) |
dw | Du curseur jusqu’au mot suivant | Supprimer un mot |
dd | La ligne entière | Supprimer une ligne de configuration |
d$ | Du curseur à la fin de la ligne | Supprimer la fin d’une ligne |
d0 | Du curseur au début de la ligne | Supprimer le début d’une ligne |
Supprimer plusieurs lignes
Section intitulée « Supprimer plusieurs lignes »Vous pouvez combiner un nombre avec dd :
3ddSupprime 3 lignes à partir de la ligne courante. Très pratique pour supprimer un bloc de configuration.
Exemple concret : vous éditez un fichier nginx.conf et vous voulez
supprimer un bloc location de 5 lignes. Placez le curseur sur la première
ligne du bloc, puis tapez 5dd.
Modifier du texte
Section intitulée « Modifier du texte »Au-delà de la suppression, vi propose des commandes pour remplacer et modifier du texte sans quitter le mode commande.
Remplacer un caractère
Section intitulée « Remplacer un caractère »rsuivi d’un caractère : remplace le caractère sous le curseur sans passer en mode insertion.
Exemple : le curseur est sur le a de Poat 22. Tapez r puis r →
résultat : Port 22. Rapide, précis, sans changer de mode.
Remplacer plusieurs caractères
Section intitulée « Remplacer plusieurs caractères »R: active le mode remplacement. Chaque caractère que vous tapez écrase celui qui se trouve sous le curseur. Appuyez surEscpour revenir en mode commande.
Changer un mot ou une ligne
Section intitulée « Changer un mot ou une ligne »La commande c (change) combine suppression et insertion en une seule action :
| Commande | Action |
|---|---|
cw | Supprime le mot et passe en insertion |
cc | Supprime la ligne et passe en insertion |
c$ | Supprime jusqu’à la fin de la ligne et passe en insertion |
Exemple concret : dans un fichier sshd_config, le curseur est sur le mot
yes de la ligne PermitRootLogin yes. Tapez cw, puis tapez no, puis
Esc. Résultat : PermitRootLogin no.
Annuler et répéter
Section intitulée « Annuler et répéter »| Commande | Action |
|---|---|
u | Annule la dernière action (comme Ctrl+Z) |
U | Annule toutes les modifications sur la ligne courante |
. | Répète la dernière commande |
Copier, couper et coller
Section intitulée « Copier, couper et coller »Dans vi, ces opérations portent des noms différents issus du jargon Unix :
| Opération habituelle | Nom dans vi | Commande |
|---|---|---|
| Copier | Yank (tirer) | y |
| Couper | Delete (supprimer) | d |
| Coller | Put (poser) | p |
Copier (yank)
Section intitulée « Copier (yank) »| Commande | Ce que ça copie |
|---|---|
yy | La ligne entière |
yw | Un mot |
y$ | Du curseur à la fin de la ligne |
3yy | 3 lignes à partir du curseur |
Couper (delete)
Section intitulée « Couper (delete) »Comme vu dans la section suppression, toute commande d coupe le texte
(il reste en mémoire pour être collé) :
| Commande | Ce que ça coupe |
|---|---|
dd | La ligne entière |
dw | Un mot |
d3w | Trois mots |
Coller (put)
Section intitulée « Coller (put) »| Commande | Action |
|---|---|
p | Colle après le curseur (ou sous la ligne si on a copié une ligne entière) |
P | Colle avant le curseur (ou au-dessus de la ligne) |
Exemple pratique : déplacer une ligne
Section intitulée « Exemple pratique : déplacer une ligne »Imaginons que vous éditez un fichier nginx.conf et qu’une directive est mal
placée. Pour déplacer la ligne 5 vers l’emplacement de la ligne 10 :
-
Aller à la ligne 5 : tapez
:5puisEntrée -
Couper la ligne : tapez
dd -
Aller à la destination : tapez
:9(la ligne 9 est devenue l’ancienne ligne 10 après la coupe) -
Coller en dessous : tapez
p
Les registres nommés
Section intitulée « Les registres nommés »Par défaut, chaque copie ou coupe remplace ce qui était en mémoire. Si vous
avez besoin de stocker plusieurs morceaux de texte, utilisez les
registres nommés (de a à z) :
"ayy → copie la ligne dans le registre a"byy → copie la ligne dans le registre b"ap → colle le contenu du registre a"bp → colle le contenu du registre bPensez aux registres comme des presse-papiers numérotés : vous avez 26 emplacements différents pour stocker du texte.
Rechercher et remplacer
Section intitulée « Rechercher et remplacer »Quand vous travaillez sur un fichier de configuration de 200 lignes, chercher un paramètre à l’oeil est inefficace. Vi dispose de commandes de recherche puissantes et d’un système de remplacement comparable au « chercher et remplacer » des éditeurs graphiques.
Rechercher un mot
Section intitulée « Rechercher un mot »Depuis le mode commande :
/motifpuisEntrée: cherche vers le bas du fichier?motifpuisEntrée: cherche vers le haut
Exemple : pour trouver toutes les occurrences de Port dans sshd_config :
/PortVi saute à la première occurrence trouvée.
Naviguer entre les résultats
Section intitulée « Naviguer entre les résultats »n: occurrence suivante (dans la même direction)N: occurrence précédente (direction opposée)
Recherche avec motifs simples
Section intitulée « Recherche avec motifs simples »Vi supporte des expressions régulières basiques :
| Motif | Signification | Exemple |
|---|---|---|
. | N’importe quel caractère | /s.rv trouve serv et surv |
* | Zéro ou plusieurs du caractère précédent | /ab*c trouve ac, abc, abbc |
^ | Début de ligne | /^# trouve les lignes commentées |
$ | Fin de ligne | /;$ trouve les lignes terminées par ; |
Remplacer du texte
Section intitulée « Remplacer du texte »La substitution utilise la commande :s en mode Ex :
Remplacer la première occurrence sur la ligne :
:s/ancien/nouveau/Remplacer toutes les occurrences sur la ligne :
:s/ancien/nouveau/gRemplacer toutes les occurrences dans le fichier :
:%s/ancien/nouveau/gLe % signifie « toutes les lignes du fichier ».
Demander confirmation à chaque remplacement :
:%s/ancien/nouveau/gcVi affichera chaque occurrence et vous demandera y (oui), n (non)
ou a (tous les restants).
Exemple concret : dans un fichier Apache, vous voulez remplacer le port
8080 par 443 partout :
:%s/8080/443/gPersonnalisation minimale
Section intitulée « Personnalisation minimale »Vi est minimaliste, mais quelques réglages le rendent plus confortable. Ces
options s’activent en mode Ex (:) et restent actives le temps de la
session.
Options utiles
Section intitulée « Options utiles »| Commande | Ce que ça fait |
|---|---|
:set number | Affiche les numéros de ligne |
:set nonumber | Masque les numéros de ligne |
:set ignorecase | Recherche insensible à la casse |
:set noignorecase | Recherche sensible à la casse |
:set autoindent | Conserve l’indentation lors d’un retour à la ligne |
:set tabstop=4 | Définit la largeur des tabulations à 4 espaces |
:set showmode | Affiche le mode actif en bas (INSERT, REPLACE) |
Pour activer plusieurs options en une seule commande :
:set number autoindent tabstop=4Pour voir toutes les options actives, tapez :set sans argument.
Dépannage : les erreurs de débutant
Section intitulée « Dépannage : les erreurs de débutant »Voici les situations les plus fréquentes et comment s’en sortir :
| Problème | Cause | Solution |
|---|---|---|
| Je tape du texte mais rien ne s’affiche | Vous êtes en mode commande | Appuyez sur i pour passer en insertion |
| Des commandes s’exécutent quand je tape | Vous êtes en mode commande alors que vous voulez écrire | Appuyez sur i, a ou o |
| Je n’arrive pas à quitter vi | Vous avez des modifications non sauvegardées | Tapez :wq (sauvegarder et quitter) ou :q! (quitter sans sauvegarder) |
Vi affiche E212: Can't open file for writing | Vous n’avez pas les droits d’écriture | Ouvrez le fichier avec sudo vi fichier |
| Le texte que je tape remplace des caractères | Vous êtes en mode remplacement (R) | Appuyez sur Esc pour revenir en mode commande |
:wq affiche E45: 'readonly' option is set | Le fichier est en lecture seule | Utilisez :w! pour forcer l’écriture (si vous êtes root) |
| J’ai fait une mauvaise manipulation | Vous avez modifié le fichier par erreur | Tapez u pour annuler, ou :q! pour tout abandonner |
Limitations de vi et versions améliorées
Section intitulée « Limitations de vi et versions améliorées »Vi est fiable et universel, mais il a des limites héritées de sa conception en 1976 :
| Ce que vi ne fait pas | Alternative dans vim |
|---|---|
| Pas de coloration syntaxique | :syntax on |
| Annulation limitée à 1 niveau | Annulation illimitée avec u |
| Pas de complétion de texte | Ctrl+n / Ctrl+p |
| Pas de plugins | Des milliers de plugins disponibles |
| Pas de fichier de configuration | .vimrc pour personnaliser de manière permanente |
| Pas d’édition multi-fichier intuitive | Onglets, splits, buffers |
Comment savoir si vous utilisez vi ou vim ?
Section intitulée « Comment savoir si vous utilisez vi ou vim ? »Sur la plupart des distributions Linux modernes, la commande vi lance en
réalité vim (Vi IMproved). Pour vérifier :
vi --version | head -1Si vous voyez VIM - Vi IMproved, vous utilisez déjà vim. Vous pouvez aller directement au guide vim pour découvrir les fonctionnalités avancées.
À retenir
Section intitulée « À retenir »- vi est partout : c’est le seul éditeur garanti sur tout système Unix/Linux, y compris les conteneurs minimaux et les modes rescue.
- Le cycle de base :
i(insertion) → texte →Esc(mode commande) →:wq(sauvegarder et quitter). Escest votre bouée de sauvetage : quand vous êtes perdu,Escvous ramène toujours en mode commande.- Les commandes suivent une logique :
d+ portée pour supprimer,y+ portée pour copier,c+ portée pour changer. - Chercher est rapide :
/motifpour chercher,npour l’occurrence suivante. - vi n’est qu’un début : une fois les bases acquises, passez à vim pour la coloration syntaxique, les plugins et la personnalisation permanente.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
Prochaines étapes
Section intitulée « Prochaines étapes »FAQ - Questions Fréquemment Posées
Section intitulée « FAQ - Questions Fréquemment Posées »Définition
vi (abréviation de visual) est un éditeur de texte en ligne de commande créé en 1976 par Bill Joy. Il est installé par défaut sur tous les systèmes Unix et Linux.Pourquoi l'apprendre ?
vi est le seul éditeur garanti présent partout :- Serveur en mode rescue (pas d'autre éditeur installé)
- Conteneur Docker minimal (Alpine, BusyBox)
- Connexion SSH sur un équipement réseau ou système embarqué
- Dépannage en urgence sur un système sans interface graphique
Comparaison avec d'autres éditeurs
| Caractéristique | vi | nano | VS Code |
|---|---|---|---|
| Disponibilité | Partout | Souvent installé | Bureau graphique uniquement |
| Poids | Quelques Ko | Léger | Plusieurs centaines de Mo |
| Courbe d'apprentissage | Forte au début | Facile | Intuitive |
| Fonctionnalités | Basiques | Basiques | Très riches |
| Usage principal | Dépannage serveur | Édition simple | Développement |
Le cycle de base
Le cycle fondamental avec vi se résume en 4 étapes :- Ouvrir :
vi nom_fichier - Écrire : appuyer sur
ipour passer en mode insertion, taper le texte - Revenir en mode commande : appuyer sur
Esc - Sauvegarder et quitter : taper
:wqpuisEntrée
Commandes de sortie
| Commande | Action |
|---|---|
:wq |
Sauvegarder et quitter |
:q! |
Quitter sans sauvegarder |
:w |
Sauvegarder sans quitter |
:q |
Quitter (échoue si modifications non sauvegardées) |
ZZ |
Raccourci pour sauvegarder et quitter (sans :) |
:w nouveau_nom |
Sauvegarder sous un autre nom |
Exemple concret
vi /tmp/test.txt # Ouvrir le fichier
# Appuyer sur i
# Taper du texte
# Appuyer sur Esc
:wq # Sauvegarder et quitter
cat /tmp/test.txt # Vérifier le contenu
Les trois modes
| Mode | Comment y entrer | Rôle | Comment le quitter |
|---|---|---|---|
| Commande | Esc (ou à l'ouverture) |
Naviguer, supprimer, copier, coller | Taper i, a, o ou : |
| Insertion | i, a, o, O |
Écrire du texte | Appuyer sur Esc |
| Ex | : depuis le mode commande |
Commandes longues (:w, :q, :%s/…) |
Entrée ou Esc |
Comment reconnaître le mode actif
| Indicateur en bas d'écran | Mode |
|---|---|
-- INSERT -- |
Mode insertion |
-- REPLACE -- |
Mode remplacement |
: suivi de texte |
Mode Ex |
| Rien de spécial | Mode commande |
Analogie
Pensez à une radio avec deux positions : en position écouter (mode commande), les boutons servent à changer de station. En position parler (mode insertion), tout ce que vous dites est transmis. La toucheEsc est le bouton qui bascule toujours sur la position écouter.Les six portes d'entrée en insertion
| Touche | Insère où | Situation typique |
|---|---|---|
i |
Avant le curseur | Correction au milieu d'un mot |
a |
Après le curseur | Ajouter du texte à la suite |
I |
Au début de la ligne | Ajouter un # devant une ligne |
A |
À la fin de la ligne | Compléter une ligne existante |
o |
Nouvelle ligne en dessous | Ajouter une directive dans un fichier de config |
O |
Nouvelle ligne au-dessus | Insérer une ligne au-dessus |
Exemple concret
Sur la ligne127.0.0.1 localhost dans /etc/hosts :i→ curseur avant le1de127: écrire avanta→ curseur après le1: écrire aprèsA→ curseur à la fin delocalhost: ajouter un aliaso→ nouvelle ligne en dessous : ajouter une entrée
Esc pour revenir en mode commande.Déplacements caractère par caractère
| Touche | Direction | Astuce |
|---|---|---|
h |
Gauche ← | Touche la plus à gauche du groupe |
j |
Bas ↓ | Le j descend sous la ligne |
k |
Haut ↑ | Le k monte (kick vers le haut) |
l |
Droite → | Touche la plus à droite |
Navigation par mots
| Touche | Action |
|---|---|
w |
Mot suivant (début) |
e |
Fin du mot courant |
b |
Mot précédent (début) |
W, E, B sautent entre mots séparés par des espaces.Navigation dans la ligne et le fichier
| Commande | Action |
|---|---|
0 |
Début de la ligne |
$ |
Fin de la ligne |
gg |
Première ligne du fichier |
G |
Dernière ligne du fichier |
:42 |
Aller à la ligne 42 |
H |
Haut de l'écran visible |
M |
Milieu de l'écran |
L |
Bas de l'écran |
Ctrl+f |
Page suivante |
Ctrl+b |
Page précédente |
Marques (signets)
ma: pose un repère nomméa'a: revient à la ligne marquéea
a à z, soit 26 repères possibles.Commandes de suppression
Toutes les commandes de suppression s'utilisent en mode commande et suivent la logiqued + portée :| Commande | Ce que ça supprime | Quand l'utiliser |
|---|---|---|
x |
Caractère sous le curseur | Corriger une faute de frappe |
X |
Caractère avant le curseur | Supprimer en arrière |
dw |
Du curseur au mot suivant | Supprimer un mot |
dd |
La ligne entière | Supprimer une ligne de config |
d$ |
Du curseur à la fin de la ligne | Supprimer la fin d'une ligne |
d0 |
Du curseur au début de la ligne | Supprimer le début d'une ligne |
Supprimer plusieurs lignes
3dd → supprime 3 lignes
5dd → supprime 5 lignes
Suppression = coupe
Tout texte supprimé avecd ou x est stocké en mémoire. Vous pouvez le coller ensuite avec p (après le curseur) ou P (avant le curseur). La suppression fonctionne donc comme un couper-coller.Remplacement rapide
| Commande | Action |
|---|---|
r + caractère |
Remplace le caractère sous le curseur sans changer de mode |
R |
Active le mode remplacement (chaque frappe écrase le caractère suivant) |
Commande change (supprime + insère)
| Commande | Action |
|---|---|
cw |
Supprime le mot et passe en insertion |
cc |
Supprime la ligne et passe en insertion |
c$ |
Supprime jusqu'à la fin de la ligne et passe en insertion |
Exemple concret
Danssshd_config, le curseur est sur yes dans PermitRootLogin yes. Tapez cw, puis no, puis Esc. Résultat : PermitRootLogin no.Annuler et répéter
| Commande | Action |
|---|---|
u |
Annule la dernière action (toggle dans vi original) |
U |
Annule toutes les modifications sur la ligne courante |
. |
Répète la dernière commande |
u fonctionne en bascule : un premier u annule, un second rétablit. Dans vim, l'annulation est illimitée.Correspondance avec les termes habituels
| Opération | Nom dans vi | Commande |
|---|---|---|
| Copier | Yank | y |
| Couper | Delete | d |
| Coller | Put | p |
Copier (yank)
| Commande | Ce que ça copie |
|---|---|
yy |
La ligne entière |
yw |
Un mot |
y$ |
Du curseur à la fin de la ligne |
3yy |
3 lignes à partir du curseur |
Coller (put)
| Commande | Action |
|---|---|
p |
Colle après le curseur ou sous la ligne |
P |
Colle avant le curseur ou au-dessus |
Déplacer une ligne
Pour déplacer la ligne 5 à l'emplacement de la ligne 10 ::5→ aller à la ligne 5dd→ couper la ligne:9→ aller à la ligne 9 (devenue l'ancienne 10 après la coupe)p→ coller en dessous
Registres nommés
Pour stocker plusieurs textes en parallèle, utilisez les registresa à z :"ayy → copie la ligne dans le registre a
"byy → copie la ligne dans le registre b
"ap → colle le contenu du registre a
"bp → colle le contenu du registre b
Recherche simple
| Commande | Action |
|---|---|
/motif |
Recherche vers le bas du fichier |
?motif |
Recherche vers le haut |
n |
Occurrence suivante (même direction) |
N |
Occurrence précédente (direction opposée) |
Exemple
/Port → cherche le mot Port vers le bas
n → occurrence suivante
N → occurrence précédente
Expressions régulières basiques
| Motif | Signification | Exemple |
|---|---|---|
. |
N'importe quel caractère | /s.rv trouve serv et surv |
* |
Zéro ou plusieurs du caractère précédent | /ab*c trouve ac, abc, abbc |
^ |
Début de ligne | /^# trouve les lignes commentées |
$ |
Fin de ligne | /;$ trouve les lignes terminées par ; |
Syntaxe de substitution
| Commande | Portée |
|---|---|
:s/ancien/nouveau/ |
Première occurrence sur la ligne courante |
:s/ancien/nouveau/g |
Toutes les occurrences sur la ligne courante |
:%s/ancien/nouveau/g |
Toutes les occurrences dans tout le fichier |
:%s/ancien/nouveau/gc |
Tout le fichier avec confirmation à chaque remplacement |
Le % signifie toutes les lignes du fichier.
Exemple concret
Remplacer le port 8080 par 443 dans un fichier Apache ::%s/8080/443/g
Confirmation interactive
Avec le flagc, vi affiche chaque occurrence et demande :y: oui, remplacern: non, passera: remplacer tous les restants
:%s/8080/443/gc
Problèmes fréquents
| Problème | Cause | Solution |
|---|---|---|
| Je tape du texte mais rien ne s'affiche | Vous êtes en mode commande | Appuyez sur i |
| Des commandes s'exécutent quand je tape | Vous voulez écrire mais êtes en mode commande | Appuyez sur i, a ou o |
| Je n'arrive pas à quitter | Modifications non sauvegardées | :wq ou :q! |
E212: Can't open file for writing |
Pas de droits d'écriture | Utilisez sudo vi fichier |
| Le texte remplace des caractères | Mode remplacement actif (R) |
Appuyez sur Esc |
E45: 'readonly' option is set |
Fichier en lecture seule | :w! si vous êtes root |
| Mauvaise manipulation | Modification par erreur | u pour annuler ou :q! pour abandonner |
La règle d'or
Quand vous êtes perdu dans vi, appuyez surEsc deux ou trois fois. Cela vous ramène toujours en mode commande. Ensuite, tapez :q! pour quitter sans sauvegarder.Comparaison
| Fonctionnalité | vi | vim |
|---|---|---|
| Coloration syntaxique | Non | Oui (:syntax on) |
| Annulation | 1 niveau (toggle) | Illimitée |
| Complétion de texte | Non | Ctrl+n / Ctrl+p |
| Plugins | Non | Des milliers disponibles |
| Configuration persistante | Non | Fichier .vimrc |
| Édition multi-fichier | Basique | Onglets, splits, buffers |
| Disponibilité | Partout | Presque partout |
Vérifier ce que vous utilisez
Sur la plupart des distributions modernes,vi lance en réalité vim :vi --version | head -1
Si vous voyez VIM - Vi IMproved, vous utilisez déjà vim.Quand passer de vi à vim
- vi suffit pour les éditions rapides en dépannage et les corrections ponctuelles
- vim est préférable pour le développement, l'édition de multiples fichiers et les sessions d'édition longues
Options utiles
| Commande | Effet |
|---|---|
:set number |
Affiche les numéros de ligne |
:set nonumber |
Masque les numéros de ligne |
:set ignorecase |
Recherche insensible à la casse |
:set noignorecase |
Recherche sensible à la casse |
:set autoindent |
Indentation automatique |
:set tabstop=4 |
Largeur des tabulations à 4 espaces |
:set showmode |
Affiche le mode actif en bas |
Activer plusieurs options
:set number autoindent tabstop=4
Voir les options actives
Tapez:set sans argument.Limitation importante
Vi n'a pas de fichier de configuration. Tous les réglages sont perdus à la fermeture. Pour des options permanentes, il faut passer à vim et créer un fichier.vimrc.