2012-07-29 16 views
10

Kopiuje wklejone komórki długiego arkusza kalkulacyjnego google do pliku txt, który jest listą adresów e-mail oddzielonych przecinkami. Istnieje również wiele "pustych" komórek, tj. Puste miejsce otoczone przecinkami. Więc mogę mieć następującą listę:W wyszukiwaniu i zamianie vim, nowa linia jest renderowana jako "^ @"

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

w vim, gdy próbuję dodać osobny każdy adres nowym Zgodnie z tym poleceniem:

:%s/, /,\n/g 

zamiast dodawać nową linię po komandorze, zamiast tego otrzymuję "^ @".

Wiem, że ma to coś wspólnego z zestawami znaków, ale nie wiem, jak to naprawić.

Odpowiedz

13

W polu zastępczym :s należy użyć \r, a nie \n dla znaków nowego wiersza.

^@ jest znakiem pustym ASCII. Vim używa wewnętrznie \ r dla nowych linii (co jest^M), a \ n dla wartości ASCII, tak więc w przypadku zamiennika, jeśli użyjesz \ n, otrzymujesz te znaki null zamiast nowych znaków. Zobacz też: h sub-replace-special

+0

Czy możesz wyjaśnić, dlaczego jego '\ n' pojawia się jako'^@ '? –

+4

'^ @' jest znakiem pustym ASCII. Vim wewnętrznie używa '\ r' dla newlines (co oznacza'^M') i '\ n' dla ASCII o wartości null, więc w zastępstwie, jeśli użyjesz' \ n', otrzymujesz te znaki puste, a nie znaki nowej linii. Zobacz także ': h sub-replace-special'. – Julian

+0

@Julian: Uważam, że powinieneś umieścić to wyjaśnienie w odpowiedzi. –