por - ¿Reemplazar las comillas alrededor de las cadenas en Vim?
vi editor buscar texto (8)
Tengo algo parecido a <Foobar Name=''Hello There''/>
y necesito cambiar las comillas simples por comillas dobles. Intenté :s//'.*/'//"/0/"
pero terminó produciendo <Foobar Name="''Hello There''"/>
. Reemplazar el /0
con /1
solo produjo una cadena en blanco dentro de las comillas dobles - ¿hay alguna sintaxis especial que me falta que necesito para hacer que solo la cadena encontrada ("Hola") entre las comillas se asigne a /1
?
Debe colocar corchetes alrededor de la parte de la expresión que desea capturar.
s//'/(.*/)/'/"/1"/
Pero, puede tener problemas con la coincidencia no intencional. ¿Podría simplemente reemplazar cualquier comilla simple con comillas dobles en su archivo?
Necesita usar agrupaciones:
:s//'/(.*/)/'//"/1/"
De esta manera, el argumento 1 (es decir, / 1) se corresponderá con lo que esté delimitado por / (y /).
Solo un FYI - para reemplazar todas las comillas dobles por simples, esta es la expresión regular correcta - basado en el ejemplo de rayd09 arriba
:%s/"/([^"]*/)"/''/1''/g
Suponiendo que quieres hacer esto en un archivo completo ...
Modo N:
ggvG$ [SHIFT+:]
Modo X:
''<,''>/''/" [RET]
También está surround.vim , si buscas hacerlo con bastante frecuencia. Utilizarías cs''"
para cambiar las comillas circundantes.
Tiene la idea correcta: quiere tener "/1"
como su cláusula de reemplazo, pero primero debe poner la parte "Hola" en el grupo de captura 1 (0 es la coincidencia completa). Tratar:
:%/''/(.*/)''/"/1"
a menos que me falta algo, ¿no funcionaría s//'/"/g
?
%s/''/([^'']*/)''/"/1"/g
Querrá utilizar [^'']*
lugar de .*
contrario
''apples'' are ''red''
se convertirían a "apples'' are ''red"