Vimでの複数行の正規表現のサポート


116

複数の行にまたがって照合するための標準の正規表現構文は、次のように/ sを使用することです。

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

これはたとえばPerlで動作しますが、Vimではサポートされていないようです。代わりに、もっと具体的にする必要があります。

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

私はこれがなぜあるべきかの理由を見つけることができないので、私はおそらくvimのヘルプで関連する部分を逃しただけだと思っています。

誰かがこの動作を何らかの方法で確認できますか?

回答:


176

はい、Perlの//s修飾子はVim正規表現では使用できません。:h perl-patternsVimとPerlの正規表現の詳細とその他の違いのリストについては、を参照してください。

代わりにを使用できます\_.。これは、「改行を含む任意の1文字に一致する」という意味です。それはあなたが持っているものより少し短いです。を参照してください:h /\_.

/This\_.*text/

4
いいですね-私の人生は少し楽になりました。私が行ってきのだ| *(\ nは。)
ojrac

2
:h /\_.doのスラッシュとは何ですか?私が意味する、私はそれが動作します知っているが、なぜ:h /\_.仕事をしていませんか:h \_.
2012

2
@エディファイドフォワードスラッシュ(検索のデフォルトのキー)は、次の\_.ように読み取ることができるコンテキストを指定します。検索式の ヘルプを提供する\_.
Florian

ただし、かっこで囲んでも、この式との遅延一致を実行できないようです。それを行う方法はありますか?
xji 2016

2
@JIXiangでの怠惰な試合についてはfoo bar \n foo baz \n foo、試してください/foo\_.\{-}foo
ジェームズM.レイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.