2012-08-16 23 views
6

を交換して多くの場合、私はこのようなvimの中で検索と置換したい:Vimの検索と効率

:%s/<search_pattern>/<search_pattern>_foo/g 

は、私が置き換える値に<search_pattern>を参照できるように、この構文は、より効率的にする方法はありますか?私はそれがグループ名/番号で参照して戻って同様の何かになると思っていますが、私はこれに関するドキュメントを見つけることができません。

答えて

13

は、交換中にマッチしたパターン表現するために&文字を使用します。

:%s/<search_pattern>/&_foo/g 

が交互にあなたが\0を使用することができ、全体のマッチしたパターンのための後方参照である、など覚えやすいことがあります

:%s/<search_pattern>/\0_foo/g 

よ、:help sub-replace-special

を参照してください。そして、@kevのおかげでuは、交換に__foo_によって置き換えられる\zsを使用して、検索文字列の末尾に空のパターン、強制することができます:

:%s/<search_pattern>\zs/_foo/g 

をこれは意味:__foo_で検索文字列の末尾を交換してください。

+3

':%sの/ \ ZS/_foo/G'作品あまりにも。 – kev

3

検索パターン全体に&を使用することも、グループを使用してパターンの一部に一致させることもできます。使用:&

:%s/<search_pattern>/&_foo/g 

これは、あなたが探しているものを達成するでしょう。何か必要があれば、もう少し複雑なグループを使用してください。グループを作成するには、検索パターンの一部を(エスケープされた)かっこで囲みます。 \nで参照できます。nはグループ番号です。例がそれをより良く説明するだろう。

あなたは次のファイルがあります。

bread,butter,bread,bread,bread,butter,butter,etc 

あなたはbread and butterbread,butterの任意のインスタンスを変更したい:

:%s/\(bread\),\(butter\)/\1 and \2/g 
関連する問題