Pregunta

Tengo algo parecido a <Foobar Name='Hello There'/> y la necesidad de cambiar las comillas simples de comillas dobles. Probé :s/\'.*\'/\"\0\" pero terminó produciendo <Foobar Name="'Hello There'"/>. Sustitución de la \0 con \1 sólo produjo una cadena en blanco dentro de las comillas dobles - ¿hay alguna sintaxis especial que me falta que necesito hacer sólo la cadena encontrada ( "Hola") dentro de las comillas asignan a \1

¿Fue útil?

Solución

Es necesario que las agrupaciones de uso:

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

Este argumento forma 1 (es decir, \ 1) se corresponden a lo que está delimitado por \ (y \).

Otros consejos

También hay surround.vim , si usted está mirando para hacer esto con bastante frecuencia. Que tendría que utilizar para cambiar cs'" rodea comillas.

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

Usted tendrá que utilizar [^']* en lugar de lo contrario .*

'apples' are 'red' conseguiría convertido a "apples' are 'red"

A menos que me falta algo, no funcionaría s/\'/"/g?

Sólo un FYI - para reemplazar todas las comillas dobles con sencillo, se trata de la expresión regular correcta - basado en el ejemplo de arriba rayd09

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

Es necesario poner paréntesis alrededor de la parte de la expresión que se desea capturar.

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

Sin embargo, es posible que tenga problemas con el juego no intencional. Puede ser que usted será capaz de reemplazar simplemente las comillas simples por comillas dobles en su archivo?

Usted tiene la idea correcta - usted quiere tener "\1" como su cláusula de reemplazar, pero hay que poner la parte "Hola" en el grupo de captura de 1 primero (0 es todo el partido). Proveedores:

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

Suponiendo que quiere hacer esto en un archivo completo ...

Modo N:

ggvG$ [SHIFT+:]  

Modo X:

'<,'>/'/" [RET]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top