Aller au contenu
Administration Linux medium

Apprendre vi : les bases pour éditer un fichier Linux

23 min de lecture

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

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éristiqueviÉditeur graphique (VS Code, etc.)
DisponibilitéPartout, même sans bureau graphiqueNécessite un environnement graphique
PoidsQuelques KoPlusieurs centaines de Mo
Courbe d’apprentissageForte au début, puis rapideIntuitive dès le départ
Usage typiqueDépannage serveur, édition rapideDéveloppement au quotidien
  • Un terminal Linux (physique, VM ou WSL)
  • Aucune connaissance préalable de vi

Pour vérifier que vi est disponible sur votre système :

Fenêtre de terminal
which vi

Résultat attendu : /usr/bin/vi (ou un chemin similaire).

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.

  1. 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.txt

    Vi 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.

  2. 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.
  3. Revenir en mode commande

    Appuyez sur la touche Esc. Le message -- INSERT -- disparaît. Vous êtes de retour en mode commande.

  4. Sauvegarder et quitter

    Tapez :wq puis appuyez sur Entrée.

    • : ouvre le mode Ex (la ligne de commande en bas de l’écran)
    • w signifie write (écrire/sauvegarder)
    • q signifie quit (quitter)
  5. 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.txt

    Vous devriez voir vos trois lignes de texte.

Voici une démonstration animée de ce cycle complet :

GIF de démonstration du cycle ouvrir, écrire, sauvegarder avec vi

C’est le problème le plus fréquent pour les débutants. Voici un tableau de référence rapide :

SituationCommandeCe que ça fait
Sauvegarder et quitter:wq puis EntréeÉcrit le fichier et ferme vi
Quitter sans sauvegarder:q! puis EntréeAbandonne les modifications
Juste sauvegarder:w puis EntréeÉcrit le fichier, reste dans vi
Juste quitter (rien à sauvegarder):q puis EntréeFerme vi (échoue si modifications non sauvegardées)
Raccourci sauvegarde + quitZZ (majuscules, sans :)Équivalent de :wq
Sauvegarder sous un autre nom:w nouveau_nomCrée une copie du fichier
Quitter tous les fichiers ouverts:qa!Ferme tout sans sauvegarder

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.

ModeComment y entrerCe qu’il faitComment le quitter
CommandeEsc (ou à l’ouverture)Naviguer, supprimer, copier, collerTapez i, a, o ou :
Insertioni, a, o, OÉcrire du texteAppuyez 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.

Un réflexe simple : regardez en bas à gauche de l’écran.

Ce que vous voyezMode actif
-- INSERT --Mode insertion
-- REPLACE --Mode remplacement
Rien de spécialMode commande
: suivi de texteMode Ex

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.

ToucheActionSituation typique
iInsère avant le curseurCas général, correction au milieu d’un mot
aInsère après le curseurAjouter du texte à la suite d’un mot
IInsère au début de la ligneAjouter un commentaire # devant une ligne
AInsère à la fin de la ligneCompléter une ligne existante
oOuvre une nouvelle ligne en dessousAjouter une directive dans un fichier de config
OOuvre une nouvelle ligne au-dessusInsé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 le 1 de 127 : vous écrivez avant
  • a → le curseur se place après le 1 de 127 : vous écrivez après
  • A → le curseur saute à la fin de localhost : vous pouvez ajouter un alias
  • o → une ligne vide apparaît en dessous : vous pouvez ajouter une entrée

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.

Les quatre touches de base sont positionnées sous votre main droite :

k
← h l →
j
ToucheDirectionAstuce pour retenir
hGauche ←La touche la plus à gauche du groupe
jBas ↓Le j « descend » sous la ligne de base
kHaut ↑Le k « monte » (pensez à kick vers le haut)
lDroite →La touche la plus à droite du groupe

Pour aller plus vite que caractère par caractère, vi permet de sauter de mot en mot :

ToucheActionExemple sur server_name localhost;
wMot suivant (début)Saute de server_name à localhost
eFin du mot courantSaute au e de server_name
bMot 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.

ToucheAction
0 (zéro)Début de la ligne
^Premier caractère non vide (utile pour les fichiers indentés)
$Fin de la ligne

Quand un message d’erreur vous dit « erreur ligne 42 », vous voulez y aller directement :

CommandeAction
:42Aller à la ligne 42
ggAller à la première ligne du fichier
GAller à la dernière ligne du fichier
ToucheAction
HHaut de l’écran visible (High)
MMilieu de l’écran (Middle)
LBas de l’écran (Low)
Ctrl+fPage suivante (forward)
Ctrl+bPage précédente (backward)

Quand vous travaillez sur un long fichier, vous pouvez poser des repères pour revenir rapidement à un endroit :

  • ma : pose une marque nommée a à la position du curseur
  • 'a : revient à la ligne marquée a

C’est comme poser un marque-page dans un livre. Les marques vont de a à z, soit 26 repères possibles.

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).

