viで行を特定のパターンに置き換えるには?

viで行を特定のパターンに置き換えるには?

"s#_decoded_block["パターンを含む行をに置き換えようとしています"s#_decoded_block_"。これに使用するコマンドは次のとおりです。

%s/s\d\+_decoded_block\[/s\d\+_decoded_block_/g

私は交換を期待しましたが、"s#_decoded_block_"それが私が得たものです"sd+_decoded_block_"。何が間違っているのか教えてください。

ベストアンサー1

質問の「#」が10進数であると予想しているようです。逆参照を使用してこれを行うことができます。

%s/s\(\d\+\)_decoded_block\[/s\1_decoded_block_/g

\(\d\+\)1つ以上の10進数と一致し、それをtokensに置き換えます\1

逆参照内でさらにテキストを移動することで、逆参照を改善できます。

%s/s\(\d\+_decoded_block\)\[/s\1_/g

なぜなら、\1グループ内で一致するものに置き換えられるからです。

おすすめ記事