Jeg forsøger at erstatte hver ,
i den aktuelle fil med en ny linje:
:%s/,/\n/g
Men den indsætter noget, der ligner en ^@
i stedet for en egentlig newline. Filen er ikke i DOS-mode eller noget.
Hvad skal jeg gøre?
Hvis du ligesom jeg er nysgerrig, så tjek også spørgsmålet Hvorfor er \r en newline for Vim?.
\r
i stedet for \n
.Ved at erstatte med \n
indsættes et nul-tegn i teksten. For at få en ny linje skal du bruge \r
. Når du søger efter en ny linje, skal du dog stadig bruge \n
. Denne asymmetri skyldes, at \n
og \r
[gør lidt forskellige ting] (http://vim.wikia.com/wiki/Search_and_replace):
\n
matcher en linieafslutning (newline), mens \r
matcher en vognrytme. På den anden side indsætter \n
i substitutioner et null-tegn, mens \r
indsætter en newline (mere præcist behandles det som input xxd
viser en hexdump af den resulterende fil.
echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a bar.
After:
0000000: 000a 720a ..r.
Med andre ord, \n
har indsat byte 0x00 i teksten; \r
har indsat byte 0x0a.