2009-04-24 11 views
97

noto la sintaxis de expresiones regulares estándar de juego a través de múltiples líneas es usar/s, así:multilínea en Vim

This is\nsome text 
/This.*text/s 

Esto funciona en Perl, por ejemplo, pero no parece estar apoyado en Vim. En su lugar, tengo que ser mucho más específico:

/This[^\r\n]*[\r\n]*text/ 

No puedo encontrar ninguna razón de por qué esto debería ser, así que estoy pensando que probablemente sólo se perdió los bits correspondientes en la ayuda vim.

¿Alguien puede confirmar este comportamiento de una forma u otra?

Respuesta

150

Sí, el modificador //s de Perl no está disponible en las expresiones regulares de Vim. Consulte :h perl-patterns para obtener detalles y una lista de otras diferencias entre las expresiones regulares de Vim y Perl.

En su lugar, puede usar \_., lo que significa "coincidir con cualquier carácter, incluida la nueva línea". Es un poco más corto que lo que tienes. Ver :h /\_..

/This\_.*text/ 
+2

http://blog.vinceliu.com/2007/12/regular-expression-matching-more-than.html –

+2

Niza - mi vida está un poco más fácil. He estado haciendo (. | \ N) * – ojrac

+2

¿Qué hace la barra diagonal en el ': h/\ _.' Hacer? Quiero decir, sé que funciona, pero ¿por qué ': h/\ _.' Funciona, y no ': h \ _.'? – Eddified