Retour à Neovim, deux ans après

J’ai tellement aimé Neovim. Et je l’ai quitté quand même. La raison n’a rien d’original: je passais trop de temps à éditer mes plugins au lieu de faire du vrai travail. Alors je suis parti sur VS Code, par discipline. On bidouille aussi sa config là-bas, mais c’est moins grave: on la change vite fait, tout marche, pas de gros bugs. C’était mieux.

Meme du petit ami distrait: « moi » se retourne sur « keymaps.lua » pendant que « le vrai travail » fait la tête

Le détour Zed

Puis Zed, et là c’était sérieux. Une bonne semaine à me faire aux raccourcis et à mettre ma config au propre, puis un an à l’utiliser énormément, sur mon desktop comme sur mon laptop. Il est devenu très puissant, et j’ai pu y réimplémenter tous les raccourcis que j’avais sur Neovim, ceux qui me manquaient tant sur VS Code.

Restait un trou: mon serveur. Là-bas je travaille en SSH, directement dans le terminal, alors j’y gardais Neovim en backup. Le backup allait devenir le principal.

C’est tmux qui m’a ramené

Le vrai déclencheur, c’est Claude Code. Plus je m’en servais, plus je vivais dans le terminal. Au début je le lançais à l’intérieur de Zed, mais le workflow ne me plaisait pas tellement, et j’ai fini sur tmux. Et une fois dans tmux à plein temps, ouvrir Zed m’embête, ouvrir VS Code m’embête encore plus, parce qu’il faut prendre la souris et je n’ai pas envie de prendre la souris. Un éditeur qui vit déjà dans le terminal, entre lazygit et Claude Code: le truc parfait.

Je n’ai rien reconstruit, d’ailleurs. Ma vieille config était toujours là, fonctionnelle, et j’y ai réintégré tout ce que j’avais mis au point sur Zed. Le résultat est plus minimal qu’avant, mais rien n’est perdu. Si le retour a été aussi facile, c’est pour ça: j’avais déjà quelque chose de bien.

Good enough

Une config n’est jamais finie. Ni sur Neovim, ni sur VS Code, ni sur Zed: si tu as envie de bidouiller, tu bidouilleras. À un moment, il faut se dire ok, c’est good enough, on passe au travail.

Il y a un milliard de choses à changer dans ma config. Ce n’est pas grave. Je reste avec ce que j’ai.

Elle est sous git, donc je peux vérifier ce que je raconte au lieu de me fier à mon impression: rien depuis des semaines. Je suis productif avec. Et de toute façon, c’est Claude Code qui fait la majorité de mes édits aujourd’hui.

L’IA au minimum

Du coup, je n’attends presque rien de l’IA dans l’éditeur. Puisque les agents écrivent le gros du code, pas besoin d’un chat intégré ni d’un agent de plus: juste une autocomplétion rapide, qui me fait gagner du temps quand je tape. Je sais que ce n’est plus la mode: même chez Cursor, l’autocomplétion n’est plus le cheval de bataille, tout le monde se concentre sur les agents, et les outils comme Claude Code ou Codex n’en proposent même pas. Chez moi, c’est minuet branché sur DeepSeek, payé au token et réglé pour rester léger: une seule suggestion par requête, peu de contexte. Ça fait le taf, et ce n’est vraiment pas cher.

La config qui reste

Rien d’extravagant: neo-tree en fenêtre flottante, lualine en bas, bufferline en haut, treesitter et le LSP qui font le gros du travail, 38 plugins gelés dans le lazy-lock.json. Le thème suit le système: onedark en sombre, catppuccin latte en clair.

Telescope ouvert en live grep par-dessus ma config Neovim, la liste des résultats au centre et l'aperçu du fichier à droite

Telescope en live grep. Une fois qu’on navigue comme ça, cliquer dans une sidebar redevient lent.

Tout part de la barre d’espace comme leader. Le reste, c’est de l’ergonomie pour ne jamais quitter la position des mains.

-- jk / kj pour sortir du mode insertion, partout
map("i", "jk", "<Esc>")
map("i", "kj", "<Esc>")

-- U pour refaire (le U par défaut ne sert à rien)
map("n", "U", "<C-r>")

-- c supprime dans le trou noir, pas dans le presse-papier
map({ "n", "v", "x" }, "c", '"_c')

-- H / L sautent au premier / dernier caractère non vide
-- (utilisables comme mouvements: dH, dL)
map({ "n", "v", "o" }, "H", "^")
map({ "n", "v", "o" }, "L", "g_")

-- AZERTY: ù tombe sous les doigts, alors il remplace %
map({ "n", "v" }, "ù", "%")

Le menu which-key qui s'affiche après avoir pressé la touche leader, listant les raccourcis disponibles

which-key. Je presse espace, et il me rappelle tout ce qui part de là.

Deux ans ailleurs, et le retour ne s’est pas joué sur l’éditeur lui-même: je vis dans le terminal maintenant, et Neovim y était déjà. La config est good enough. Enfin, jusqu’à la prochaine fois.