Informations de base
Vim n'affiche pas la dernière nouvelle ligne dans le tampon, mais en fait, vim place toujours EOL à la fin du fichier lorsque vous l'écrivez, car il est standard pour les fichiers texte dans les systèmes Unix. Vous pouvez trouver plus d'informations à ce sujet ici . Bref vous n'avez pas à vous soucier de l'absence de nouvelles lignes à la fin du fichier dans vim.
Expérience 1
Vous pouvez faire cette petite expérience pour vérifier ce comportement. Dans le terminal, exécutez:
$ vim test_test
Saisissez le caractère 1
et enregistrez le fichier :wq.
Vous n'avez qu'un seul caractère dans le fichier, non? En fait non :) Vous avez maintenant dans votre fichier 1
et vos LF
personnages. Vérifions-le, avec l'utilitaire hexdump:
$ hexdump test_test
0000000 31 0a
0000002
31
est le code ASCII pour le caractère 1
, et 0a
est le code ASCII pour le caractère non imprimable LF
qui pour UNIX comme vous le savez peut-être déjà le code pour la fin de la ligne.
Expérience 2
Mais que faire si nous ouvrons un fichier qui n'a pas de eol
symbole à la fin du fichier. Vérifions-le aussi. Créons un fichier sans eol à la fin, par exemple comme ceci:
$ echo -n "1" > test_without_eol
Ensuite, regardons à l'intérieur avec hexdump:
$ hexdump test_without_eol
000000 31
0000001
Il n'y a donc aucun eol
personnage ici. Ouvrons ce fichier dans vim:
$ vim test_without_eol
Au bas de l'éditeur, vous verrez:
"test_without_eol" [noeol] 1L, 1C
Et si vous enregistrez ce fichier, le eol
caractère sera automatiquement ajouté.
Que pouvons-nous faire à ce sujet?
Si vous avez vraiment besoin de voir la fin du fichier. Essayez d'utiliser cette commande:
:set listchars=eol:$
il montrera tous les eol
caractères comme $
signe.
:set listchars=eol:$
Vim omet uniquement l'EOL si le fichier est ouvert en tant que
'binary'
et l''endofline'
option est réinitialisée (lorsque le fichier binaire n'avait pas d'EOL à l'ouverture, ou si vous réinitialisez explicitement l'option). En d'autres termes, Vim n'honore qu'un EOL manquant pour les fichiers binaires. Pour les fichiers texte, il écrit toujours avec un EOL (ajouté). (C'est pourquoi vous avez besoin de solutions comme mon plugin PreserveNoEOL pour conserver les fichiers texte sans EOL.) Vous pouvez trouver tous les détails sur:help 'endofline'
.Ainsi, vous devez uniquement vous assurer d' ouvrir le fichier en tant que non binaire afin que Vim écrive automatiquement un EOL.
la source
Comme Alexander l'a mentionné, Vim ne montre pas EOL à EOF, c'est pourquoi c'est si déroutant (en particulier avec une nouvelle ligne vide / vide qui est une autre chose), donc il écrit en fait à chaque fois lors de l'enregistrement du fichier.
Voici un test simple pour tester si cela fonctionne:
Remarquez le comportement de l'invite du shell lorsqu'il n'y a pas de fin de vie (elle est mélangée à la ligne suivante). Lors de la ré-enregistrement du fichier avec Vim, il l'ajoute.
En utilisant,
wc
nous pouvons compter les lignes, les mots et les caractères avant d'enregistrer et après, afin que nous puissions voir qu'il change réellement.Pourquoi c'est si important? Pour garder nos fichiers conformes POSIX .
la source