2016-08-25 13 views
2

vimでは、正規表現やパターンを使用して、マッチを置換せずに、それ自体の直後にマッチをコピーする方法を教えてください。例えばvimでの正規表現(正規表現)の一致をコピーする

、私はコンマの後に、ライン上のコンマの前にすべてのものをコピーしたいと思います:

one, 
two, 
three, 
four, 

...その後になる:私は一致することができ

one,one 
two,two 
three,three 
four,four 

.*,、またはグローバルには%s/.*,です。私は.*,\@<=または.*,\zsとのゼロ幅の一致を行うことさえできます。しかし、ここからどこに行くのか分からない。

+0

を、ドキュメントはここにある:http://vimdoc.sourceforge.net/htmldoc/pattern.html#pattern-atoms –

答えて

4

グループキャプチャを使用します。グループキャプチャを使用するには、あなたの正規表現の一部を括弧でくくって(それらをエスケープする必要があります)、サブグループ1に配置されます。次のカッコのペアのすべては、サブグループ2などに配置され、最大9つのグループに割り当てられます。このグループを置換の置換部分で参照することができます。たとえば:

:%s/\(.*\),/\1,\1 

これはコンマには何をキャプチャし、グループ\1それを呼び出すことを意味します。次に、このテキストを(group1),(group1)に置き換えます。 &は "マッチしたテキスト全体"(\ 0と同じ)を意味するので、あなたはまた、

:%s/\(.*\),/&\1 

を行うことができます。

あなたは非常に魔法を使うこともできます。 \vこれをより読みやすくするためです。たとえば:サイドノートとして

:%s/\v(.*),/&\1 

、同じことが影響し達成するための簡単な方法は、すべての行へのキーストロークのセットを適用する、:%normを使用することです。たとえば、あなたが

:%norm yt,f,p 

推奨読書行うことができます:注意点としてhttp://vimregex.com/

+0

' magicはデフォルトの正規表現モードです。あなたは「非常に魔法」を意味します。 – jshort

+0

@jshort良い点。 – DJMcMayhem

+1

または、次のように編集します。 ':%s/\(。* \)、\ zs/\ 1 /' –

関連する問題