Aller au contenu
Administration Linux medium

Vim : maîtriser l'éditeur de texte en terminal

20 min de lecture

Vous passez du temps dans le terminal et vous voulez un éditeur rapide, extensible et disponible partout ? Vim (Vi IMproved) transforme l’éditeur vi minimaliste en un environnement de travail complet : coloration syntaxique, annulations illimitées, splits multi-fichiers, macros et un écosystème de plus de 19 000 plugins. Ce guide vous accompagne pas à pas, de la découverte de Vim jusqu’à un environnement productif avec explorateur de fichiers, intégration Git, recherche fuzzy et thème visuel soigné.

  • Comprendre ce que Vim ajoute à vi et pourquoi ça change tout
  • Éditer du texte efficacement grâce au “langage” de Vim (opérateurs + motions)
  • Sélectionner visuellement du texte avec le mode visuel
  • Rechercher et remplacer dans un fichier ou plusieurs fichiers
  • Travailler avec plusieurs fichiers côte à côte (splits, buffers, onglets)
  • Automatiser les tâches répétitives grâce aux macros
  • Personnaliser entièrement Vim avec un fichier .vimrc commenté
  • Installer 12 plugins qui transforment Vim en véritable IDE

Vim est né en 1991, créé par Bram Moolenaar pour combler les frustrations des utilisateurs de vi. Le nom signifie littéralement Vi IMproved. Concrètement, si vous avez déjà pesté contre vi parce qu’il ne permettait qu’une seule annulation ou qu’il n’affichait aucune couleur, Vim résout exactement ces problèmes.

FonctionnalitéviVim
AnnulationsUne seule (u)Illimitées (u / Ctrl+r)
Coloration syntaxiqueNonOui — le code est coloré automatiquement
Mode visuelNonOui — sélectionner du texte comme dans un éditeur graphique
Splits / ongletsNonOui — plusieurs fichiers côte à côte
PluginsNonPlus de 19 000 extensions disponibles
Historique temporelNonRevenir à l’état du fichier “il y a 10 secondes”
Aide intégréeLimitéeDocumentation complète accessible avec :help
ComplétionNonComplétion automatique avec Ctrl+n
Persistent undoNonL’historique d’annulation survit au redémarrage

Pour résumer : vi est un éditeur d’urgence, toujours disponible. Vim est l’éditeur que vous choisirez volontairement une fois que vous aurez goûté à sa puissance.

Avant de plonger dans les commandes, prenons un moment pour comprendre comment Vim pense. C’est la clé pour ne plus apprendre des raccourcis par cœur, mais composer ses propres commandes naturellement.

Vim fonctionne comme un langage avec :

  • des verbes (les opérateurs) : ce que vous voulez faire
  • des compléments (les motions) : sur quoi vous voulez le faire

Exactement comme en français : “Supprimer le mot” se traduit en Vim par dwd pour “delete” (supprimer) et w pour “word” (mot).

Voici les quatre opérateurs que vous utiliserez 90 % du temps :

OpérateurVerbeCe qu’il fait
ddeleteSupprime le texte visé
cchangeSupprime le texte visé et passe en mode insertion pour le remplacer
yyankCopie le texte visé dans le presse-papier Vim
>indentDécale le texte vers la droite

Les motions indiquent la portée de l’action :

MotionComplémentCe qu’elle couvre
wwordJusqu’au prochain mot
$fin de ligneJusqu’au bout de la ligne
0début de ligneJusqu’au début de la ligne
ggdébut du fichierJusqu’à la première ligne
Gfin du fichierJusqu’à la dernière ligne
{ / }paragrapheJusqu’au paragraphe précédent / suivant
%correspondanceJusqu’à la parenthèse/accolade correspondante
f{c}findJusqu’au caractère {c} sur la ligne courante

La magie de Vim, c’est que tout se compose. Quelques exemples concrets :

CommandeLectureRésultat
dwdelete wordSupprime du curseur jusqu’au prochain mot
d$delete jusqu’en fin de ligneSupprime tout jusqu’au bout de la ligne
y3jyank 3 lignes vers le basCopie la ligne courante et les 3 suivantes
cwchange wordSupprime le mot et passe en insertion pour le remplacer
>}indenter jusqu’au prochain paragrapheDécale tout le paragraphe vers la droite

Imaginez que vous éditez un fichier de configuration et que vous devez supprimer tout le reste d’une ligne après le signe =. Placez votre curseur sur le = et tapez d$ : tout ce qui suit est supprimé. Pas besoin de sélectionner à la souris, pas besoin de Shift+End puis Suppr.

Les text objects : agir sur des “blocs logiques”

