Domanda

Ho qualcosa di simile a <Foobar Name='Hello There'/> e la necessità di cambiare le virgolette di virgolette doppie. Ho provato :s/\'.*\'/\"\0\" ma è finito per produrre <Foobar Name="'Hello There'"/>. Sostituzione del \0 con \1 prodotto solo una stringa vuota all'interno della virgolette -? C'è qualche sintassi speciale che mi manca che ho bisogno di fare solo la stringa trovata ( "Ciao There") all'interno delle virgolette assegnano a \1

È stato utile?

Soluzione

È necessario utilizzare raggruppamenti:

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

In questo modo argomento 1 (cioè, \ 1) corrisponderà a ciò che è delimitata da \ (e \).

Altri suggerimenti

C'è anche surround.vim , se stai cercando di farlo abbastanza spesso. Usereste cs'" cambiare citazioni circostante.

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

Si vuole utilizzare [^']* invece di .* altrimenti

'apples' are 'red' otterrebbe convertito "apples' are 'red"

a meno che non mi manca qualcosa, non sarebbe s/\'/"/g lavoro?

Solo una cronaca - per sostituire tutte le virgolette con il singolo, questa è l'espressione regolare corretta - in base a esempio di rayd09 sopra

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

Hai bisogno di mettere tra parentesi tonde attorno alla parte dell'espressione che si desidera catturare.

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

Ma, si potrebbe avere problemi con corrispondenza non intenzionale. Potreste essere in grado di sostituire semplicemente uno stesso citazioni con doppi apici nel file?

Hai avuto l'idea giusta - si vuole avere "\1" come clausola di sostituzione, ma è necessario mettere il "Ciao There" parte del gruppo di cattura 1 primo (0 è l'intero match). Prova:

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

Presumendo che si vuole fare questo su un intero file ...

Modalità N:

ggvG$ [SHIFT+:]  

Modalità X:

'<,'>/'/" [RET]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top