Philosophie

Neovim déroute parce qu’on l’aborde presque toujours par le mauvais bout : comme une liste de raccourcis à mémoriser. On tombe alors sur une antisèche de deux cents touches, on en retient quinze, et on conclut que le jeu n’en vaut pas la chandelle.

Ce n’est pas une liste. C’est un petit nombre de principes dont les raccourcis sont la conséquence. Les comprendre demande une heure ; les mémoriser prendrait des mois et ne servirait à rien.

Éditer, ce n’est pas taper

Regardez ce que vous faites vraiment dans un fichier de code. Vous lisez. Vous remontez de quinze lignes. Vous renommez une variable. Vous déplacez un bloc. Vous supprimez trois arguments. Sur une heure de travail, le temps passé à saisir du texte inédit est minoritaire — l’essentiel consiste à se déplacer et à transformer ce qui existe déjà.

Un éditeur classique optimise la minorité : il est toujours prêt à écrire, et tout le reste passe par des combinaisons avec Ctrl, Alt et la souris. Neovim fait l’inverse. Le mode par défaut n’est pas celui où l’on écrit, c’est celui où l’on agit, et le clavier entier y est disponible pour des commandes d’une seule touche.

C’est le raisonnement derrière l’édition modale, et c’est aussi pourquoi elle paraît absurde pendant trois jours : on la juge sur la seule activité qu’elle n’optimise pas.

Les touches forment un langage

Un raccourci fait une chose. Ctrl + Shift + K supprime une ligne, et c’est tout ce qu’il fera jamais. Apprendre cinquante raccourcis donne cinquante actions.

Dans Neovim, d ne supprime rien tout seul : il attend qu’on lui dise quoi. Le « quoi » est un déplacement, ou une structure. Et le même déplacement sert à y pour copier, à c pour changer, à > pour indenter.

{opérateur}{compteur}{motion}

Dix opérateurs et vingt déplacements ne font pas trente commandes, ils en font deux cents — dont la plupart n’ont jamais besoin d’être apprises, ni même vues une fois. Le jour où vous composez ci( sans l’avoir lu nulle part et que ça change le contenu des parenthèses, vous avez franchi le vrai palier : vous ne récitez plus du vocabulaire, vous formez des phrases.

C’est ce qui explique une chose troublante chez les gens qui utilisent Vim depuis longtemps : ils ne connaissent pas tous les raccourcis. Ils connaissent la grammaire, et ils la déduisent.

Le texte a une structure

Un éditeur classique voit une grille de caractères. La sélection y est une distance : d’ici à là.

Neovim sait désigner des structures. iw est un mot, i( l’intérieur des parenthèses, ip un paragraphe, it le contenu d’une balise. Ce ne sont pas des positions mais des notions : le curseur n’a pas besoin d’être au bon endroit, seulement quelque part à l’intérieur. ci" change le contenu d’une chaîne où que l’on se trouve dedans, sans viser les guillemets.

Treesitter, ajouté par Neovim, pousse la même idée jusqu’à la syntaxe du langage : daf supprime la fonction, cia change l’argument, ]f saute à la fonction suivante. L’éditeur ne raisonne plus sur des caractères mais sur l’arbre syntaxique de ce que vous êtes en train d’écrire.

La répétition est un signal

Dans la plupart des éditeurs, transformer quarante lignes de la même façon est une corvée qu’on accomplit à la main, et personne ne trouve ça anormal.

Ici, la répétition est traitée comme le symptôme d’un outil qu’on n’a pas encore sorti. . rejoue la dernière modification. Une macro enregistre une séquence entière et la rejoue mille fois. :g/motif/normal @a l’applique à toutes les lignes qui correspondent à un motif. :cdo l’applique à tous les résultats d’une recherche, à travers tous les fichiers du projet.

Le réflexe à installer n’est pas « quelle touche fait ça », c’est « je viens de faire la même chose deux fois, donc je m’arrête ».

Tout est un buffer

Le terminal, l’aide, la liste des résultats de recherche, l’explorateur de fichiers, la sortie d’une commande externe : tout arrive dans un buffer ordinaire. Vous y naviguez avec les mêmes déplacements, vous y cherchez avec /, vous en copiez des morceaux avec y.

Ce n’est pas un détail d’implémentation, c’est ce qui borne l’effort d’apprentissage : il n’y a pas dix jeux de raccourcis à connaître, un par panneau. Il y en a un, et il s’applique partout.

Le corollaire est que tout est scriptable. Ce que vous faites à la main, vous pouvez le faire faire — c’est la même API.

Ce que Neovim n’est pas

Il faut évacuer quelques promesses excessives, parce qu’elles produisent des déceptions prévisibles.

Ce n’est pas plus rapide en frappe brute. Personne ne tape plus vite dans Neovim. Le gain n’est pas là : il est dans tout ce qui n’est pas de la frappe, et dans le fait de ne jamais quitter le clavier.

Ce n’est pas un IDE prêt à l’emploi. Neovim nu n’a ni complétion intelligente, ni renommage global, ni débogueur. Tout cela existe et fonctionne très bien, mais c’est vous qui l’assemblez — ou une distribution qui l’a fait pour vous, avec ses choix.

Ce n’est pas une question de vitesse, au fond. Le bénéfice réel se mesure en friction : l’écart entre le moment où vous savez ce que vous voulez faire et le moment où c’est fait. Quand cet écart tombe à zéro, l’attention reste sur le problème au lieu de se disperser dans l’outil. C’est plus difficile à démontrer qu’un gain de secondes, et c’est nettement plus important.

Neovim plutôt que Vim

Neovim est un fork de Vim de 2014, et l’écart s’est creusé sur quatre points qui comptent :

  • Lua à la place de Vimscript. La configuration devient du vrai code, avec des modules, des fonctions et un écosystème de bibliothèques.
  • Le LSP intégré. Neovim est un client de Language Server Protocol nativement : complétion, diagnostics, renommage et navigation viennent des mêmes serveurs que ceux de VSCode, sans passer par un plugin qui les réimplémente.
  • Treesitter intégré. L’analyse syntaxique remplace les expressions régulières, ce qui rend la coloration fiable et ouvre les objets texte sémantiques.
  • Une architecture asynchrone. Les plugins ne bloquent plus l’éditeur pendant qu’ils travaillent.

Tout ce qui est décrit dans les pages Modes à Automatisation vient de Vim et fonctionnerait à l’identique dedans. Tout ce qui touche à la configuration est propre à Neovim.


La suite pratique de cette page est Apprentissage : dans quel ordre installer tout ça, et surtout quoi refuser d’apprendre au début.