La convention pour les fichiers texte Unix est que chaque ligne se termine par un retour à la ligne et que les retours à la ligne sont des fins de ligne et non des séparateurs de ligne.
Lorsque Vim enregistre un tampon sous forme de fichier, il termine chaque ligne avec la séquence de fin de ligne pour ce format de fichier, qui pour Unix est une nouvelle ligne. Voir
:help 'fileformat'
Si vous utilisez des outils de traitement de texte Unix, il est préférable de s'en tenir à cette convention. Cependant, si vous avez besoin de ne pas mettre de saut de ligne à la fin de la dernière ligne d'un fichier, vous pouvez le faire. Vim considère ces fichiers comme "binaires". Voir
:help 'binary'
:help edit-binary
Vim 8.0 le prévoit désormais avec le fixeol
option. Plus précisément si vous le faites :
:set nofixeol
alors Vim ne le fera pas ajoutez un caractère de fin de ligne à la fin de la dernière ligne si le fichier n'en avait pas déjà un.
Cela pourrait aller dans un plugin de type de fichier, ou peut-être même votre .vimrc
.
(Il s'agit d'une amélioration par rapport à :set binary
car il n'affecte que le dernier caractère de saut de ligne, alors que binary
modifie également un tas d'autres comportements, ce que vous ne voulez probablement pas, sauf si vous modifiez réellement un fichier binaire.)
Un fichier nouvellement créé aura toujours un caractère de saut de ligne à la fin par défaut. Vous pouvez changer cela (et changer un fichier qui a déjà une nouvelle ligne finale pour ne pas en avoir) en faisant en plus :
:set noeol
Cela doit être défini spécifiquement pour chaque fichier que vous souhaitez modifier :le chargement d'un fichier dans un tampon définira toujours eol
pour correspondre à l'état actuel du fichier.
Vim n'ajoute rien que vous n'y ayez pas mis vous-même.
Un caractère "newline" n'est pas une "nouvelle ligne" et les deux exemples sont parfaitement normaux :
- dans le premier, le fichier ne contient qu'une seule ligne donc vous obtenez un caractère "newline",
- dans le second, le fichier contient deux lignes, vous obtenez donc deux caractères "newline".