web-dev-qa-db-ja.com

Vim Regex Capture Groups [bau-> byau:ceu-> cyeu]

単語のリストがあります:

bau
ceu
diu
fou
gau

そのリストを次のように変えたいです。

byau
cyeu
dyiu
fyou
gyau

コマンドを試してみましたが失敗しました:

:%s/(\w)(\w\w)/\1y\2/g

これが機能しないことを考えると、正規表現のキャプチャグループをVimで機能させるには何を変更する必要がありますか?

112
Christian

これを修正する1つの方法は、パターンをescaped括弧で囲むことです。

:%s/\(\w\)\(\w\w\)/\1y\2/g

少し短く(さらにmagic-al)は\vを使用します。つまり、パターン内では'0'-'9'を除くすべてのASCII文字を意味します、'a'-'z''A'-'Z''_'には特別な意味があります。

:%s/\v(\w)(\w\w)/\1y\2/g

見る:

198
Johnsyweb

キャプチャグループをバックスラッシュでエスケープしたくない場合(これは見逃したことです)、\vを追加してVimの正規表現エンジンを非常に魔法モードに変更します。

:%s/\v(\w)(\w\w)/\1y\2/g
39
Ingo Karkat

短いこのパターンを使用することもできます。

:%s/^./&y
  • %sは、ファイル全体にパターンを適用します。
  • ^.は、行の最初の文字に一致します。
  • &yは、パターンの後にyを追加します。
28
Juan

また、グループ化括弧をエスケープする必要があります。

:%s/\(\w\)\(\w\w\)/\1y\2/g

それはトリックです。

12
Henkersmann