Déplacements
Palier1 Les déplacements — les
motions — ne servent pas qu’à bouger le curseur : ce sont eux qui délimitent la
portion de texte sur laquelle un opérateur va agir. Chaque motion apprise ici est
donc aussi une cible pour d, c ou y.
L’objectif du palier n’est pas de connaître cette page par cœur, c’est de ne plus jamais toucher les flèches.
Caractères et lignes
h,j,k,l: gauche, bas, haut, droite0: premier caractère de la ligne^: premier caractère non-blanc de la ligne$: fin de la ligneg_: dernier caractère non-blanc de la ligne+/-: premier caractère non-blanc de la ligne suivante / précédente
Avec wrap activé, j et k sautent la ligne logique entière ; gj et gk se
déplacent d’une ligne affichée à l’écran.
La numérotation relative
relativenumber affiche la distance de chaque ligne au curseur au lieu de son
numéro absolu. On lit alors directement le compteur à taper : la ligne à effacer
est marquée « 7 », donc 7dd. C’est l’option qui rend les compteurs utilisables
sans compter.
Mots
Neovim distingue le mot — une suite de caractères alphanumériques, découpée par
la ponctuation — du MOT en majuscules, simplement délimité par des espaces.
foo.bar compte pour trois mots, mais un seul MOT.
w/W: début du mot / MOT suivante/E: fin du mot / MOT suivantb/B: début du mot / MOT précédentge/gE: fin du mot / MOT précédent
Dans la ligne
f{char}: saute sur la prochaine occurrence du caractèreF{char}: idem en arrièret{char}: s’arrête juste avant la prochaine occurrence (till)T{char}: idem en arrière;: répète le dernierf,F,touT,: le répète dans le sens inverse
Ce sont les deux touches les plus rentables de tout Vim. dt) — supprimer jusqu’à
la parenthèse fermante — ou cf, — changer jusqu’à la virgule — remplacent la
moitié des sélections à la souris qu’on faisait avant.
Phrases, paragraphes et blocs
(/): début de la phrase précédente / suivante{/}: paragraphe précédent / suivant, c’est-à-dire le prochain saut de ligne vide%: saute sur la parenthèse, l’accolade ou le crochet correspondant[{/]}: début / fin du bloc entre accolades qui contient le curseur[(/]): idem pour les parenthèses
Dans du code, } est le déplacement vertical le plus efficace : il saute de bloc
en bloc plutôt que de ligne en ligne.
Écran
H,M,L: haut, milieu, bas de l’écran (high, middle, low)Ctrl + d/Ctrl + u: descend / monte d’une demi-pageCtrl + f/Ctrl + b: descend / monte d’une page entièreCtrl + e/Ctrl + y: fait défiler d’une ligne sans bouger le curseurzz,zt,zb: recentre l’écran sur le curseur, l’amène en haut, en bas
Ctrl + d puis zz est un enchaînement courant : on descend, on recentre, on
garde le contexte des deux côtés. L’option scrolloff évite d’avoir à le faire en
maintenant en permanence quelques lignes visibles autour du curseur.
Fichier
gg: première ligneG: dernière ligne{n}Gou:{n}: ligne n{n}%: à n % du fichier
Revenir sur ses pas
Neovim tient une liste des sauts — tout déplacement « lointain » comme G, %,
une recherche ou l’ouverture d’un fichier — et une liste des modifications.
Ctrl + o: recule dans la liste des sautsCtrl + i: avance dans la liste des sautsg;/g,: recule / avance dans la liste des modifications`` : revient à la position d’avant le dernier saut'': idem, mais sur le premier caractère non-blanc de la ligneCtrl + ^: bascule sur le buffer précédent
:jumps et :changes affichent ces deux listes. Ctrl + o est la touche qui rend
la navigation agressive sans risque : on saute au loin, on regarde, on revient.
Dans ma config
Trois différences, toutes dues à des plugins :
f,F,t,Tfranchissent les lignes et étiquettent chacune de leurs correspondances : une seconde frappe atteint n’importe laquelle d’entre elles, pas seulement la plus proche.;et,répètent comme d’habitude. Les étiquettes disparaissent dès qu’un compteur est donné, donc3fxreste littéral.sest un saut étiqueté n’importe où à l’écran, et n’est donc plussubstitute— son équivalentclreste disponible.gdva à la définition via le serveur de langage, et]f/[f,]c/[csautent de fonction en fonction et de classe en classe. Ces déplacements alimentent la liste des sauts, doncCtrl + oles annule.
scrolloff = 8 garde huit lignes de contexte, et relativenumber est actif.
Détails dans Ma configuration.
Aller à la définition, sans LSP
gd et gD sont les commandes historiques : elles cherchent la déclaration du
mot sous le curseur dans la fonction courante, puis dans le fichier, par simple
recherche textuelle. Dès qu’un serveur LSP est attaché, Ctrl + ] donne le vrai
saut vers la définition.