2009-04-24 11 views
97

Je remarque la syntaxe standard regex pour sur plusieurs lignes est d'utiliser/s, comme ceci:support regex multi-ligne dans vim

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

Cela fonctionne en Perl, par exemple, mais il ne semble pas être soutenu dans Vim. Au lieu de cela, je dois être beaucoup plus précis:

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

Je ne peux trouver aucune raison pour laquelle cela devrait être, donc je pense que je probablement manqué les bits sur l'aide de vim.

Quelqu'un peut-il confirmer ce comportement dans un sens ou dans l'autre?

Répondre

150

Oui, le modificateur Perl //s n'est pas disponible sur les expressions rationnelles Vim. Voir :h perl-patterns pour les détails et une liste d'autres différences entre Vim et Perl regexes.

A la place, vous pouvez utiliser \_., ce qui signifie "correspondre à n'importe quel caractère, y compris le retour à la ligne". C'est un peu plus court que ce que tu as. Voir :h /\_..

/This\_.*text/ 
+2

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

+2

Nice - ma vie juste un peu plus facile. Je faisais (. | \ N) * – ojrac

+2

Que fait la barre oblique dans le ': h/\ _.' Je veux dire, je sais que ça marche, mais pourquoi ': h/\ _.' Fonctionne, et pas ': h \ _.'? – Eddified