11

私はのすべての発生を置き換えようとしていhello(...)ますhello[...]

%s/hello\((.*?)\)/hello\[$1\]/うまくいかなかったようなことを試しました

ヘルプplsはありますか?

4

1 に答える 1

16

これはPerl構文であり、Vimではありません。Vimの正規表現では、少なくともデフォルトでは、括弧はそれ自体と一致し、バックスラッシュされた括弧はPerlの反対をキャプチャします。また、Vimは欲張りでない修飾子を理解せず?、キャプチャグループは\nではなく$nで補間されます。これを試して:

%s/hello(\([^)]*\))/hello[\1]/

または、\v( "very magic")修飾子を使用して、特殊文字やバックスラッシュに関する動作をPerlのようにすることもできますが、Vim*?に補間構文を理解させたり、変更したりすることはできません。

%s/\vhello\(([^)]*)\)/hello[\1]/

また、置換テキストの角かっこに円記号は必要ないことに注意してください。置換コマンドの右側は正規表現ではないため、特殊な文字のほとんどについて心配する必要はありません。 1。バックスラッシュ自体だけが特別であり、キャプチャグループ、それ自体のリテラルインスタンス、または区切り文字を含めるために使用できます。

于 2012-05-02T05:36:43.840 に答える