Ma configuration

Palier5 La lecture commentée d’une configuration réelle : github.com/quentinpigne/nvim.

La page Configuration décrit les mécaniques — vim.opt, vim.keymap.set, les spécifications lazy.nvim. Celles-ci montrent ce que ça donne appliqué, et surtout pourquoi chaque choix a été fait plutôt qu’un autre.

La référence est le dépôt

Ces pages expliquent des décisions, elles ne dupliquent pas le code. Le dépôt évolue, ces pages non ; en cas de désaccord, c’est le dépôt qui a raison. Son INDEX.md tient à jour les tableaux exhaustifs — couverture par langage, liste complète des plugins.

Le parti pris

21 plugins, moins de mille lignes de Lua. Le strict nécessaire pour écrire du code — serveurs de langage, formatage, coloration syntaxique, autocomplétion — plus une poignée d’éléments d’interface.

Ce chiffre est le résultat d’un élagage, pas d’un point de départ minimaliste. La configuration a été plus grosse ; ce qui n’était pas utilisé chaque semaine est parti.

Trois principes en découlent :

Une source unique par sujet. Tout le support par langage — serveurs, paquets à installer, parsers, formateurs — est déclaré dans un seul fichier, et les trois consommateurs en dérivent leur configuration. Ajouter un langage, c’est ajouter une entrée dans une table, pas toucher à quatre fichiers.

Ne pas redéfinir ce que Neovim fournit. La liste des raccourcis natifs a été vérifiée avec nvim --clean, et seuls les manques sont mappés. En 0.12, ça représente une trentaine de lignes économisées — et surtout aucun risque d’écraser un comportement natif par inadvertance.

Charger le plus tard possible. Presque aucun plugin ne charge au démarrage. Les quatre exceptions ont chacune une raison technique explicite, détaillée dans Structure.

Ce qui est absent, volontairement

Cette liste dit plus sur la configuration que la liste des plugins installés.

  • Pas de manipulation de délimiteurs (nvim-surround). Les objets texte couvrent l’essentiel des cas.
  • Pas d’auto-fermeture des paires ni des balises. Le gain net est discutable dès qu’on tape vite.
  • Pas de débogueur générique. Seul Rust a le debug, via rustaceanvim, parce qu’il vient avec.
  • Pas de gestion de sessions, pas de tableau de bord d’accueil.
  • Pas de plugin de lint séparé. Les serveurs de langage remontent déjà les diagnostics ; le seul manque réel est markdownlint, jugé disproportionné pour un langage.
  • Pas de which-key. Le nombre de raccourcis personnels est assez petit pour tenir en tête.

Prérequis

Neovim ≥ 0.12, plus git, node, cargo, rg, fd, fzf, et une police Nerd Font. Tout le reste — serveurs de langage, formateurs, linters — s’installe tout seul. Seul fzf doit venir du gestionnaire de paquets du système, mason ne le fournit pas.

Installation

Rien n’est installé au clonage, et l’outillage arrive en deux temps distincts :

  1. Au premier lancement de Neovim, lazy.nvim s’installe lui-même, puis tree-sitter-cli est installé et les parsers treesitter sont compilés. Pas besoin d’ouvrir un fichier pour ça.
  2. À la première ouverture d’un fichier, les serveurs de langage et les formateurs s’installent. C’est volontaire : nvim-lspconfig charge sur BufReadPre, donc nvim lancé seul sur un buffer vide n’installe aucun serveur. Ouvrir n’importe quel fichier suffit à déclencher l’installation.

:Lazy donne l’état des plugins, :Mason celui des serveurs et formateurs.

Les quatre pages

  • init.lua ligne à ligne, l’ordre de chargement, et les quatre plugins qui chargent au démarrage — avec la raison de chacun.
  • La source unique dont tout dérive, mason, le LSP natif, conform et blink. Et les pièges qui ne se devinent pas : Vue à deux serveurs, biome contre eslint.
  • Recherche floue, explorateur, déplacements, git, treesitter et l’interface. Ce que chacun ajoute, et ce qu’il coûte.
  • Les options qui comptent, la carte complète des touches — ce que Neovim 0.12 fournit, ce qui est ajouté — et les raccourcis d’origine qui ont été sacrifiés.