Aller au contenu
Administration Linux medium

Vim avancé : splits, macros, plugins

27 min de lecture

Vous maîtrisez les bases de Vim — modes, motions, substitution — et vous voulez en faire un véritable environnement de travail. Ce guide va au-delà du couloir certification pour couvrir ce qui rend Vim productif au quotidien : travailler sur plusieurs fichiers côte à côte, automatiser les tâches répétitives avec les macros, et étendre l’éditeur avec des plugins. À la fin, vous aurez un .vimrc complet et un écosystème comparable à un IDE léger.

  • Organiser plusieurs fichiers avec buffers, splits et onglets
  • Enregistrer et rejouer des macros pour les tâches répétitives
  • Utiliser la commande :g pour appliquer une action à toutes les lignes correspondant à un motif
  • Installer des plugins avec vim-plug
  • Configurer un .vimrc complet et maintenable
  • Exploiter 12 plugins essentiels qui transforment Vim en IDE terminal

Les fonctionnalités de ce guide sont hors tronc certification (LFCS/RHCSA). Elles interviennent quand Vim devient votre éditeur principal : développement, écriture de scripts au long cours, édition comparée de fichiers de configuration, traitement d’un export CSV à reformater. Elles supposent un poste de travail personnel où vous pouvez configurer votre environnement — pas une session SSH jetable sur un serveur client.

