私の貪欲な複数行の正規表現がVimで重複する一致を与えていることに気付いたとき、私は驚きました。正規表現は、テキストのブロック全体、または連続する非空白行に一致するように設計されています。
正規表現は、私が期待したすべてのものと一致したようです(強調表示は正しく見えました)がn
、次のブロックにスキップする代わりに次の一致にスキップするために使用すると、現在のブロックの次の行に移動しました。
これが私が使用していた正規表現です((.+\n){1,}
ほとんどの正規表現エンジンに相当します):
\(.\+\n\)\{1,}
これは、少なくとも1つの空でない行、およびできるだけ多くの連続する空でない行と一致する必要があります。テキストファイルの例を次に示します。
block 1
some stuff
more stuff
block 2
foo bar
baz qux
この正規表現(/\(.\+\n\)\{1,}+ Enter)を適用すると、2つのブロックが正しく強調表示されますが、各ブロックに1つずつ、正規表現が一致するのは2つだけであると予想されます。ただし、を押しnて次の正規表現の一致に進むと、空でない各行が正規表現と一致しているように見えるため、カーソルは最初の行から始まりn、2行目、3行目、ブロックの先頭に移動します。 2など。
n次の行ではなく次のブロックに進むように、各ブロックの予想される動作が単一の一致であることがわかるように、正規表現を変更するにはどうすればよいですか?
また、この動作がドキュメントのどこかにあるかどうか、またはこの動作を変更するオプションがあるかどうかを知りたいと思います。検索/置換で同じ正規表現を使用する場合、動作は私が期待するものであることに注意してください(置換は2回だけ適用され、ブロックごとに1回適用されます)。