J'essaie de remplacer chaque ,
du fichier actuel par une nouvelle ligne :
:%s/,/\n/g
Mais il insère ce qui ressemble à un ^@
au lieu d'une véritable nouvelle ligne. Le fichier n'est pas en mode DOS ou autre.
Que dois-je faire ?
Si vous êtes curieux, comme moi, consultez la question [Pourquoi \r est une nouvelle ligne pour Vim ?][1] également.
[1] : https://stackoverflow.com/questions/71417/why-is-r-a-newline-for-vim
\r
au lieu de \n
.La substitution par \n
insère un caractère nul dans le texte. Pour obtenir une nouvelle ligne, utilisez \r
. En revanche, pour rechercher une nouvelle ligne, vous utiliserez toujours \n
. Cette asymétrie est due au fait que \n
et \r
[font des choses légèrement différentes] (http://vim.wikia.com/wiki/Search_and_replace) :
\n
correspond à une fin de ligne (nouvelle ligne), tandis que \r
correspond à un retour chariot. D'autre part, dans les substitutions, \n
insère un caractère nul alors que \r
insère une nouvelle ligne (plus précisément, il est traité comme l'entrée xxd
montre un hexdump du fichier résultant.
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.
En d'autres termes, \n
a inséré l'octet 0x00 dans le texte ; \r
a inséré l'octet 0x0a.