Remplacement des guillemets autour des chaînes dans vim?
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
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]