Surligner un terme de recherche sans déplacer le curseur

15

En utilisant Vim, je me retrouve parfois à regarder une section de code source pendant un certain temps et je veux soudainement qu'une variable à l'écran apparaisse. C'est simple: /<var>ce qui les met tous en valeur. Mon problème est que le plus souvent, la recherche déplace ma fenêtre, donc je ne regarde pas le code source du même endroit. Même si ce n'est que quelques lignes décalées, cela me décourage encore car j'ai besoin de prendre quelques secondes pour comprendre où les choses se sont déplacées.

Est-il possible de mettre en évidence un terme de recherche sans déplacer le curseur sur la correspondance suivante?

Andrew Wood
la source
2
Pas exactement une réponse, mais j'utilise simplement deux backticks (``) pour sauter là où j'étais avant.
Izkata

Réponses:

1

http://vim.wikia.com/wiki/VimTip1572

Si vous avez utilisé ce plugin, vous pouvez simplement activer la fonctionnalité

\ m

puis utilisez une touche du pavé numérique pour attribuer une couleur à ce mot partout sans déplacer votre curseur.

1

Vous pouvez utiliser de nombreux surlignages différents à la fois pour de nombreux mots différents, ou des modèles de recherche plus complexes si vous le souhaitez.

lessthanideal
la source
J'adore ce plugin!
Andrew Wood
15

La réponse de skyblue montre l'essentiel de l'idée d'utiliser la surbrillance de recherche normale pour accomplir ce que vous voulez.

J'ai étendu cette technique en créant une liaison de touches qui fonctionne de manière similaire à la *commande , mais sans passer réellement à la correspondance suivante.

Mes remerciements vont à garyjohn pour avoir souligné l' expand()équivalent de *la sélection de mots de (pour éviter de s'utiliser* et de restaurer la vue). Cela simplifie suffisamment le code pour qu'il puisse aller directement dans le mappage (évite l'utilisation d'une fonction). J'ai également ajouté un mappage qui correspond à des mots partiels (comme g*).

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>
Chris Johnsen
la source
1
Vous pouvez éviter les appels à winsaveview (), winrestview () et normal *en remplaçant let @/ = @/par let @/ = expand("<cword>").
garyjohn
@garyjohn: Oui, c'est mieux. Je n'étais pas sûr qu'il y ait quelque chose d'équivalent à la sélection de «mots» faite par *, mais <cword>c'est bien.
Chris Johnsen
13

Vous pouvez également définir le registre de recherche sur la variable que vous souhaitez faire correspondre.

Tout d'abord, assurez-vous que la mise en surbrillance de la recherche est activée:

:set hlsearch

Ensuite, vous pouvez définir le registre de recherche avec:

:let @/="variable"

Cela mettra en évidence toutes les occurrences de variable sans passer à la correspondance suivante.

Pour plus d'informations, voir :help @/


la source
7

Une façon consiste à utiliser la :matchcommande, par exemple,

:match Question '^R^W'

Cela mettra en surbrillance le mot sous le curseur à l'aide du groupe de surbrillance Question. J'utilise souvent le groupe Question car sur mon terminal c'est un joli vert. Pour voir les groupes de surbrillance disponibles, exécutez

:hi

Les symboles ^Ret ^Wsont Ctrl-R et Ctrl-W, respectivement, et sont remplacés par le mot sous le curseur. Voir

:help c_CTRL-R_CTRL-W

pour en savoir plus. Voir

:help :match

pour en savoir plus sur la :matchcommande. Pour effacer cette surbrillance, exécutez simplement

:match

sans arguments.

garyjohn
la source
1

En plus de:

 :set hlsearch

Vous voudrez peut-être:

 : set noincsearch
therube
la source
0

Semblable à *nous avons:

[I ............................. it show where the word under the cursor appears

Cela vaut la peine d'y jeter un coup d'œil :h [I. nous y trouvons des choses intéressantes liées à vos besoins.

Il y a une question similaire sur stackoverflow où je mets ma réponse (un peu plus complète)

SergioAraujo
la source