Outils
Les plugins qui changent la façon de naviguer et de lire, par ordre d’impact réel sur le quotidien.
Recherche floue — fzf-lua
C’est le plugin qui change le plus de choses, et celui qui rend l’explorateur de fichiers presque superflu.
| Raccourci | Recherche |
|---|---|
<leader>p | un fichier du projet |
<leader><space> | parmi les buffers ouverts |
<leader>/ | une chaîne dans tout le projet, avec aperçu |
<leader>sd | les diagnostics de l’espace de travail |
<leader>ss | les symboles du document |
Le filtrage est délégué au binaire fzf plutôt que fait en Lua, ce qui explique sa
rapidité sur un gros dépôt — et pourquoi fzf doit être installé par le
gestionnaire de paquets du système, mason ne le fournissant pas.
Le détour par vim.ui.select
Le point le plus intéressant de cette configuration, et une bonne leçon sur le chargement différé.
vim.ui.select() est le sélecteur générique de Neovim : c’est lui qui présente les
propositions de gra (actions de code), le choix entre plusieurs définitions, les
invites de neo-tree. Son implémentation par défaut est vim.fn.inputlist() — une
liste numérotée en bas de l’écran. fzf-lua sait la remplacer par sa fenêtre
flottante, avec filtrage flou et aperçu : l’équivalent du « Quick Fix » de VSCode.
Le problème est que fzf-lua ne charge que sur une de ses cinq touches. Passer par
son option ui_select ne marcherait pas : au moment où opts s’exécuterait, le
premier gra serait déjà retombé sur inputlist. La solution est une doublure
posée dans init, qui s’exécute au démarrage sans charger le plugin :
Au premier appel, la doublure charge fzf-lua — ce qui remplace vim.ui.select par
la vraie implémentation — puis relaie l’appel vers elle. Les suivants vont
directement à la bonne fonction.
Neovim n’a pas d’ampoule
Rien n’indique visuellement qu’une action de code est disponible. Le réflexe à
prendre est ]d pour aller au diagnostic, puis gra dessus.
Déplacements — flash
flash étend f, F, t, T de deux façons : ils franchissent les lignes, et
chacune de leurs correspondances reçoit une étiquette, de sorte qu’une seconde
frappe atteint n’importe laquelle d’entre elles au lieu de la plus proche
seulement. L’étiquetage n’est pas le défaut du plugin — jump_labels = true
l’active explicitement.
Un seul mapping est ajouté : s, qui saute à une étiquette n’importe où à l’écran.
Des cinq touches que propose le README (s, S, r, R, Ctrl + s), c’est la
seule retenue — un saut étiqueté vaut une touche d’une lettre, les autres non.
Ce que ça coûte : s n’est plus substitute. Son équivalent cl reste disponible.
Deux garde-fous d’origine évitent les mauvaises surprises :
- les étiquettes disparaissent dès qu’un compteur est donné, donc
3fxreste littéral ; - elles disparaissent aussi pendant l’enregistrement et le rejeu d’un registre, donc les macros ne sont pas affectées.
Les lettres de hjkliardc ne servent jamais d’étiquette, ce qui les garde
utilisables immédiatement après le déplacement.
Enfin, modes.search.enabled reste à false : / se comporte exactement comme
avant. C’est un choix — flash sait aussi étiqueter les résultats de recherche, mais
/ est déjà bien.
Objets texte sémantiques — treesitter
nvim-treesitter est utilisé en branche main, où son rôle est plus étroit qu’avant :
c’est un installeur de parsers et un distributeur de requêtes. Ce n’est pas lui
qui colore. Le highlighter est dans Neovim, appelé par une autocommande FileType :
L’indentation par treesitter est encore étiquetée expérimentale en amont. C’est
aussi la raison pour laquelle smartindent est délibérément absent des options :
les deux se battent.
nvim-treesitter-textobjects, en branche main également, ajoute dix mappings —
écrits à la main, il n’y a plus de bloc textobjects = {} à passer à un setup().
| Mapping | Portée |
|---|---|
af / if | la fonction / son corps |
ac / ic | la classe / son corps |
aa / ia | l’argument, avec / sans sa virgule |
]f / [f | fonction suivante / précédente |
]c / [c | classe suivante / précédente |
Trois seulement — fonction, classe, argument — parce que ce sont les captures que tous les langages de la configuration définissent réellement, et que l’ensemble reste assez petit pour tenir en tête.
Deux réglages font la différence à l’usage : lookahead = true saute à l’objet
suivant quand le curseur n’est pas dedans, donc dif fonctionne depuis la ligne
vide au-dessus d’une fonction ; et set_jumps = true alimente la liste des sauts,
ce qui rend Ctrl + o capable d’annuler un ]f.
Trois limites à connaître
]c/[cmasquent les déplacements de diff. Choix assumé : le mode diff est rare ici, etdo/dpcontinuent d’y fonctionner.- Rien n’est mappé sur
]a/[a: c’est la liste d’arguments native, etaacouvre déjà la moitié utile. ]fet]cne descendent pas dans les langages injectés, donc pas dans le<script>d’un.vue. Les objets texte, eux, y fonctionnent. Pour parcourir les symboles d’un.vue, utilisergOou<leader>ss.
Le module repeatable_move est laissé de côté volontairement : il s’emparerait de
; et , pour répéter le dernier déplacement, et flash possède déjà ces deux
touches.
Git — gitsigns
Les modifications non commitées dans la colonne de signes, ]h / [h pour aller de
bloc en bloc, <leader>hp pour un aperçu.
La convention ]x / [x est celle que Neovim utilise pour les diagnostics, la
quickfix et les buffers — la reprendre pour les blocs git évite d’avoir à retenir
une exception.
Le blame de la ligne courante est activé, ce qui n’est pas le défaut : l’auteur et
le résumé du dernier commit qui a touché la ligne s’affichent en fin de ligne après
300 ms. L’amont attend 1000 ms, trop lent pour être utile ; 300 ms est réactif sans
scintiller quand on parcourt un fichier. :Gitsigns toggle_current_line_blame
coupe.
Explorateur — neo-tree
Ctrl + f en barre latérale, Ctrl + t en fenêtre flottante. Le plugin ne charge
qu’à la première frappe de l’une des deux.
Les deux touches masquent un raccourci d’origine — Ctrl + f la page suivante,
Ctrl + t la pile de tags. C’est assumé : ni l’un ni l’autre n’est utilisé ici, la
pagination passant par Ctrl + d et Ctrl + u.
En pratique, l’explorateur sert moins qu’on ne l’imagine : <leader>p ouvre un
fichier en trois lettres, ce qui est plus rapide que de dérouler une arborescence.
Il reste utile pour se représenter la structure d’un projet inconnu, et pour les
opérations sur les fichiers.
Interface
lualine pour la ligne de statut, sur VeryLazy — elle apparaît juste après le
démarrage, hors du chemin critique.
indent-blankline pour les guides d’indentation, y compris sur les lignes vides.
render-markdown rend le markdown directement dans le buffer — titres, tableaux,
cases à cocher — au lieu d’afficher la syntaxe brute. Chargé sur ft = markdown.
tokyonight, variante moon, en priority = 1000 pour s’appliquer avant tout ce
qui définit des couleurs.
Les diagnostics sont configurés à part, dans lua/plugins/lsp.lua : tri par
sévérité, soulignement, texte virtuel avec la source quand plusieurs serveurs
répondent, et des signes en Nerd Font. C’est ce qui rend la police Nerd Font
obligatoire dans les prérequis.