Vim Regexキャプチャグループ[bau-> byau:ceu-> cyeu]


132

私は言葉のリストを持っています:

bau
ceu
diu
fou
gau

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

byau
cyeu
dyiu
fyou
gyau

私はコマンドを失敗しました:

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

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



4
少し話題から外れているので、ここにコメントとして記載しますが、そう思います:%norm ay<CR>
romainl 2013

2
あなたの場合(それが説明とまったく同じである場合)、それは次のオプションです:で2番目の列に移動しl、でビジュアルブロックモードに入りCtrl+v、列全体をマークしShift+gてからlて挿入モードに入り、その後、Shift+i入力「Y」。Esc挿入モードを終了するための仕上げを含む7つのキーストローク。キャプチャグループに関するものではないため、回答として投稿しません(これは、これを見つけたときに検索したものです)。:-)
LAFKはモニカを2016

回答:


224

これを修正する1つの方法は、パターンがエスケープされ括弧で囲まれていることを確認することです。

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

わずかに短い(そしてより多くの魔法 -al)が使用することです\v、パターン内のすべてのASCII文字を除いて、それの後にあることを意味し、'0'-'9''a'-'z''A'-'Z'および'_'特別な意味を持っています:

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

見る:


41

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

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

インゴ、間違った場所に質問を配置して申し訳ありません。これはで見つかります:exmode。gvimの検索/置換ダイアログボックスでそれを行う方法はありますか?
JJoao

3
@JJoao:いいえ、検索/置換ボックスはリテラル検索と置換のみを目的としています。とにかく、それを使うべきではありません。これはメモ帳ユーザー向けのトレーニングホイールにすぎません。
2015年

インゴ、ありがとう(私にとってはそうではありません:exmodeには満足していますが、辞書プロジェクトの言語学者の協力者にとっては):ほぼ動作します- \v...正規表現で動作します。置換文字列では&機能しますが\ 、保護されます(\1\r失われます)
JJoao

@JJoao:はい、それも私がそれを遊んでいる間に知りました。ExモードなしでVimを使用するのが良い考えかどうかはまだ懐疑的ですが、Vimscript :sを使用して独自の検索と置換ダイアログ(内部的にによって駆動)を簡単に作成できますinputdialog()
インゴカーカット

Ingo:ありがとうございます。私はあなたの懐疑的な意見に同意します。Inputdialg +:s + vimscriptは、おそらくgvimのfind replaceの構築方法です。私にとって\1 \r 治療はgvimバグです。いくつかのvim固有のリストに投稿してみます。その間、私は1つのvimscript-inputdialogを試します。
JJoao

34

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

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

13

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

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

それはトリックです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.