Rechercher une sélection dans vim

107

J'utilise des plugins vim et vim pour Visual Studio lors de l'écriture de C ++. Souvent, je souhaite rechercher une chaîne dans une fonction, par exemple chaque appel à object->public_member.memberfunc().

Je sais que vim offre un moyen pratique de rechercher un seul mot, en appuyant sur *et #, et il peut également rechercher des chaînes tapées à l'aide de la /commande slash omniprésente . Lorsque vous essayez de rechercher toutes les instances d'une chaîne plus longue comme celle ci-dessus, il faut un certain temps pour retaper après /.

Existe-t-il un moyen de rechercher une sélection? Par exemple, mettez en surbrillance avec v, puis copiez avec y, y a-t-il un moyen de coller après /? Existe-t-il un raccourci plus simple?

Marcin
la source

Réponses:

154

Vérifiez cette astuce Vim: recherchez du texte sélectionné visuellement

Ou vous pouvez simplement copier le texte sélectionné avec y et aller en mode recherche / , puis vous pouvez coller le dernier texte extrait avec Ctrl + R 0

CMS
la source
4
@CMS. Merci. Bon conseil! Utiliser: reg pour voir ce qu'il y a dans vos registres puis utiliser cntl-R N pour obtenir ce qu'il y a dans le registre N est excellent!
Rob Wells
85

Répondre

  1. Copiez le texte que vous souhaitez rechercher
  2. q/p
  3. Enter

Explication

q/fonctionne de la même manière que la recherche vanille, /sauf que vous êtes en mode commande, donc p"coller" au lieu de taper le caractère p. Ainsi, ce qui précède va copier le texte que vous recherchez et le coller dans une recherche.

Pour plus de détails, tapez :help q/

Cory Klein
la source
4
J'aime celui-ci, car je trouve que taper <ctrl-r> n'est pas pratique.
janvier
Excellent! En utilisant emacs evil-mode, cela fonctionne réellement, alors que la réponse acceptée se brise misérablement (probablement à cause de l'utilisation de la Ctrlclé).
eestrada
2
Idéal pour les chaînes simples, mais n'échappe pas aux caractères spéciaux regex, comme indiqué dans le commentaire de cette autre réponse .
Bluu
1
Et vous n'avez même pas besoin de le tirer. Sélectionnez-le sur le visuel q/gvpgv
1
@nwildner, q/gvpne fonctionne pas pour moi. Pouvez-vous clarifier votre suggestion?
bam le
38

Utilisez q / au lieu de seulement / . (Même avec q : ). Vous pouvez maintenant éditer VIM via votre historique de commandes et de recherche! (Essayez Ctrl-N et Ctrl-P parfois).


la source
10

Je viens d'apprendre (grâce à l'excellent livre Practical Vim ) qu'il existe un plugin pour ça. Vous pouvez trouver le plugin sur GitHub .

Le plugin vous permet de rechercher une sélection visuelle avec *et #.

cutemachine
la source
5
Notez que les autres réponses n'échappent pas. En utilisant ces méthodes, les métacaractères sélectionnés ne seront pas recherchés littéralement, en fonction du magicparamètre actuel . Cela pourrait même entraîner l'échec de la recherche des métacaractères nécessitant un équilibrage. Le plugin mentionné ici fera un échappement avant de rechercher le texte sélectionné.
Kurt Hutchinson
1
cela fonctionne, mais malheureusement, vous ne pouvez pas utiliser npour aller à l'élément trouvé suivant, alors que les approches de Cory et de CMS le permettent ..
Ayrat
2

Vous pouvez en fait sélectionner du texte visuellement et appuyer sur * et # pour rechercher l'occurrence suivante ... Cela fonctionnera de la même manière, la seule mise en garde est que:

Les espaces dans la sélection correspondent à tous les espaces, lors de la recherche (la recherche de "hello world" trouvera également "hello" à la fin d'une ligne, avec "world" au début de la ligne suivante).

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

AhHatem
la source
2
pour moi, sélectionner le texte visuellement puis appuyer sur * étend simplement ma sélection visuelle.
martin jakubik
Vous ne pouvez pas par défaut sauf si vous mettez dans vimrc le mappage de la page ..
Ayrat