2008-12-12 5 views
92

J'utilise les plugins vim et vim pour Visual Studio lors de l'écriture en C++. Souvent, je me trouve vouloir chercher une chaîne dans une fonction, par exemple chaque appel à object->public_member.memberfunc().Rechercher une sélection dans vim

Je sais vim offre un moyen pratique de rechercher un seul mot, en appuyant sur * et #, et il peut également rechercher des chaînes dactylographiées en utilisant 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 /.

est-il un moyen de recherche pour la sélection? Par exemple, mettre en surbrillance avec v, puis copier avec y, est-il un moyen de coller après /? Y a-t-il un raccourci plus facile?

+0

double possible de [Comment rechercher pour le texte sélectionné?] (Http://stackoverflow.com/questions/8587136/how-do-i-search-pour-le-texte-sélectionné) – acm

Répondre

141

Vérifiez cette astuce Vim: Search for visually selected text

Ou vous pouvez simplement tirer sur le texte sélectionné avec y et passer en mode recherche /, vous pouvez coller le dernier texte yanked avec Ctrl + R 0

+1

Très cool. CMS = rapide + détaillé. – Marcin

+3

@CMS. Merci. Bon conseil! Utiliser: reg pour voir ce qu'il y a dans vos registres et ensuite utiliser cntl-R N pour obtenir ce qui est dans le registre N est excellent! –

+0

@Rob & @ Marcin, vous êtes les bienvenus, heureux Vimming! – CMS

35

Utilisez q/ au lieu de simplement /. (Idem avec q:). Maintenant, vous pouvez modifier VIM à travers votre commande et l'historique de recherche! (Essayez Ctrl-N et Ctrl-P parfois).

+1

+ 1 Astuce intéressante! Pas vraiment lié, mais toujours très utile. – Marcin

+4

Après avoir vu la réponse de Cory Klein, j'ai remarqué que j'avais tort de ne pas le savoir. Cela rend l'ensemble du processus un peu plus rapide pour moi. (Pas de touche Ctrl nécessaire!) – Marcin

66

En s'appuyant sur la réponse d'arcanex, voici encore une autre façon de faire ce que vous voulez.

  1. Yank le texte que vous souhaitez rechercher
  2. q/p
  3. Entrez

Explication

q/ fonctionne de manière similaire à la recherche vanille / sauf que vous êtes en mode de commande, donc p fait réellement "coller" au lieu de taper le caractère p. Donc, ce qui précède va tirer les caractères que vous recherchez, puis les coller dans une recherche.

(voir :help q/)

+3

J'aime celui-ci, parce que je trouve que si peu pratique. – Jan

+0

Excellent! En utilisant emacs dans 'evil-mode', cela fonctionne réellement, alors que la réponse acceptée rompt lamentablement (probablement à cause de l'utilisation de la touche' Ctrl'). – eestrada

+1

Idéal pour les chaînes simples, mais n'échappe pas aux caractères spéciaux regex, comme indiqué dans [commentaire de cette autre réponse] (http://stackoverflow.com/questions/363111/search-for-selection-in-vim#comment44689091_14747639). – Bluu

2

Vous pouvez réellement choisir visuellement le texte et appuyez sur * et # pour rechercher l'occurrence suivante ... Il fonctionnera de la même, la seule réserve est que:

Les espaces dans la sélection correspondent à n'importe quel espace 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

+2

pour moi, en sélectionnant le texte visuellement, puis en appuyant sur * étend juste ma sélection visuelle. –

+0

Vous ne pouvez pas par défaut sauf si vous mettez dans vimrc le mappage de la page .. – Ayrat

9

Je viens d'apprendre (par l'excellent livre pratique Vim) qu'il ya un plugin pour cela. Vous pouvez trouver le plugin on GitHub. Le plugin vous permet de rechercher une sélection visuelle avec * et #.

+4

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, selon le paramètre 'magic' actuel. Cela pourrait même faire échouer la recherche pour les métacaractères nécessitant un équilibrage. Le plugin mentionné ici va s'échapper avant de chercher le texte sélectionné. –

+0

cela fonctionne, mais malheureusement, vous ne pouvez pas utiliser 'n' pour aller au prochain élément trouvé, tandis que les approches de Cory et CMS permettent .. – Ayrat

-1

Mettez en surbrillance le texte avec v et utiliser // à la recherche.

Vous pouvez ainsi tirer sur le texte sélectionné à l'aide y puis coller à l'aide p

+0

non,' v // 'ne fonctionne pas pour moi - il développe le texte sélectionné encore plus.. – Ayrat