Section intitulée « Les text objects : agir sur des “blocs logiques” »

Les text objects sont la fonctionnalité qui rend Vim vraiment unique. Au lieu de viser un emplacement avec une motion, vous visez une structure logique du texte : un mot, le contenu entre guillemets, un bloc entre accolades, etc.

La syntaxe est : opérateur + i ou a + délimiteur.

  • i signifie inner (à l’intérieur, sans les délimiteurs)
  • a signifie around (autour, délimiteurs inclus)

Prenons un exemple concret. Vous avez cette ligne dans un script Python :

message = "Bonjour le monde"

Votre curseur est quelque part entre les guillemets. Voici ce que font différentes combinaisons :

CommandeCe qui se passeRésultat
ci"Change inner — supprime le texte entre guillemets et passe en insertionmessage = "" (curseur entre les guillemets, prêt à taper)
di"Delete inner — supprime le texte entre guillemetsmessage = ""
da"Delete around — supprime le texte ET les guillemetsmessage =
yi"Yank inner — copie le texte entre guillemetsBonjour le monde dans le presse-papier

Les délimiteurs disponibles sont nombreux :

DélimiteurCe qu’il vise
", ', `Contenu entre guillemets
( ou )Contenu entre parenthèses
{ ou }Contenu entre accolades
[ ou ]Contenu entre crochets
tContenu entre balises HTML (<p>...</p>)
wLe mot sous le curseur
pLe paragraphe courant

Imaginez que vous devez modifier un paramètre dans un fichier JSON :

{ "port": "8080", "host": "localhost" }

Placez votre curseur n’importe où sur 8080, tapez ci", puis le nouveau port 3000, puis Esc. Le port est modifié sans avoir touché les guillemets. Cette commande fonctionne quelle que soit la position du curseur entre les délimiteurs — pas besoin de se placer au début.

Deux commandes à retenir absolument :

  • . (point) : répète la dernière modification. C’est probablement la commande la plus puissante de Vim. Si vous venez de faire ciw pour changer un mot en “serveur”, vous pouvez ensuite aller sur un autre mot et taper . pour le remplacer aussi par “serveur”.
  • u : annule la dernière modification. Vous pouvez appuyer plusieurs fois pour remonter dans l’historique.
  • Ctrl+r : refait l’action annulée (l’inverse de u).
  • :earlier 10s / :later 3m : revient littéralement à l’état du fichier tel qu’il était il y a 10 secondes, ou avance de 3 minutes dans l’historique. C’est comme un “time machine” pour vos fichiers.

Dans vi, toutes les actions se font “à l’aveugle” — vous tapez une commande et le texte change. Le mode visuel de Vim ajoute une étape intermédiaire : vous sélectionnez d’abord le texte (il apparaît en surbrillance), puis vous choisissez quoi en faire. C’est rassurant quand on débute.

RaccourciType de sélectionQuand l’utiliser
vCaractère par caractèreSélectionner un bout de texte précis dans une ligne
V (majuscule)Ligne entièreSélectionner un bloc de lignes complet
Ctrl+vColonne (bloc rectangulaire)Modifier la même colonne sur plusieurs lignes

Une fois la sélection active, déplacez-vous avec les touches habituelles (hjkl, w, }, etc.) pour étendre la zone sélectionnée. Le texte sélectionné apparaît en surbrillance.

Une fois le texte sélectionné, appuyez sur une touche d’action :

  • y : copier la sélection
  • d : couper (supprimer) la sélection
  • c : remplacer — supprime la sélection et passe en mode insertion
  • > : indenter la sélection (décaler vers la droite)
  • < : désindenter la sélection (décaler vers la gauche)
  • Esc : annuler la sélection et revenir en mode normal

Situation : vous avez un script Python et vous voulez commenter 5 lignes d’un coup en ajoutant # au début de chacune.

  1. Placez votre curseur sur la première ligne à commenter.

  2. Appuyez sur Ctrl+v pour entrer en mode bloc visuel. Vous voyez -- VISUAL BLOCK -- en bas de l’écran.

  3. Descendez avec 4j pour étendre la sélection sur 5 lignes au total (la ligne courante + 4 en dessous). Vous voyez un curseur en colonne sur les 5 lignes.

  4. Appuyez sur I (majuscule, attention pas i minuscule). Vim passe en mode insertion au début de la première ligne.

  5. Tapez # (dièse + espace).

  6. Appuyez sur Esc. Vim applique automatiquement le texte que vous venez de taper au début de chacune des 5 lignes. Toutes les lignes sont maintenant commentées.

Pour décommenter, refaites Ctrl+v, sélectionnez les # sur les 5 lignes (avec 4j puis l pour inclure l’espace), et appuyez sur d.

