web-dev-qa-db-fra.com

Existe-t-il une commande dans Vim / Vi pour déplacer le curseur à la fin d'une surbrillance de recherche?

Existe-t-il des commandes dans Vim/Vi pour se déplacer dans un segment de recherche sélectionné?

Par exemple, si je recherche un mot, y a-t-il des commandes pour déplacer le curseur à la fin du segment en surbrillance? Disons que j'ai un mot, "FishTaco" et je veux rechercher toutes les instances de "Fish" et insérer quelque chose après. Je sais que je pourrais effectuer un remplacement global, mais que se passe-t-il si je souhaite effectuer la modification uniquement dans quelques instances non séquentielles?

Je pouvais voir où il serait pratique de pouvoir déplacer le curseur à la fin du segment actuellement sélectionné pour effectuer une action.

80
Jordan Parmer

Vous pouvez le faire avec ceci:

/Fish/e

Le /e à la fin pose votre curseur à la fin de la zone de recherche (au lieu du premier caractère par défaut.

117
Tim

Si vous souhaitez simplement placer votre curseur après le dernier caractère de Fish, vous pouvez utiliser

/Fish/e+1

ce qui placera votre curseur après le h. (Sans le +1 le curseur se terminera à gauche du dernier caractère.)

Si vous êtes particulièrement intéressé à placer le curseur après Fish, mais uniquement lorsqu'il apparaît dans "FishTaco", vous pouvez essayer l'une des options suivantes:

Vous pouvez utiliser

/FishTaco/s+4

et votre curseur se retrouvera entre Fish et Taco. Le /s+4 place le curseur 4 places après le début du terme de recherche.

Vous pouvez également utiliser

/FishTaco/e-3

ce qui placera votre curseur 3 places à gauche du côté gauche du dernier caractère (de fin).

Vous pouvez aussi utiliser

/FishTaco/b+4 

car /b+4 sera traité comme /s+4.

73
ghbarratt

Si vous avez déjà recherché /Fish, vous pouvez rapidement changer la recherche pour aller à la fin du match via //e, qui répète la dernière recherche, mais ajoute le modificateur e qui a déjà été expliqué.

24
Ingo Karkat

Une fois que vous avez une sélection visuelle, vous pouvez utiliser o pour basculer la position du curseur entre le début et la fin du bloc sélectionné. Lorsque la sélection est en ligne, cela bascule la position ligne, ce qui signifie que le curseur se déplace vers la ligne de début et de fin de la sélection, mais pas vers le caractère de début ou de fin. Lorsque la sélection est basée sur le caractère, le mouvement l'est également.

Vous pouvez aussi utiliser `< et `> pour basculer le curseur entre le début et la fin du bloc visuel, mais cela affecte la sélection elle-même, il est donc utilisé pour réinitialiser ou ajuster les limites de la sélection.

Edit: Ah, mais pour les surlignages de recherche, cela ne fonctionnera pas, car o lancera une insertion de ligne. Je suppose que la mise en évidence de la recherche n'est pas la même chose qu'une sélection visuelle, désolé :)

11
kprobst

/ long-regexp1 \zs long-regexp2 /.. le curseur s'arrêtera à\zs, voir: help\zs

10
mosh

La partie "curseur à la fin du match" de votre question est déjà répondue.

Tu peux faire :%s/Fish/FishTaco/c. Cela vous donne la possibilité de confirmer ou de rejeter chaque substitution et d'ignorer l'intégralité de l'activité "curseur à la fin du match".

8
romainl