CommandeCe que ça supprimeQuand l’utiliser
xLe caractère sous le curseurCorriger une faute de frappe
XLe caractère avant le curseurSupprimer en arrière (comme Retour arrière)
dwDu curseur jusqu’au mot suivantSupprimer un mot
ddLa ligne entièreSupprimer une ligne de configuration
d$Du curseur à la fin de la ligneSupprimer la fin d’une ligne
d0Du curseur au début de la ligneSupprimer le début d’une ligne

Vous pouvez combiner un nombre avec dd :

3dd

Supprime 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.

Au-delà de la suppression, vi propose des commandes pour remplacer et modifier du texte sans quitter le mode commande.

  • r suivi 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.

  • R : active le mode remplacement. Chaque caractère que vous tapez écrase celui qui se trouve sous le curseur. Appuyez sur Esc pour revenir en mode commande.

La commande c (change) combine suppression et insertion en une seule action :

CommandeAction
cwSupprime le mot et passe en insertion
ccSupprime 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.

CommandeAction
uAnnule la dernière action (comme Ctrl+Z)
UAnnule toutes les modifications sur la ligne courante
.Répète la dernière commande

Dans vi, ces opérations portent des noms différents issus du jargon Unix :

Opération habituelleNom dans viCommande
CopierYank (tirer)y
CouperDelete (supprimer)d
CollerPut (poser)p
CommandeCe que ça copie
yyLa ligne entière
ywUn mot
y$Du curseur à la fin de la ligne
3yy3 lignes à partir du curseur

Comme vu dans la section suppression, toute commande d coupe le texte (il reste en mémoire pour être collé) :

CommandeCe que ça coupe
ddLa ligne entière
dwUn mot
d3wTrois mots
CommandeAction
pColle après le curseur (ou sous la ligne si on a copié une ligne entière)
PColle avant le curseur (ou au-dessus de la 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 :

  1. Aller à la ligne 5 : tapez :5 puis Entrée

  2. Couper la ligne : tapez dd

  3. Aller à la destination : tapez :9 (la ligne 9 est devenue l’ancienne ligne 10 après la coupe)

  4. Coller en dessous : tapez p

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 b

Pensez aux registres comme des presse-papiers numérotés : vous avez 26 emplacements différents pour stocker du texte.

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.

Depuis le mode commande :

  • /motif puis Entrée : cherche vers le bas du fichier
  • ?motif puis Entrée : cherche vers le haut

Exemple : pour trouver toutes les occurrences de Port dans sshd_config :

/Port

Vi saute à la première occurrence trouvée.

  • n : occurrence suivante (dans la même direction)
  • N : occurrence précédente (direction opposée)

Vi supporte des expressions régulières basiques :

MotifSignificationExemple
.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 ;

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/g

Exemple concret : dans un fichier Apache, vous voulez remplacer le port 8080 par 443 partout :

:%s/8080/443/g

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.

CommandeCe que ça fait
:set numberAffiche les numéros de ligne
:set nonumberMasque les numéros de ligne
:set ignorecaseRecherche insensible à la casse
:set noignorecaseRecherche sensible à la casse
:set autoindentConserve l’indentation lors d’un retour à la ligne
:set tabstop=4Définit la largeur des tabulations à 4 espaces
:set showmodeAffiche le mode actif en bas (INSERT, REPLACE)

Pour activer plusieurs options en une seule commande :

:set number autoindent tabstop=4

Pour voir toutes les options actives, tapez :set sans argument.

Voici les situations les plus fréquentes et comment s’en sortir :

ProblèmeCauseSolution
Je tape du texte mais rien ne s’afficheVous êtes en mode commandeAppuyez sur i pour passer en insertion
Des commandes s’exécutent quand je tapeVous êtes en mode commande alors que vous voulez écrireAppuyez sur i, a ou o
Je n’arrive pas à quitter viVous avez des modifications non sauvegardéesTapez :wq (sauvegarder et quitter) ou :q! (quitter sans sauvegarder)
Vi affiche E212: Can't open file for writingVous n’avez pas les droits d’écritureOuvrez le fichier avec sudo vi fichier
Le texte que je tape remplace des caractèresVous êtes en mode remplacement (R)Appuyez sur Esc pour revenir en mode commande
:wq affiche E45: 'readonly' option is setLe fichier est en lecture seuleUtilisez :w! pour forcer l’écriture (si vous êtes root)
J’ai fait une mauvaise manipulationVous avez modifié le fichier par erreurTapez u pour annuler, ou :q! pour tout abandonner

Vi est fiable et universel, mais il a des limites héritées de sa conception en 1976 :

Ce que vi ne fait pasAlternative dans vim
Pas de coloration syntaxique:syntax on
Annulation limitée à 1 niveauAnnulation illimitée avec u
Pas de complétion de texteCtrl+n / Ctrl+p
Pas de pluginsDes milliers de plugins disponibles
Pas de fichier de configuration.vimrc pour personnaliser de manière permanente
Pas d’édition multi-fichier intuitiveOnglets, splits, buffers

Sur la plupart des distributions Linux modernes, la commande vi lance en réalité vim (Vi IMproved). Pour vérifier :

Fenêtre de terminal
vi --version | head -1

Si 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.

  • 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).
  • Esc est votre bouée de sauvetage : quand vous êtes perdu, Esc vous 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 : /motif pour chercher, n pour 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

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% requis

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

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn