2016-08-13 14 views
0

に置き換える任意の文字は、検索とは、以下のセグメントにコマンドを置き換えるはVimのVimのでは自身

:%s/{.\(\)\@!/{./g 

ただし、最初のセグメントにこれを行います。

func {.rint("touching curly braces")} 

は、私はこのような何か必要があると考えている:「」

:%s/{.\(\)\@!/{ ./g 
:%s/}.\(\)\@!/} ./g 

私はクリーネ閉包を交換するにはどうすればよいのそれが一致したキャラクターと?

答えて

1

あなたはsubstituion文字列に\(.\)

:%s/{\(.\)\(\)\@!/{ \1/g 
:%s/}\(.\)\(\)\@!/} \1/g 

を繰り返すことができますので、これはあなたがしたい場合は

をグループ化するバックリファレンスと呼ばれるものであるグループに.を配置する必要があり両方のスペースはここで一度にコマンドです:

:%s/{\(\S.*\S\)}/{ \1 }/g 
+1

、感謝します。私はTomalakの賢明な提案を受けて、/ gcを使ってさまざまなケースをレビューしてから、編集を受け入れました。 –

1

私は

:%s/{\($| \)\@!/{ /g 

{\($| \)\@!{と行末や空間のいずれかのために negative lookaheadで、他の式は negative lookbehind}と類似している
:%s/\(^| \)\@<!}/ }/g 

を交換したいです。

このようなソースコードを置き換えることは危険な作業です。あなたは非常に簡単に事を壊すことができます。文字列の中の中括弧、正規表現、またはあなたが考えていないその他の状況を考えてみましょう。各変更を手動で確認するには、/gの代わりに/gcを使用してください。

1

これはどういう意味ですか?あなたもこの方法でそれを行うことができます

s/\zs{\ze./& /g 
s/.\zs}\ze/ &/g 

:私はあなたの問題の権利を理解願って、あなたが設けられた第二のラインは私が作ることを望んでいたまさにされていることを

s/{\ze./& /g 
s/.\zs}/ &/g