29

に似たものが<Foobar Name='Hello There'/>あり、一重引用符を二重引用符に変更する必要があります。試してみ:s/\'.*\'/\"\0\"ましたが、最終的に生成されました<Foobar Name="'Hello There'"/>。を置換する\0\1、二重引用符内に空白の文字列しか生成されません - 引用符内の見つかった文字列 ("Hello There") のみを に割り当てる必要があるという特別な構文があり\1ませんか?

4

8 に答える 8

67

これをかなり頻繁に行う場合は、 Surround.vim もありますcs'"周囲の引用符を変更するために使用します。

于 2010-01-20T21:10:23.190 に答える
23

グループ化を使用する必要があります。

:s/\'\(.*\)\'/\"\1\"

このように、引数1(つまり、\ 1)は、\(および\)で区切られたものに対応します。

于 2010-01-20T17:57:16.600 に答える
9

私が何かを逃していない限り、うまくいきませんs/\'/"/gか?

于 2010-01-20T17:57:27.457 に答える
7

参考までに-すべての二重引用符を単一に置き換えるには、これが正しい正規表現です-上記のrayd09の例に基づいています

:%s/"\([^"]*\)"/'\1'/g
于 2010-07-07T16:05:39.597 に答える
2

キャプチャしたい式の部分を丸かっこで囲む必要があります。

s/\'\(.*\)\'/"\1"/

ただし、意図しないマッチングで問題が発生する可能性があります。ファイル内の単一引用符を二重引用符に簡単に置き換えることができますか?

于 2010-01-20T17:57:11.543 に答える
1

あなたは正しい考えを持っています-あなたは"\1"あなたのreplace句として持ちたいです、しかしあなたは最初にキャプチャグループ1の「HelloThere」部分を置く必要があります(0は完全な一致です)。試す:

:%/'\(.*\)'/"\1"

于 2010-01-20T17:57:58.780 に答える
0

ファイル全体でこれを行いたいと仮定すると...

N モード:

ggvG$ [SHIFT+:]  

X モード:

'<,'>/'/" [RET]
于 2012-06-16T08:55:54.457 に答える