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