Dukungan regex multi-baris di Vim

117

Saya perhatikan sintaks regex standar untuk pencocokan di beberapa baris adalah menggunakan / s, seperti:

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

Ini berfungsi di Perl misalnya, tetapi tampaknya tidak didukung di Vim. Sebaliknya, saya harus lebih spesifik:

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

Saya tidak dapat menemukan alasan mengapa ini harus terjadi, jadi saya pikir saya mungkin melewatkan bit yang relevan dalam bantuan vim.

Adakah yang bisa memastikan perilaku ini dengan satu atau lain cara?

Daniel
sumber

Jawaban:

177

Ya, //spengubah Perl tidak tersedia di Vim regexes. Lihat :h perl-patternsuntuk rincian dan daftar perbedaan lain antara Vim dan Perl regexes.

Sebagai gantinya Anda dapat menggunakan \_., yang berarti "cocok dengan karakter apa pun termasuk baris baru". Ini sedikit lebih pendek dari yang Anda miliki. Lihat :h /\_..

/This\_.*text/
Brian Carper
sumber
4
Bagus - hidupku jadi lebih mudah. Saya telah melakukan (. | \ N) *
ojrac
2
Apa yang dilakukan garis miring ke depan :h /\_.? Maksud saya, saya tahu itu berhasil, tetapi mengapa :h /\_.berhasil, dan tidak :h \_.?
Eddified
2
@Edified garis miring (yang merupakan kunci default untuk mencari) menentukan konteks \_.yang dapat Anda baca seperti: beri saya bantuan untuk ekspresi pencarian \_.
Florian
Namun, tampaknya saya tidak dapat melakukan pencocokan malas dengan ekspresi ini, meskipun saya memasukkannya dalam tanda kurung? Apakah ada cara untuk melakukannya?
xji
2
@JIXiang Untuk pertandingan malas foo bar \n foo baz \n foo, coba/foo\_.\{-}foo
James M. Lay