SituationFonctionnalité utile
Comparer deux versions d’un fichier de configurationSplits verticaux (:vsp)
Reformater 100 lignes d’un CSV à l’identiqueMacros (qa ... q puis 100@a)
Ajouter un préfixe à toutes les lignes contenant « debug »Commande globale (:g/debug/normal I# )
Naviguer dans un projet de 200 fichiersPlugin fzf (:Files)
Commenter/décommenter un bloc de codePlugin vim-commentary (gcc)
Voir les modifications Git dans la margePlugin vim-gitgutter

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 complémentaires : 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 ouverts
:b2Bascule vers le buffer n°2
:bnPasse au buffer suivant
:bpPasse au buffer précédent
: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 fichierSplit vertical (côte à côte)
:sp fichierSplit 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

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

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

  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.

La méthode la plus directe (sans macro) pour commenter les lignes 4 à 8 :

: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 extrêmement 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

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. Chaque ligne correspond à une commande que vous pourriez taper manuellement, mais qui sera appliquée automatiquement.

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

Voici un point de départ solide avec des explications pour chaque bloc :

" === Apparence ===
set number " Numéros de ligne à gauche
set relativenumber " Distance par rapport à la ligne courante
set cursorline " Surligne la ligne du curseur
set showmatch " Surligne brièvement la parenthèse correspondante
set laststatus=2 " Barre de statut toujours affichée
" === Indentation ===
set tabstop=4 " Une tabulation vaut 4 espaces
set shiftwidth=4 " L'indentation automatique décale de 4 espaces
set expandtab " Tab insère des espaces (pas \t)
set autoindent " Conserve l'indentation de la ligne précédente
set smartindent " Ajoute un niveau après { ou if
" === Recherche ===
set incsearch " Résultats en temps réel pendant la saisie
set hlsearch " Surligne toutes les occurrences
set ignorecase " Recherche insensible à la casse
set smartcase " SAUF si vous tapez une majuscule
" === Confort ===
set encoding=utf-8 " Encodage UTF-8
set scrolloff=8 " 8 lignes visibles autour du curseur
set wildmenu " Menu de complétion sur :e <Tab>
set mouse=a " Souris active (clic, scroll, sélection)
set clipboard=unnamedplus " Intégration presse-papier système

Par défaut, quand vous fermez un fichier et le rouvrez, l’historique d’annulation est perdu. Le persistent undo sauvegarde cet historique sur disque :

" === Persistent undo ===
set undofile
set undodir=~/.vim/undodir

Créez le dossier une fois pour toutes, sinon Vim affiche une erreur à chaque sauvegarde :

Fenêtre de terminal
mkdir -p ~/.vim/undodir

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 facilement accessible et inutilisée en mode normal.

" === Touche Leader ===
let mapleader = " " " Espace = Leader
nnoremap <leader>w :w<CR> " Espace+w → sauvegarder
nnoremap <leader>q :q<CR> " Espace+q → quitter
nnoremap <leader>h :nohlsearch<CR> " Espace+h → retirer le surlignage

Le raccourci Espace h est très pratique : après une recherche, toutes les occurrences restent surlignées. Espace h enlève le surlignage sans perdre la recherche.

Un fichier Python utilise 4 espaces, un fichier YAML en utilise 2. Vim peut ajuster automatiquement :

filetype plugin indent on
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

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 ». Les plugins ajoutent des fonctionnalités que Vim n’a pas d’origine : explorateur de fichiers, intégration Git, recherche fuzzy, thèmes modernes.

vim-plug est le gestionnaire de plugins le plus populaire (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. 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

Chaque ligne Plug correspond à un plugin. Le nom entre guillemets est le dépôt GitHub (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 guillemets/parenthèses
Plug 'tpope/vim-repeat' " Rendre . compatible avec les plugins
Plug 'jiangmiao/auto-pairs' " Fermeture automatique de (, [, {, "
" 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! » :

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 installés
:PlugCleanSupprime les plugins dont la ligne Plug a été retirée
: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 courants. Voici ce que chacun apporte, avec les commandes à connaître.

Problème résolu : par défaut, le thème de Vim est peu contrasté. Gruvbox offre une palette de couleurs chaudes et équilibrées, agréable pour de longues sessions. Les mots-clés, chaînes, commentaires et fonctions ont chacun une couleur distincte.

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

" === Thème Gruvbox ===
set background=dark
colorscheme gruvbox
set noshowmode " Cache -- INSERT -- car lightline l'affiche

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

Problème résolu : 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, comme dans VS Code.

" === NERDTree ===
nnoremap <leader>n :NERDTreeToggle<CR>

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

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

Touches utiles dans NERDTree :

ToucheCe qu’elle fait
o ou EntréeOuvrir le fichier ou développer le dossier
sOuvrir dans un split vertical
iOuvrir dans un split horizontal
tOuvrir dans un nouvel onglet
RRafraîchir l’arborescence
mOuvrir le menu (créer, renommer, supprimer)
IAfficher/masquer les fichiers cachés
qFermer NERDTree

Problème résolu : sur un projet avec des centaines de fichiers, retrouver le bon en tapant son chemin complet est fastidieux. fzf (fuzzy finder) vous permet de taper quelques lettres approximatives et retrouve le fichier pour vous.

" === fzf ===
nnoremap <leader>f :Files<CR> " Chercher un fichier par nom
nnoremap <leader>b :Buffers<CR> " Naviguer dans les fichiers ouverts
nnoremap <leader>r :Rg<CR> " 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.

Problème résolu : pour faire un git status, vous devez normalement quitter Vim, taper la commande, puis revenir. vim-fugitive intègre Git directement dans Vim.

CommandeÉquivalent shellCe qu’elle fait
:Git ou :Ggit statusRésumé interactif des changements
:Git diffgit diffCompare avec le dernier commit
:Git blamegit blameQui a modifié chaque ligne et quand
:Git loggit logHistorique des commits
:Gwritegit add fichierAjoute le fichier courant
:Greadgit checkout fichierAnnule les modifications locales

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

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

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

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

MarqueurCouleurSignification
+VertLigne ajoutée
~JauneLigne modifiée
-RougeLigne supprimée

Navigation rapide :

RaccourciCe qu’il fait
]cSaute à la prochaine modification
[cSaute à la modification précédente
<leader>hpPrévisualise le changement
<leader>huAnnule la modification locale

vim-surround : manipuler guillemets et parenthèses

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

Problème résolu : changer des guillemets simples en doubles, ou entourer un mot de parenthèses, demande normalement plusieurs étapes. vim-surround fait ça en une seule commande.

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 la ligne de parenthèsesyss(hello world( hello world )

La syntaxe suit le principe action + s + ancien + nouveau. cs"' = change surround " par '.

Problème résolu : commenter du code nécessite de connaître le bon caractère pour chaque langage (# en Python, // en JavaScript, " en vimscript). vim-commentary détecte automatiquement le langage.

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

Problème résolu : la barre de statut par défaut de Vim est peu lisible. lightline la remplace par une barre colorée qui affiche le mode (NORMAL, INSERT, VISUAL…), le nom du fichier, l’encodage et la position.

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

auto-pairs : fermeture automatique des délimiteurs

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

Problème résolu : quand vous tapez (, vous devez taper ) plus tard. auto-pairs l’ajoute automatiquement et place le curseur entre les deux. Fonctionne avec [, {, ", ', `. Pour empêcher la fermeture dans un cas précis, tapez Ctrl+v avant le caractère.

Problème résolu : dans les fichiers YAML ou Python, l’indentation est significative — un espace en trop change le sens du fichier. indentLine affiche des lignes verticales fines à chaque niveau d’indentation pour vous aider à aligner correctement.

Voici la configuration complète qui regroupe tous les réglages et plugins présentés.

" ============================================
" .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

Une fois votre .vimrc en place avec les plugins, voici tous les raccourcis 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
Le thème Gruvbox n’apparaît pasPlugin non installé:PlugInstall puis relancer Vim
E492: Not an editor command: PlugInstallvim-plug absentRelancer la commande curl d’installation
Le copier-coller système ne fonctionne pasVim compilé sans +clipboardsudo apt install vim-gtk3
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+... ne fait rienLeader mal placélet mapleader = " " doit être avant les nnoremap
E518: Unknown option: undodirVim trop ancienMettre à jour vers Vim 7.3+
undodir : erreur à la sauvegardeDossier manquantmkdir -p ~/.vim/undodir
  • Les buffers (:ls, :bn, :bp) gardent plusieurs fichiers en mémoire — bien plus rapide que rouvrir à chaque fois.
  • Les splits (:vsp, :sp, navigation Ctrl+w) permettent de voir plusieurs fichiers côte à côte.
  • Les macros (qa ... q puis @a ou 10@a) automatisent les tâches répétitives.
  • La commande globale :g/motif/action applique une action à toutes les lignes correspondant à un motif — extrêmement puissante sur les fichiers de logs ou de configuration.
  • vim-plug installe et gère les plugins en une ligne ; les 12 plugins présentés couvrent 90 % des besoins (fichiers, Git, recherche, édition, apparence).
  • Le .vimrc se construit progressivement — commencez minimal et ajoutez des options quand vous en ressentez le besoin.
  • Sauvegardez votre .vimrc dans un dépôt Git (dotfiles) pour le retrouver sur chaque machine.

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