ファイル内で2次元パターンに一致する行を探しています。
たとえば、次の入力ファイルが与えられた場合:
aaaba
aabaa
aaaba
aaaaa
aaaaa
次のようなパターンを使用したい
ab
ba
ab
上の3行で一致します。理想的には、そのパターンで置換できるようにしたいと思います。たとえば、
ba
ab
ba
ファイル内で2次元パターンに一致する行を探しています。
たとえば、次の入力ファイルが与えられた場合:
aaaba
aabaa
aaaba
aaaaa
aaaaa
次のようなパターンを使用したい
ab
ba
ab
上の3行で一致します。理想的には、そのパターンで置換できるようにしたいと思います。たとえば、
ba
ab
ba
回答:
これは、正規表現だけでは行えません。キャプチャグループのように機能する特別なアトムが必要ですが、代わりに列をキャプチャしてから、対応するアトムを呼び出します。あなたができる最善のことは、あなたの例のために、後続の行の各行を一致させることです
/ab\ze.*\n.*ba.*\n.*ab/
それにより、ブロックの行と一致する行だけでなく、ブロックのテキストを含むすべての出現が一致しますが、同じ垂直方向の配置だけでなく、最初の行の一致のみが強調表示されます。私のSearchHighlightingプラグインもこの機能を提供します(にマッピングされます{Visual}*
)。
それで十分でない場合(/c
フラグを使用して:substitute
各一致を手動で検証および確認できます)、独自の検索(および代替)インフラストラクチャ、つまり/
、n
/ N
、およびに相当するものを構築し、:s
ブロックの追加アサーションを行う必要があります-Vimscriptのアライメント。