Options et keymaps

Le contenu de lua/config/ : les deux fichiers qui décrivent l’éditeur indépendamment de tout plugin.

Les options

number, relativenumber, cursorline    numérotation relative et ligne courante
signcolumn = 'yes'                    colonne de signes toujours réservée
scrolloff = 8                         contexte conservé autour du curseur
tabstop / shiftwidth / softtabstop = 2, expandtab
ignorecase + smartcase                casse ignorée sauf si le motif en contient
undofile                              historique d'annulation persistant
clipboard = 'unnamedplus'             y et p passent par le presse-papiers système
splitright + splitbelow               les partages s'ouvrent où on les attend
updatetime = 250                      délai avant CursorHold
inccommand = 'split'                  aperçu de :substitute pendant la frappe

Quatre d’entre elles méritent un mot, parce que leur absence se remarque plus que leur présence.

signcolumn = 'yes' réserve la colonne en permanence. Sans ça, elle apparaît et disparaît au rythme des blocs gitsigns et des diagnostics, et tout le buffer se décale latéralement — un effet visuel agaçant dès qu’on édite un fichier suivi par git.

scrolloff = 8 garde huit lignes de contexte sous et sur le curseur. C’est ce qui évite le zz réflexe après chaque déplacement vertical.

inccommand = 'split' affiche l’effet d’un :%s pendant qu’on le tape, et ouvre un aperçu de toutes les lignes touchées. C’est la meilleure protection contre une substitution trop large.

smartindent est délibérément absent. treesitter fournit l’indentation, et les deux se battent : smartindent applique ses propres règles par-dessus l’arbre syntaxique et produit des décalages incohérents dans les langages à accolades.

Les touches fournies par Neovim 0.12

Cette liste a été vérifiée avec nvim --clean. Aucune n’est redéfinie par la configuration, et c’est le principal moyen de garder keymaps.lua à soixante lignes.

ToucheAction
Kdocumentation du symbole
grnrenommer
graactions de code
grrréférences
griimplémentations
grtdéfinition de type
gOsymboles du document
Ctrl + saide de signature (mode insertion)
]d / [ddiagnostic suivant / précédent
]D / [Dpremier / dernier diagnostic du buffer
Ctrl + w ddiagnostic sous le curseur, en flottant
]q / [qentrée quickfix suivante / précédente
]b / [bbuffer suivant / précédent
gcc / gccommenter une ligne / un mouvement ou une sélection
Le réflexe à prendre avant d’ajouter un mapping

Lancer nvim --clean, essayer la touche. La moitié des lignes qu’on s’apprête à écrire existent déjà — et écraser un natif par inadvertance fait perdre un comportement qu’on n’avait pas remarqué.

Les touches ajoutées

<leader> est espace, en global comme en local.

ToucheModeAction
gdnaller à la définition — le seul mapping LSP absent du natif
sn, x, osaut flash étiqueté, n’importe où à l’écran
Ctrl + h Ctrl + j Ctrl + k Ctrl + lnchanger de fenêtre, sans le préfixe Ctrl + w
]f / [fn, x, ofonction suivante / précédente
]c / [cn, x, oclasse suivante / précédente
]h / [hnbloc git suivant / précédent

Objets texte

ToucheModePortée
af / ifx, ola fonction / son corps
ac / icx, ola classe / son corps
aa / iax, ol’argument, avec / sans sa virgule

Ils suivent la convention native a / i, donc ils se combinent avec n’importe quel opérateur : daf supprime la fonction, yic copie le corps de la classe, cia change l’argument.

Édition

ToucheModeAction
<leader>wnenregistrer
<leader>fn, xformater à la demande
J / Kxdéplacer la sélection vers le bas / le haut, en réindentant
< / >xréindenter en conservant la sélection
<Esc>ncouper le surlignage de recherche
<Esc><Esc>tquitter le mode insertion du terminal
<leader>thnbasculer les inlay hints

Recherche et fichiers

ToucheModeAction
<leader>pnrechercher un fichier
<leader><space>nrechercher parmi les buffers ouverts
<leader>/ngrep dans le projet
<leader>sdndiagnostics de l’espace de travail
<leader>ssnsymboles du document
<leader>hpnaperçu du bloc git
Ctrl + fnexplorateur, en barre latérale
Ctrl + tnexplorateur, en flottant

Ce qui a été sacrifié

Tout mapping ajouté sur une touche existante en supprime une. Assumer la liste vaut mieux que la découvrir un jour où on en avait besoin.

ToucheComportement perduRemplacement
ssubstitute — supprimer un caractère et passer en insertioncl
Ctrl + fpage suivanteCtrl + d deux fois
Ctrl + tdépiler la pile de tagsCtrl + o
]c / [cdéplacements de diffdo / dp restent
J (visuel)joindre les lignes sélectionnéesJ en mode normal, avec un compteur
Ctrl + h Ctrl + j Ctrl + k Ctrl + lrien d’utile en normal—

J en mode visuel est le seul cas qui demande un peu d’attention : joindre trois lignes se fait avec 3J depuis le mode normal, la sélection visuelle n’étant plus disponible pour ça.

Les automatismes

Deux autocommandes, dans keymaps.lua :

TextYankPost surligne brièvement ce qui vient d’être copié. Ce n’est pas cosmétique — c’est le seul retour visuel qui confirme l’étendue réelle d’un y, et ça évite de découvrir au collage qu’on avait copié une ligne de trop.

TermOpen retire les numéros de ligne et la colonne de signes des buffers de terminal, où ils n’apportent rien et cassent le copier-coller depuis l’extérieur.