Je travaille beaucoup avec wordpress et, parfois, je modifiais temporairement les fichiers core de wordpress afin de comprendre ce qui se passait, en particulier lors du débogage. Aujourd'hui, j'ai une petite surprise. Lorsque j'étais prêt à valider mes modifications dans mon référentiel git, j'ai remarqué que git status
marquait l'un des fichiers wordpress comme non mis en scène pour la validation. Je me souviens d’avoir annulé tous les changements que j’avais apportés à ce fichier avant de le fermer; j’ai donc décidé d’utiliser diff
pour voir ce qui avait changé. J'ai comparé le fichier de mon projet avec celui de la copie wordpress que je garde dans mon répertoire de téléchargements. Il s'avère que les fichiers diffèrent à la toute fin. diff
indique qu'il manque une nouvelle ligne à la fin du fichier d'origine:
1724c1724
< }
\ No newline at end of file
---
> }
Je n'ai même jamais touché cette ligne. Les modifications que j'ai apportées se situaient quelque part au milieu d'un fichier volumineux. Cela me porte à penser que vim a ajouté un caractère de nouvelle ligne à la fin du fichier. Pourquoi cela arriverait-il?
Toutes les réponses que j'ai vues ici répondent à la question "comment empêcher Vim d'ajouter un caractère de nouvelle ligne à la fin du fichier?", Alors que la question était "Pourquoi Vim ajouterait-il une nouvelle ligne la fin d'un fichier? ". Le moteur de recherche de mon navigateur m'a amené ici et je n'ai pas trouvé de réponse à cette question.
Cela est lié à la manière dont la norme POSIX définit une ligne (voir Pourquoi les fichiers doivent-ils se terminer par une nouvelle ligne? ). Donc, en gros, une ligne est:
- 3.206 Ligne
- Une séquence de zéro ou plusieurs caractères non <nouvelle ligne> plus un caractère <nouvelle ligne> de fin.
Et, par conséquent, ils doivent tous se terminer par un caractère de nouvelle ligne. C'est pourquoi Vim ajoute toujours une nouvelle ligne par défaut (car, selon POSIX, elle devrait toujours être là).
Ce n'est pas le seul éditeur à le faire. Gedit , l'éditeur de texte par défaut dans GNOME , fait exactement la même chose.
De nombreux autres outils s’attendent également à ce caractère de nouvelle ligne. Voir par exemple:
Vous pouvez aussi être intéressé par: Vim show newline à la fin du fichier .
Étant donné que vim
est un éditeur texte, il peut parfois "nettoyer" les fichiers pour vous.
Voir http://vimhelp.appspot.com/vim_faq.txt.html#faq-5.4 pour plus de détails sur la façon d'écrire sans fin de nouvelle ligne, paraphrasée ci-dessous:
Comment puis-je écrire un fichier sans saut de ligne (EOL) à la fin du fichier?
Vous pouvez désactiver l'option eol
et activer l'option binary
pour écrire un fichier sans EOL à la fin du fichier:
:set binary
:set noeol
:w
Alternativement, vous pouvez utiliser:
:set noeol
:w ++bin
L'ajout d'une nouvelle ligne est le comportement par défaut de Vim. Si vous n'en avez pas besoin, utilisez cette solution: VIM Désactiver la nouvelle ligne automatique à la fin du fichier
Pour le désactiver, ajoutez ceci à votre fichier .vimrc
set fileformats+=dos
Vous pouvez mettre la ligne suivante dans votre fichier .vimrc
autocmd FileType php setlocal noeol binary
Ce qui devrait faire l'affaire, mais en réalité, votre approche est un peu fausse. Tout d'abord, php
ne verra pas d'inconvénient à cette fin et deuxièmement, si vous ne souhaitez pas enregistrer vos modifications, n'appuyez pas sur u
ou, pire, essayez de recréer manuellement l'état du fichier, mais quittez sans enregistrer q!
. Si vous avez quitté l'éditeur et enregistré pour une raison quelconque, essayez git checkout <file>
3.206 Ligne Une séquence de zéro ou plusieurs non-caractères plus un caractère de fin.
Fait intéressant, vim vous permettra d’ouvrir un nouveau fichier, d’écrire le fichier et le fichier aura zéro octet. Si vous ouvrez un nouveau fichier et ajoutez une ligne à l'aide de "o", écrivez le fichier. Il comportera deux caractères. Si vous ouvrez ce fichier, sauvegardez, supprimez la deuxième ligne 'dd' et écrivez le fichier, il aura une longueur d'un octet. Ouvrez le fichier de sauvegarde et supprimez la seule ligne restante et écrivez le fichier, il sera zéro octet. Vim vous permettra donc d’écrire un fichier de zéro octet seulement tant qu’il est complètement vide. Semble défier la définition de posix ci-dessus. Je suppose...