Vim'de çok satırlı normal ifade desteği


117

Birden çok satırda eşleştirme için standart normal ifade sözdiziminin / s kullanılması olduğunu fark ettim, örneğin:

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

Bu örneğin Perl'de çalışıyor ancak Vim'de desteklenmiyor gibi görünüyor. Bunun yerine, çok daha spesifik olmalıyım:

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

Bunun neden olması gerektiğine dair herhangi bir neden bulamıyorum, bu yüzden muhtemelen vim yardımındaki ilgili kısımları kaçırdım.

Bu davranışı öyle ya da böyle doğrulayan var mı?

Yanıtlar:


177

Evet, Perl'in //sdeğiştiricisi Vim regex'lerinde kullanılamaz. :h perl-patternsVim ve Perl normal ifadeleri arasındaki ayrıntılar ve diğer farklılıkların bir listesi için bakın .

Bunun yerine \_."satırsonu dahil herhangi bir tek karakterle eşleş" anlamına gelir. Sahip olduklarınızdan biraz daha kısa. Bakın :h /\_..

/This\_.*text/

4
Güzel - hayatım biraz daha kolaylaştı.
Yapıyordum

2
İleriye doğru eğik çizgi ne yapar :h /\_.? Demek istediğim, işe yaradığını biliyorum, ama neden :h /\_.işe yarıyor da değil :h \_.?
Eddified

2
@Eddified ileri eğik çizgi (arama için varsayılan anahtardır) \_., okuyabileceğiniz bağlamı belirtir : arama ifadesi için bana yardım edin\_.
Florian

Ancak, parantez içine dahil etsem bile bu ifade ile tembel eşleştirme yapamıyorum gibi görünüyor? Bunu yapmanın bir yolu var mı?
xji

2
@JIXiang Tembel maç için foo bar \n foo baz \n foodeneyin/foo\_.\{-}foo
James
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.