2009-06-29 30 views
6

Si quiero todas las líneas con el texto 'ruby' pero no 'myruby', entonces esto es lo que haría.Explicación de expresiones regulares para vim

:g/\<ruby\>/ 

Mi pregunta es ¿cuál es el significado de menor que y mayor que el símbolo aquí? La única expresión regular que he usado es durante la programación en ruby.

Del mismo modo, si quiero encontrar tres líneas en blanco consecutivos, entonces esto es lo que haría

/^\n\{3} 

Mi pregunta es por eso que estoy escapando de la primera llave de cierre (apertura de llave de cierre), pero no se escape el segundo rizado corsé (cierre de la llave)

Respuesta

13

\< y \> significan límites de palabras. En Perl, grep y less (para nombrar 3 OTOH) usa \b para esto, así que me imagino que es lo mismo en Ruby.

En relación con su 2da pregunta, el escape es necesario para toda la expresión {3}. No estás escapando de cada llavero, sino más bien todo junto.

Ver this question para más.

0

Para su primera expresión regular, también se puede hacer:

:g/[^\ ]ruby\/

Esto aseguraría que había un espacio antes y después de su palabra clave rubí.

+3

pero eso no coincidiría con 'ruby' al principio o al final de una línea. –

+0

@Nathan Buen punto ... – samoz

+0

ni 'un rubí hermoso.', Ni 'robó este rubí, entonces' ... –

16

Las reglas de Vim para la barra invertida que se escapa en expresiones regulares no son consistentes. Debe escapar del corsé de apertura de \{...}, pero [...] no requiere escaparse en absoluto, y un grupo de captura es \(...\) (escapa tanto para abrir como para cerrar paren). También hay otras incoherencias.

Afortunadamente, Vim le permite cambiar este comportamiento, incluso en función de la expresión regular por rex, a través de la configuración magic. Si coloca \v al comienzo de una expresión regular, las reglas de escape se vuelven más consistentes; todo es "mágico", excepto números, letras y guiones bajos, por lo que no es necesario usar barras diagonales inversas, a menos que desee insertar un carácter literal que no sea ese.

Su primer ejemplo se convierte en :g/\v<ruby>/ y su segundo ejemplo se convierte en /\v^\n{3}. Consulte :h /magic y :h /\v para obtener más información.

+2

Puedes 'configurar magia' en tu vimrc para tener siempre el modo mágico. Por cierto, creo que una expresión 'mágica' comienza por \ m y no por \ v \ v significa 'sin magia' – Oli

+0

No, en realidad \ v significa "muy mágico". Lo que significa que todos los caracteres ASCII excepto '0' - '9', 'a' - 'z', 'A' - 'Z' y '_' tienen un significado especial para que no tengan que escaparse. – binOr

Cuestiones relacionadas