2012-07-29 12 views
10

Copia celle incollate di un lungo foglio di calcolo google in un file txt che è un elenco di indirizzi e-mail separati da virgole. Ci sono anche molte celle "vuote", cioè uno spazio vuoto circondato da virgole. Così ho potuto avere il seguente elenco:In vim search and replace, newline esegue il rendering come "^ @"

[email protected], ,[email protected], , , , [email protected]

In vim, quando provo ad aggiungere separare ogni indirizzo con una nuova linea con questo comando:

:%s/, /,\n/g 

invece di aggiungere una nuova riga dopo il comman, ho invece "^ @".

So che questo ha qualcosa a che fare con i set di caratteri, ma non so come risolverlo.

risposta

13

Nel campo di sostituzione :s, è necessario utilizzare \r non \n per caratteri di nuova riga.

^@ è il carattere null ASCII. Vim utilizza internamente \ r per newlines (che è^M), e \ n per ASCII null, quindi nella sostituzione, se si utilizza \ n si ottengono quei caratteri null invece di newline. Vedi anche: h sub-replace-special

+0

Puoi spiegare perché il suo '\ n' si presenta come'^@ '? –

+4

'^ @' è il carattere null ASCII. Vim usa internamente '\ r' per newlines (che è'^M'), e '\ n' per ASCII null, quindi nella sostituzione, se si usa' \ n' si ottengono quei caratteri nulli invece di newline. Vedi anche ': h sub-replace-special'. – Julian

+0

@ Julian: Credo che dovresti inserire questa spiegazione nella risposta. –

Problemi correlati