Quand vous travaillez sur un fichier de configuration de 200 lignes, retrouver un paramètre ou renommer une variable partout dans le fichier sans risque d’erreur, c’est indispensable. Vim excelle dans ce domaine.

Depuis le mode normal, tapez / suivi du mot recherché, puis Entrée. Vim saute directement à la première occurrence et la surligne.

CommandeCe qu’elle fait
/nginxCherche “nginxvers le bas du fichier
?nginxCherche “nginx” vers le haut
nSaute à l’occurrence suivante
NSaute à l’occurrence précédente
*Cherche le mot sous le curseur (vers le bas) — très pratique
#Cherche le mot sous le curseur (vers le haut)

Par exemple, si vous éditez un fichier de configuration Nginx et que vous cherchez où est défini le port d’écoute, tapez /listen puis appuyez sur n pour naviguer entre les différentes occurrences.

La commande :s permet de remplacer du texte. Sa syntaxe suit le même principe que la commande sed :

:[portée]s/ancien/nouveau/[drapeaux]

Voici les combinaisons les plus courantes, de la plus simple à la plus complète :

CommandeCe qu’elle fait
:s/foo/bar/Remplace le premier “foo” sur la ligne courante
:s/foo/bar/gRemplace tous les “foo” sur la ligne courante
:%s/foo/bar/gRemplace tous les “foo” dans tout le fichier
:%s/foo/bar/gcIdem, mais demande confirmation pour chaque occurrence
:5,20s/foo/bar/gRemplace uniquement entre les lignes 5 et 20

Vous avez un fichier Python de 35 lignes où la fonction calculer_somme apparaît 4 fois (la définition + 3 appels). Vous voulez la renommer en calculer_total :

:%s/calculer_somme/calculer_total/g

Vim confirme le résultat :

4 substitutions on 4 lines

Les 4 occurrences sont remplacées d’un coup. Si vous voulez vérifier chaque remplacement avant de l’appliquer, ajoutez le drapeau c :

:%s/calculer_somme/calculer_total/gc

Vim surligne chaque occurrence et vous demande y (oui), n (non), a (toutes), q (quitter) ou l (remplacer celle-ci et quitter).

Si votre recherche doit couvrir tout un projet (tous les fichiers .py dans un dossier et ses sous-dossiers) :

