2009-06-29 6 views
6

Si je veux toutes les lignes avec le texte 'ruby' mais pas 'myruby' alors c'est ce que je ferais.Explication de l'expression rationnelle pour vim

:g/\<ruby\>/ 

Ma question est quelle est la signification de moindre que et plus grand que le symbole ici? La seule expression régulière que j'ai utilisée est la programmation en ruby.

De même, si je veux trouver trois lignes vides consécutives alors c'est ce que je ferais

/^\n\{3} 

Ma question est pourquoi je fuis la première accolade (ouverture accolade), mais pas échapper à la seconde bouclés attelle (accolade de fermeture)?

Répondre

13

les limites de mots \< et \>. En Perl, grep et less (pour nommer 3 OTOH) vous utilisez \b pour cela, donc j'imagine que c'est la même chose dans Ruby.

En ce qui concerne votre 2ème question, l'échappement est nécessaire pour toute l'expression {3}. Vous n'échappez pas à chaque accolade, mais plutôt au tout ensemble.

Voir this question pour plus d'informations.

0

Pour votre première expression régulière, vous pouvez aussi le faire:

:g/[^\ ]ruby\/

Cela permettrait d'assurer qu'il y avait un espace avant et après votre mot-clé rubis.

+3

mais cela ne correspondrait pas à 'ruby' au début ou à la fin d'une ligne. –

+0

@Nathan Bon point ... – samoz

+0

ni 'un beau rubis.', Ni 'volé ce rubis, alors' ... –

16

Les règles de Vim pour l'échappement à barre oblique inverse dans les expressions régulières ne sont pas cohérentes. Vous devez échapper à l'accolade d'ouverture de \{...}, mais [...] ne nécessite aucun échappement, et un groupe de capture est \(...\) (échappant à la fois ouvrir et fermer paren). Il y a aussi d'autres incohérences.

Heureusement Vim vous permet de modifier ce comportement, même sur une base regex-par-regex, via les paramètres magic. Si vous mettez \v au début d'une regex, les règles d'échappement deviennent plus cohérentes; tout est "magique" à l'exception des chiffres, des lettres et des traits de soulignement, de sorte que vous n'avez pas besoin de barres obliques inverses sauf si vous voulez insérer un caractère littéral autre que ceux-ci.

Votre premier exemple devient alors :g/\v<ruby>/ et votre deuxième exemple devient /\v^\n{3}. Voir :h /magic et :h /\v pour plus d'informations.

+2

Vous pouvez 'mettre de la magie' sur votre vimrc pour toujours avoir le mode magique. Par ailleurs, je pense qu'une expression 'magique' est commencée par \ m et non par \ v \ v signifie 'pas de magie' – Oli

+0

Non, en fait \ v signifie "très magique". Ce qui signifie que tous les caractères ASCII sauf '0' - '9', 'a' - 'z', 'A' - 'Z' et '_' ont une signification spéciale, donc ils n'ont pas besoin d'être échappés. – binOr

Questions connexes