texto reemplazar por pegar linea dentro copiar busqueda buscar vim vi replace surround

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"