Vimの中の文字列の周りに引用符を置き換えますか?
質問
私は<Foobar Name='Hello There'/>
に似何かを持っているし、二重引用符に単一引用符を変更する必要があります。私は:s/\'.*\'/\"\0\"
を試してみましたが、それは<Foobar Name="'Hello There'"/>
を生産することになりました。 \0
と\1
のみ二重引用符内の空白文字列を生成交換 - 私は引用符が\1
に割り当てるの内側(「そここんにちは」)のみFOUND文字列を作成する必要があることが欠けているいくつかの特別な構文があります。
解決
あなたがグループを使用する必要があります:
:s/\'\(.*\)\'/\"\1\"
この方法で引数1(すなわち、\ 1)は\(と\)で区切られているものに対応します。
他のヒント
また、 surround.vim に、あなたが探している場合がありますかなり頻繁にこれを行います。あなたは周囲の引用符を変更するcs'"
を使用すると思います。
%s/'\([^']*\)'/"\1"/g
あなたがそうでなければ代わりに[^']*
の.*
を使用したいと思うでしょう。
'apples' are 'red'
は"apples' are 'red"
私は何かが欠けていない限り、希望はないs/\'/"/g
仕事?
ちょうどFYI - シングルとすべての二重引用符を置き換えるために、これが正しい正規表現である - rayd09の例に基づいて
上記:%s/"\([^"]*\)"/'\1'/g
あなたがキャプチャしたい式の一部の周りに丸括弧を配置する必要があります。
s/\'\(.*\)\'/"\1"/
しかし、あなたは意図しないマッチングに問題がある可能性があります。あなたは、単にあなたのファイルで、二重引用符で、任意の単一引用符を置き換えることができるかもしれない?
"\1"
を持つようにしたいが、あなたは最初のキャプチャグループ1で「こんにちは」の部分を(0はマッチ全体で)配置する必要があります - あなたは正しい考えを持っています。試してみてください。
:%/'\(.*\)'/"\1"
あなたはファイル全体にこれをしたいと仮定...
Nモード:
ggvG$ [SHIFT+:]
Xモード:
'<,'>/'/" [RET]