:vimgrep /calculer_somme/ **/*.py

Vim ouvre une quickfix list (liste de résultats) que vous pouvez parcourir :

  • :copen : affiche la liste des résultats dans une fenêtre
  • :cn : saute au résultat suivant
  • :cp : saute au résultat précédent

En tant que sysadmin ou développeur, vous éditez rarement un seul fichier. Vous devez souvent comparer deux configurations, consulter un fichier pendant que vous en modifiez un autre, ou naviguer rapidement entre plusieurs scripts. Vim gère ça avec trois mécanismes : les buffers, les splits et les onglets.

Quand vous ouvrez un fichier avec :e, Vim le charge dans un buffer (une zone mémoire). Pensez aux buffers comme aux onglets cachés d’un navigateur : les fichiers sont ouverts, mais vous n’en voyez qu’un à la fois.

CommandeCe qu’elle fait
:e fichierOuvre un fichier dans un nouveau buffer
:lsListe tous les buffers (fichiers) ouverts
:b2Bascule vers le buffer n°2
:bnPasse au buffer suivant (next)
:bpPasse au buffer précédent (previous)
:bdFerme le buffer courant (sans quitter Vim)

Splits : afficher plusieurs fichiers côte à côte

Section intitulée « Splits : afficher plusieurs fichiers côte à côte »

Les splits divisent votre écran pour afficher plusieurs fichiers simultanément. C’est comme avoir deux feuilles de papier ouvertes l’une à côté de l’autre sur votre bureau.

CommandeCe qu’elle fait
:vsp fichierOuvre un fichier dans un split vertical (côte à côte)
:sp fichierOuvre un fichier dans un split horizontal (l’un au-dessus de l’autre)

Pour naviguer entre les fenêtres, la combinaison est toujours la même : Ctrl+w suivi de la direction :

RaccourciNavigation
Ctrl+w hAller à la fenêtre de gauche
Ctrl+w lAller à la fenêtre de droite
Ctrl+w jAller à la fenêtre du bas
Ctrl+w kAller à la fenêtre du haut
Ctrl+w =Égaliser la taille de toutes les fenêtres
Ctrl+w cFermer la fenêtre courante
Ctrl+w oGarder uniquement la fenêtre courante (fermer toutes les autres)

Voici un exemple avec trois fichiers ouverts — un script Python, un fichier YAML et un script Bash, tous visibles en même temps :

Trois fichiers ouverts côte à côte dans Vim avec splits verticaux et horizontal

Ce type de disposition est très pratique pour comparer deux fichiers de configuration ou éditer du code en consultant la documentation.

Les onglets regroupent des ensembles de splits. Si les splits sont les fenêtres de votre bureau, les onglets sont des bureaux virtuels différents. Utile pour séparer des contextes : un onglet pour le code, un pour les configurations, un pour les logs.

CommandeCe qu’elle fait
:tabnew fichierOuvre un fichier dans un nouvel onglet
gtPasse à l’onglet suivant
gTPasse à l’onglet précédent
:tabsListe tous les onglets ouverts
:tabcloseFerme l’onglet courant

Imaginons que vous ayez un fichier CSV de 100 lignes et que vous deviez reformater chaque ligne de la même manière — ajouter un préfixe, supprimer une colonne, modifier un séparateur. Le faire à la main ligne par ligne prendrait des heures. Les macros de Vim permettent d’enregistrer une séquence d’actions et de la rejouer autant de fois que nécessaire.

Une macro se stocke dans un registre (une mémoire identifiée par une lettre). Voici le processus complet :

  1. Démarrer l’enregistrement : appuyez sur q suivi d’une lettre pour choisir le registre. Par exemple, qa enregistre dans le registre a. Vous voyez recording @a s’afficher en bas de l’écran.

  2. Effectuer les actions : tout ce que vous tapez (déplacements, modifications, insertions) est enregistré. Travaillez sur une seule ligne comme modèle.

  3. Arrêter l’enregistrement : appuyez sur q. Le message recording disparaît.

  4. Rejouer la macro : tapez @a pour exécuter la macro du registre a. Tapez @@ pour rejouer la dernière macro utilisée.

Exemple pas à pas : ajouter un commentaire à des lignes

Section intitulée « Exemple pas à pas : ajouter un commentaire à des lignes »

Situation : vous avez un fichier de configuration et vous voulez commenter les lignes 4 à 8 en ajoutant # au début de chacune.

La méthode la plus directe (sans macro) :

:4,8normal I#

Cette commande dit à Vim : “sur les lignes 4 à 8, exécute la commande normale I# ” (insérer # en début de ligne). Le mot-clé normal indique que les touches qui suivent doivent être interprétées comme en mode normal.

Appliquer une action sur toutes les lignes correspondant à un motif

Section intitulée « Appliquer une action sur toutes les lignes correspondant à un motif »

Vous voulez commenter toutes les lignes qui contiennent le mot debug :

:g/debug/normal I#

La commande :g/pattern/ (pour global) sélectionne toutes les lignes correspondant au motif, puis applique l’action qui suit. C’est extraordinairement puissant : vous pouvez par exemple supprimer toutes les lignes vides avec :g/^$/d.

Pour exécuter la macro a dix fois de suite :

10@a

C’est ici que les macros deviennent redoutables : vous faites le travail une fois à la main, puis Vim le reproduit 10, 100 ou 1000 fois.

Les macros sont perdues quand vous fermez Vim. Pour en conserver une, ajoutez-la à votre fichier .vimrc :

let @a='I# \<Esc>j'

Cette ligne pré-remplit le registre a avec la macro “insérer # en début de ligne, revenir en mode normal, descendre d’une ligne”.

Le fichier ~/.vimrc est le cœur de votre configuration Vim. Il est lu à chaque lancement de Vim. Chaque ligne de ce fichier correspond à une commande que vous pourriez taper manuellement dans Vim, mais qui sera appliquée automatiquement.

Pensez au .vimrc comme au fichier .bashrc de votre shell : c’est ici que vous définissez les réglages qui correspondent à votre façon de travailler.

Si vous n’avez jamais eu de .vimrc, commencez par créer un fichier minimal et ajoutez des options au fur et à mesure de vos besoins. Voici un point de départ solide avec des explications pour chaque ligne :

" === Apparence ===
set number " Affiche les numéros de ligne à gauche
set relativenumber " Numéros relatifs : montre la distance par rapport
" à la ligne courante (utile pour sauter avec 5j, 12k)
set cursorline " Surligne la ligne où se trouve le curseur
set showmatch " Quand vous tapez ), surligne brièvement le ( correspondant
set laststatus=2 " Affiche toujours la barre de statut en bas
" === Indentation ===
set tabstop=4 " Une tabulation vaut 4 espaces à l'écran
set shiftwidth=4 " L'indentation automatique décale de 4 espaces
set expandtab " Quand vous appuyez sur Tab, insère des espaces (pas \t)
set autoindent " Conserve l'indentation de la ligne précédente
set smartindent " Ajoute un niveau d'indentation après { ou if
" === Recherche ===
set incsearch " Résultats en temps réel pendant la saisie de /motif
set hlsearch " Surligne toutes les occurrences trouvées
set ignorecase " Recherche insensible à la casse (majuscules/minuscules)
set smartcase " SAUF si vous tapez une majuscule dans la recherche
" === Confort ===
set encoding=utf-8 " Encodage UTF-8 (accents, emojis...)
set scrolloff=8 " Garde toujours 8 lignes au-dessus et en-dessous du curseur
set wildmenu " Quand vous tapez :e <Tab>, affiche un menu de complétion
set mouse=a " Permet d'utiliser la souris (clic, scroll, sélection)

Par défaut, quand vous fermez un fichier et le rouvrez, tout l’historique d’annulation est perdu. Le persistent undo sauvegarde cet historique sur disque, ce qui vous permet d’annuler des modifications même après avoir fermé et rouvert le fichier.

" === Persistent undo ===
set undofile " Active la sauvegarde de l'historique sur disque
set undodir=~/.vim/undodir " Dossier où stocker les fichiers d'historique

La touche Leader est un préfixe que vous choisissez pour créer des raccourcis personnalisés qui ne gênent aucune commande Vim existante. Par convention, la touche Espace est idéale car elle est facilement accessible et inutilisée en mode normal.

" === Touche Leader ===
let mapleader = " " " Définit la touche Espace comme Leader
" Raccourcis personnalisés
nnoremap <leader>w :w<CR> " Espace+w → sauvegarder le fichier
nnoremap <leader>q :q<CR> " Espace+q → quitter
nnoremap <leader>h :nohlsearch<CR> " Espace+h → enlever le surlignage de recherche

Le raccourci Espace h est très pratique au quotidien : après une recherche avec /, toutes les occurrences restent surlignées en jaune. C’est utile, mais au bout d’un moment, c’est gênant. Espace h enlève le surlignage sans perdre la recherche — vous pouvez toujours naviguer avec n et N.

Un fichier Python utilise 4 espaces d’indentation, mais un fichier YAML en utilise 2. Vim peut ajuster automatiquement son comportement :

filetype plugin indent on " Active la détection du type de fichier
autocmd FileType python set tabstop=4 shiftwidth=4 expandtab
autocmd FileType yaml set tabstop=2 shiftwidth=2 expandtab
autocmd FileType json set tabstop=2 shiftwidth=2 expandtab
autocmd FileType sh set tabstop=2 shiftwidth=2 expandtab

Le mot-clé autocmd signifie “quand Vim détecte que le fichier est de type Python, applique ces réglages”.

Après avoir modifié votre .vimrc, inutile de fermer et rouvrir Vim :

:source ~/.vimrc

Cette commande relit le fichier de configuration et applique les changements immédiatement.

Jusqu’ici, vous avez un Vim bien configuré mais “nu” — il ne fait que ce que Vim sait faire nativement. Les plugins ajoutent des fonctionnalités que Vim n’a pas d’origine : un explorateur de fichiers en arborescence, une intégration Git, une recherche ultra-rapide, un thème de couleurs moderne, etc.

Pour gérer ces plugins, vous avez besoin d’un gestionnaire de plugins. vim-plug est le plus populaire avec plus de 35 000 étoiles sur GitHub : il télécharge, installe et met à jour vos plugins en une commande.

La commande suivante télécharge vim-plug et le place dans le bon dossier. Vous n’avez à le faire qu’une seule fois :

Fenêtre de terminal
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Ajoutez cette section à votre ~/.vimrc. Chaque ligne Plug correspond à un plugin à installer. Le nom entre guillemets est le dépôt GitHub du plugin (auteur/nom) :

" === Plugins (vim-plug) ===
call plug#begin('~/.vim/plugged')
" Navigation et fichiers
Plug 'preservim/nerdtree' " Explorateur de fichiers en arborescence
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " Recherche fuzzy
Plug 'junegunn/fzf.vim' " Commandes fzf pour Vim
" Édition
Plug 'tpope/vim-commentary' " Commenter/décommenter avec gcc
Plug 'tpope/vim-surround' " Changer les guillemets/parenthèses
Plug 'tpope/vim-repeat' " Répéter les commandes de plugins avec .
Plug 'jiangmiao/auto-pairs' " Ferme automatiquement (, [, {, "...
" Git
Plug 'tpope/vim-fugitive' " Commandes Git depuis Vim
Plug 'airblade/vim-gitgutter' " Marqueurs +/~/- dans la gouttière
" Apparence
Plug 'morhetz/gruvbox' " Thème de couleurs agréable
Plug 'itchyny/lightline.vim' " Barre de statut colorée
Plug 'yggdroot/indentline' " Guides d'indentation visuels
call plug#end()

Sauvegardez le .vimrc, relancez Vim, puis tapez :

:PlugInstall

vim-plug télécharge et installe chaque plugin en parallèle. La fenêtre affiche la progression et un message “Done!” une fois terminé :

Installation des 12 plugins avec vim-plug — tous les plugins sont téléchargés en parallèle

CommandeCe qu’elle fait
:PlugInstallInstalle les nouveaux plugins ajoutés au .vimrc
:PlugUpdateMet à jour tous les plugins déjà installés
:PlugCleanSupprime les plugins dont la ligne Plug a été retirée du .vimrc
:PlugStatusAffiche l’état de chaque plugin

Pour supprimer un plugin : supprimez sa ligne Plug dans le .vimrc, puis lancez :PlugClean.

Les 12 plugins déclarés plus haut couvrent les besoins les plus courants. Voici ce que chacun apporte concrètement, avec les commandes à connaître.

Quel problème ça résout : par défaut, le thème de Vim est assez austère et peu contrasté. Gruvbox offre une palette de couleurs chaudes et équilibrées, agréable pour de longues sessions d’édition. Les mots-clés, chaînes de caractères, commentaires et fonctions ont chacun une couleur distincte, ce qui facilite la lecture du code.

Ajoutez ces lignes à votre .vimrc après le bloc plug#end() :

" === Thème Gruvbox ===
set background=dark " Version fond sombre (il existe aussi 'light')
colorscheme gruvbox " Active le thème
set noshowmode " Cache le mode (-- INSERT --) car lightline l'affiche

Vim avec le thème Gruvbox, coloration syntaxique Python et numéros de ligne

Quel problème ça résout : sans plugin, pour ouvrir un fichier vous devez taper son chemin complet avec :e /chemin/vers/fichier. NERDTree affiche une arborescence sur le côté gauche de l’écran, comme l’explorateur de fichiers dans VS Code. Vous naviguez dans les dossiers et ouvrez les fichiers d’un appui sur Entrée.

Ajoutez cette ligne à votre .vimrc pour créer un raccourci d’ouverture :

" === NERDTree ===
nnoremap <leader>n :NERDTreeToggle<CR> " Espace+n ouvre/ferme l'arborescence

Appuyez sur Espace n pour afficher ou masquer l’explorateur :

NERDTree affichant l'arborescence d'un projet avec fichiers Python, YAML et Bash

Une fois dans NERDTree, voici les touches utiles :

ToucheCe qu’elle fait dans NERDTree
o ou EntréeOuvrir le fichier ou développer le dossier
sOuvrir le fichier dans un split vertical (à côté)
iOuvrir dans un split horizontal (au-dessus/en-dessous)
tOuvrir dans un nouvel onglet
RRafraîchir l’arborescence
mOuvrir le menu (créer, renommer, supprimer un fichier)
IAfficher/masquer les fichiers cachés (ceux qui commencent par .)
qFermer NERDTree

Quel problème ça résout : sur un projet avec des centaines de fichiers, retrouver le bon fichier en tapant son chemin complet est fastidieux. fzf (fuzzy finder) vous permet de taper quelques lettres — même approximatives — et il retrouve le fichier pour vous. Par exemple, taper “ngxcf” retrouvera nginx.conf.

Ajoutez ces raccourcis à votre .vimrc :

" === fzf ===
nnoremap <leader>f :Files<CR> " Espace+f → chercher un fichier par nom
nnoremap <leader>b :Buffers<CR> " Espace+b → naviguer dans les fichiers ouverts
nnoremap <leader>r :Rg<CR> " Espace+r → chercher du texte dans tout le projet

Recherche fuzzy de fichiers avec fzf dans Vim

La commande :Rg (Ripgrep) cherche du contenu dans les fichiers — comme un grep ultra-rapide intégré à Vim.

Quel problème ça résout : normalement, pour faire un git status, vous devez quitter Vim (ou ouvrir un autre terminal), taper la commande, puis revenir. vim-fugitive intègre Git directement dans Vim — vous restez dans votre éditeur tout le temps.

CommandeÉquivalent shellCe qu’elle fait
:Git ou :Ggit statusAffiche un résumé interactif des changements
:Git diffgit diffCompare les modifications avec le dernier commit
:Git blamegit blameMontre qui a modifié chaque ligne et quand
:Git loggit logHistorique des commits
:Gwritegit add fichierAjoute le fichier courant au prochain commit
:Greadgit checkout fichierAnnule les modifications (revient au dernier commit)

vim-gitgutter : voir les modifications dans la gouttière

Section intitulée « vim-gitgutter : voir les modifications dans la gouttière »

Quel problème ça résout : quand vous modifiez un fichier versionné avec Git, il est difficile de savoir exactement quelles lignes ont changé. vim-gitgutter affiche des marqueurs colorés dans la gouttière (la colonne fine à gauche des numéros de ligne) :

vim-gitgutter affichant les marqueurs de modification dans la gouttière

MarqueurCouleurSignification
+VertLigne ajoutée (n’existait pas dans le dernier commit)
~JauneLigne modifiée (différente du dernier commit)
-RougeLigne supprimée (existait dans le dernier commit)

Pour naviguer rapidement entre les modifications :

RaccourciCe qu’il fait
]cSaute à la prochaine modification
[cSaute à la modification précédente
<leader>hpPrévisualise le changement (montre l’ancien contenu)
<leader>huAnnule la modification (remet l’ancien contenu)

vim-surround : manipuler les guillemets et parenthèses

Section intitulée « vim-surround : manipuler les guillemets et parenthèses »

Quel problème ça résout : changer des guillemets simples en doubles, ou entourer un mot de parenthèses, demande normalement plusieurs étapes (aller au début, supprimer le guillemet, en retaper un, aller à la fin, idem). vim-surround fait ça en une seule commande.

Voici les situations les plus courantes avec un exemple avant/après :

SituationCommandeAvantAprès
Changer les guillemetscs"'"hello"'hello'
Transformer en balise HTMLcs'<p>'hello'<p>hello</p>
Supprimer les guillemetsds""hello"hello
Ajouter des guillemets autour d’un motysiw"hello"hello"
Entourer toute la ligne de parenthèsesyss(hello world( hello world )

La syntaxe suit toujours le même principe : action + s + ancien + nouveau. cs"' = change surround " par '.

Quel problème ça résout : commenter du code (ajouter # en Python, // en JavaScript, " en vimscript) nécessite de connaître le bon caractère pour chaque langage et de le taper manuellement. vim-commentary détecte automatiquement le langage et utilise le bon caractère.

CommandeCe qu’elle fait
gccCommenter/décommenter la ligne courante (bascule)
gcapCommenter tout le paragraphe
gc3jCommenter la ligne courante et les 3 suivantes
sélection visuelle + gcCommenter toute la sélection

C’est l’un des plugins les plus utiles au quotidien. Un simple gcc et la ligne est commentée. Refaites gcc et elle est décommentée.

Quel problème ça résout : la barre de statut par défaut de Vim est peu lisible et ne montre pas grand-chose. lightline la remplace par une barre colorée qui affiche le mode actuel (NORMAL, INSERT, VISUAL…), le nom du fichier, l’encodage et la position dans le fichier.

" === Lightline ===
let g:lightline = { 'colorscheme': 'gruvbox' }

Avec cette ligne, la barre de statut adopte les couleurs du thème Gruvbox pour un rendu cohérent.

auto-pairs : fermeture automatique des délimiteurs

Section intitulée « auto-pairs : fermeture automatique des délimiteurs »

Quel problème ça résout : quand vous tapez une parenthèse ouvrante (, vous devez vous rappeler de taper la fermante ) plus tard. auto-pairs l’ajoute automatiquement et place le curseur entre les deux. Fonctionne aussi avec [, {, ", ' et `. Si vous n’aimez pas ce comportement dans un cas précis, appuyez sur Ctrl+v avant le caractère pour empêcher la fermeture automatique.

indentLine : visualiser les niveaux d’indentation

Section intitulée « indentLine : visualiser les niveaux d’indentation »

Quel problème ça résout : dans les fichiers YAML ou Python, l’indentation est significative — un espace de trop ou de moins change le sens du fichier. indentLine affiche des lignes verticales fines à chaque niveau d’indentation pour vous aider à aligner correctement votre code.

Voici la configuration complète qui regroupe tous les réglages et plugins présentés dans ce guide. Les deux onglets vous permettent de voir la configuration et les commandes d’installation.

" ============================================
" .vimrc — Configuration Vim complète
" ============================================
" === Apparence ===
set number
set relativenumber
set cursorline
set showmatch
set laststatus=2
set noshowmode
" === Indentation ===
set tabstop=4
set shiftwidth=4
set expandtab
set autoindent
set smartindent
filetype plugin indent on
" === Recherche ===
set incsearch
set hlsearch
set ignorecase
set smartcase
" === Comportement ===
set encoding=utf-8
set scrolloff=8
set wildmenu
set mouse=a
set clipboard=unnamedplus
" === Persistent undo ===
set undofile
set undodir=~/.vim/undodir
" === Touche Leader ===
let mapleader = " "
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>h :nohlsearch<CR>
" === Plugins (vim-plug) ===
call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree'
Plug 'tpope/vim-commentary'
Plug 'itchyny/lightline.vim'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-repeat'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'jiangmiao/auto-pairs'
Plug 'morhetz/gruvbox'
Plug 'yggdroot/indentline'
call plug#end()
" === Thème ===
set background=dark
colorscheme gruvbox
" === NERDTree ===
nnoremap <leader>n :NERDTreeToggle<CR>
" === fzf ===
nnoremap <leader>f :Files<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>r :Rg<CR>
" === Lightline ===
let g:lightline = { 'colorscheme': 'gruvbox' }
" === Configuration par type de fichier ===
autocmd FileType python set tabstop=4 shiftwidth=4 expandtab
autocmd FileType yaml set tabstop=2 shiftwidth=2 expandtab
autocmd FileType json set tabstop=2 shiftwidth=2 expandtab
autocmd FileType sh set tabstop=2 shiftwidth=2 expandtab

Vim possède l’une des documentations intégrées les plus complètes de tous les éditeurs — des milliers de pages, couvrant chaque commande, option et concept. Plutôt que de chercher sur internet, prenez le réflexe de consulter l’aide directement dans Vim.

CommandeCe qu’elle affiche
:helpLa page d’accueil de l’aide
:help motionTout sur les motions
:help text-objectsTout sur les text objects
:help :substituteQuestion sur la substitution ?
:help vim-plugDocumentation du plugin (si installé)
:helpgrep patternCherche “pattern” dans toute la documentation

Pour naviguer dans l’aide :

  • Ctrl+] : suit un lien (les mots en couleur sont des liens)
  • Ctrl+o : revient en arrière
  • :q : ferme l’aide

Une fois votre .vimrc en place avec les plugins, voici tous les raccourcis personnalisés disponibles avec la touche Leader (Espace) :

RaccourciAction
Espace wSauvegarder
Espace qQuitter
Espace hEnlever le surlignage de recherche
Espace nOuvrir/fermer NERDTree
Espace fRecherche fuzzy de fichiers
Espace bNaviguer dans les buffers
Espace rRecherche de texte dans le projet
SymptômeCause probableSolution
Pas de coloration syntaxiquesyntax on absent du .vimrcAjouter syntax on dans le .vimrc ou taper :syntax on
Le texte collé s’indente en escalierL’auto-indent décale chaque ligne colléeTaper :set paste, coller, puis :set nopaste
Le thème Gruvbox n’apparaît pasPlugin non installéLancer :PlugInstall dans Vim, puis relancer
E492: Not an editor command: PlugInstallvim-plug absentRelancer la commande curl d’installation de vim-plug
Le copier-coller avec le système ne fonctionne pasVim compilé sans +clipboardInstaller vim-gtk3 : sudo apt install vim-gtk3
Caractères bizarres dans le terminalEncodage incorrectAjouter set encoding=utf-8 dans le .vimrc
fzf :Rg ne trouve rienripgrep non installésudo apt install ripgrep
NERDTree ne s’ouvre pasPlugin non installéVérifier la ligne Plug et relancer :PlugInstall
Le raccourci Espace+quelque chose ne fait rienLeader non définiVérifier que let mapleader = " " est avant les nnoremap dans le .vimrc
E518: Unknown option: undodirVim trop ancienMettre à jour vers Vim 7.3+ : sudo apt install vim
  • Vim fonctionne comme un langage : opérateur + motion = action (ex. dw = supprimer un mot). Comprenez cette logique et vous n’aurez plus besoin d’apprendre des raccourcis par cœur.
  • Les text objects (ci", dap, yiw) permettent d’agir sur des structures logiques du texte — c’est la fonctionnalité la plus productive de Vim.
  • La commande . (point) répète la dernière action : c’est l’un des plus gros gains de temps au quotidien.
  • Le fichier .vimrc se construit progressivement — commencez avec les bases et ajoutez des options quand vous en ressentez le besoin.
  • Les macros (qa...q puis @a) automatisent les tâches répétitives et peuvent s’appliquer à des plages ou des motifs.
  • vim-plug installe et gère des plugins en une ligne — les 12 plugins présentés couvrent 90 % des besoins courants (fichiers, Git, recherche, édition, apparence).
  • Les splits (Ctrl+w) permettent de travailler sur plusieurs fichiers côte à côte sans quitter le terminal.
  • L’aide intégrée (:help sujet) est la meilleure resource — prenez le réflexe de la consulter avant de chercher en ligne.

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