2013-05-28 2 views
2

Lorsque je lisais le fichier journal en utilisant VIM, je veux rechercher plusieurs mots, donc le plus simple est de sélectionner visuellement ces mots, et appuyez sur une touche pour que VIM puisse rechercher les mots que j'ai sélectionnés.Rechercher à partir de Visual Select dans VIM?

Mais comment faire ça ..?

Merci beaucoup

+0

Recherchez-vous les mots dans le même ordre que ceux qui ont été sélectionnés, en tant que phrase ou parmi les mots sélectionnés? C'est à dire. sélectionner 'the foo was named bar' et rechercher avec, trouverait seulement la même phrase, pas des phrases contenant' the/foo/was/named/bar'? – timss

+0

Vous voulez dire comme '*'? – Kevin

+0

@timss: oui recherche exactement ce qui est sélectionné; – songyy

Répondre

5

Cela a été expliqué dans Search for selection in vim.

  1. Sélectionnez le texte à l'aide d'une sélection visuelle, par ex. v
  2. Yank il, y
  3. Recherche, /
  4. Collez le dernier texte yanked à l'aide <C-r>0 (Ctrlr +)
    inserts En fait, le contenu du registre 0, voir :h i_ctrl-r (merci à romainl dans le comments)

Un autre exemple utilise la ligne de commande:

  1. Sélectionnez le texte à l'aide d'une sélection visuelle, par exemple v
  2. Yank il, y
  3. Entrer en mode ligne de commande avec l'édition d'une commande Ex, q/
  4. Coller texte yanked, p, et la recherche en appuyant sur Enter

En bref: yq/p<Enter>

+0

Je n'arrive pas à trouver ce que Ctrl-r 0 signifie réellement, sauf qu'il colle le dernier texte saisi. ': h Ctrl-r' me dit que c'est lié à' refaire ', mais est-ce exact? Quelqu'un pourrait-il expliquer comment cela fonctionne ou peut-être me pointer vers la bonne section d'aide si ce n'est pas refaire? – timss

+2

En mode insertion, ' 0' est utilisé pour insérer le contenu du registre 0. Vous pouvez également insérer le résultat d'une expression:' = 2 + 57 ',' = expand ('%') ', etc. Lisez ': h i_ctrl-r'. Notez le 'i_' pour les commandes en mode insertion. – romainl

+1

@romainl Merci. J'ai mis à jour ma réponse aussi. – timss

0

Pour rechercher plus d'un mot à la fois, la recherche vim prend en charge ou '\ |'. Donc, pour rechercher chien chat et oiseau, vous pouvez:

/dog\|cat\|bird 

ou mieux (match de mot exact):

/\<dog\>\|\<cat\>\|\<bird\> 
2

Bairui/Dahu de SearchParty a quelques applications astucieuses qui construisent sur le « coup sec et insérer la méthode » mais traiter proprement avec des sauts de ligne et autres:

* Searches for the next occurrence of the currently selected visual text. 

# Searches for the prior occurrence of the currently selected visual text. 

& Starts a :substitute using the currently selected visual text. 

Si vous vous sentez un plug-in est surpuissant, il est facile de tirer sur la ligne correspondante du script et le mettre dans votre ~/.vimrc.

0

Oh, mon pote, vous pouvez réellement utiliser le puissant Visual Search origine par l'auteur du livre pratique Vim. C'est très léger!

Il suffit d'ajouter des choses suivantes dans votre vimrc,

xnoremap * :<C-u>call <SID>VSetSearch()<CR>/<C-R>[email protected]/<CR><CR> 
xnoremap # :<C-u>call <SID>VSetSearch()<CR>?<C-R>[email protected]/<CR><CR> 

function! s:VSetSearch() 
    let temp = @s 
    norm! gv"sy 
    let @/ = '\V' . substitute(escape(@s, '/\'), '\n', '\\n','g') 
    let @s = temp 
endfunction 

visuelle sélectionner le contenu que vous voulez faire la recherche, puis appuyez sur la touche étoile*, voilà!

Questions connexes