Question

J'ai quelque chose semblable à <Foobar Name='Hello There'/> et la nécessité de changer les guillemets simples à guillemets doubles. J'ai essayé :s/\'.*\'/\"\0\" mais il a fini par produire <Foobar Name="'Hello There'"/>. Remplacement de la \0 avec \1 seulement produit une chaîne vide à l'intérieur des guillemets doubles - est-il une syntaxe particulière qui me manque que je dois faire que la chaîne trouvée ( « Bonjour ») à l'intérieur des guillemets affecter à \1

Était-ce utile?

La solution

Vous devez utiliser des groupes:

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

Cet argument de façon 1 (c.-à-\ 1) correspondra à tout ce qui est délimité par \ (et \).

Autres conseils

Il y a aussi surround.vim , si vous cherchez à faire assez souvent. Vous utiliseriez cs'" changer des guillemets.

%s/'\([^']*\)'/"\1"/g

Vous voulez utiliser [^']* au lieu de .* autrement

'apples' are 'red' se sont convertis à "apples' are 'red"

à moins que je me manque quelque chose, ne serait pas s/\'/"/g travail?

Juste un FYI - pour remplacer tous les guillemets doubles avec simple, c'est le regexp correct - basé sur l'exemple de rayd09 ci-dessus

:%s/"\([^"]*\)"/'\1'/g

Vous avez besoin de mettre entre parenthèses autour de la partie de l'expression que vous souhaitez capturer.

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

Mais, vous pourriez avoir des problèmes avec l'appariement involontaire. Seriez-vous en mesure de remplacer simplement des guillemets simples avec des guillemets doubles dans votre fichier?

Vous avez la bonne idée - vous voulez avoir "\1" que votre article remplacer, mais vous avez besoin de mettre le « Bonjour » part dans le groupe de capture 1 premier (0 est tout le match). Essayez:

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

En supposant que vous voulez faire sur un dossier complet ...

N Mode:

ggvG$ [SHIFT+:]  

Mode de X:

'<,'>/'/" [RET]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top