2009-07-23 5 views
6

Je veux trouver une ligne qui a 'foo' et 'bar' dans cet ordre mais pas nécessairement l'un à côté de l'autre.Comment puis-je rechercher dans vim une ligne qui a 2 mots spécifiques?

J'ai essayé ce qui suit et cela n'a pas fonctionné:

/foo.*bar 
+3

Peut-être que votre problème est le paramètre « magique ». Lire: aidez la 'magie' et: réglez la magie? pour voir si c'est le problème. – spatz

+0

c'était ça ... qu'est-ce que la magie? –

Répondre

11

Utilisation:

:set magic 
/foo.*bar 

Le réglage 'magique' détermine comment VIM traite les caractères spéciaux dans les expressions régulières. Lorsqu'il est désactivé, VIM traite tous les caractères littéralement, ce qui signifie que l'expression que vous avez écrite foo.*bar recherchera réellement cette chaîne. Cependant, lorsque 'magic' est activé, les caractères spéciaux regex prennent leur signification spéciale et fonctionnent plus comme vous le souhaitez. Il est recommandé de toujours utiliser :set magic sauf s'il s'agit de scripts Vi très anciens, il suffit donc de l'ajouter à votre vimrc et vous serez configuré.

+0

Je suis assez sûr que c'est un défaut de nos jours (au moins mon vim sur Windows). –

+1

Je suis d'accord, c'est aussi la valeur par défaut, mais je ne sais pas pourquoi cela n'a pas été fait pour Sasha - peut-être utilise-t-il une version plus ancienne ou appelle-t-il vi au lieu de vim? – spatz

5

Works pour moi:

/text.*text2 
+1

Fonctionne aussi pour moi –

+1

Ditto; insensible à la casse: /FOO.*BAR\c –

+0

Malheureusement "travaille pour moi" ne donne pas de raison (s) pourquoi ou cause probable (s). – crw

Questions connexes