Pourquoi je ne vois pas la différence entre deux fichiers différents en mode insertion dans vim?

8

Créons deux fichiers:

$ echo -n 'test' > test.txt
$ wc test.txt 
0 1 4 test.txt

Le fichier test.txtne contient pas la nouvelle ligne de fin.

$ echo 'test' > test_n.txt
$ wc test_n.txt 
1 1 5 test_n.txt

Le fichier test_n.txtcontient la nouvelle ligne de fin.

Les deux fichiers ci - dessus sont évidemment différentes, mais l'aperçu des fichiers en vimen mode d'insertion ne contient pas de différences:

$ vim test.txt

entrez la description de l'image ici

$ vim test_n.txt

entrez la description de l'image ici

Pourquoi n'y a-t-il pas de différence (nouvelle ligne ou distinction spéciale)?

Et que puis-je faire pour ajouter ou supprimer un tel caractère supplémentaire vimen mode insertion ?

simhumileco
la source
4
": set list" montrerait la différence, et il y a un mode que vous pouvez inspecter. Les deux sont dans les fichiers d'aide.
Thomas Dickey
Merci @ThomasDickey Je ne connaissais pas cette option auparavant.
simhumileco
1
@ThomasDickey si vous voulez ajouter une réponse, ce sera probablement la réponse acceptée. Je vous remercie.
simhumileco
2
@filbranden veuillez ne pas poster de réponses dans les commentaires. Les réponses dans les commentaires ne peuvent pas être votées par la communauté et ne marquent pas la question comme ayant reçu une réponse.
terdon
2
@ThomasDickey voir ci-dessus. Veuillez poster cela comme réponse.
terdon

Réponses:

12

vim a un mode "eol" (pour la fin de ligne) pour dire quoi faire si la dernière ligne du fichier n'a pas de caractère de nouvelle ligne . Vous pouvez voir tous les paramètres de mode dans vim (ou tout programme comme vi) en

:set all

POSIX vi n'a pas de fonctionnalité pour cela: les fichiers sont de longueur nulle ou ont une nouvelle ligne de fin. En effet, POSIX vi ne traite que des fichiers texte, qui sont par définition des lignes se terminant par des retours à la ligne. Dans une vérification rapide, nvi et elvis n'ont pas de modes pour cela. Dans mon commentaire, j'avais oublié un détail de vim: contrairement à vile, une ": set list" ne montre pas facilement la nouvelle ligne manquante. Voici ce que je vois dans vim:

ssss$
test$
~
~

en vile:

ssss^J
test
~
~

Pour l'un ou l'autre éditeur, vous pouvez lire le fichier, modifier le mode , par exemple,

:set noeol

et écrivez le fichier pour obtenir une nouvelle ligne sur le fichier mis à jour. Plutôt que de l'afficher directement, vous pouvez modifier la ligne d'état de vim pour afficher ces informations. Par défaut, cela ne semble pas le faire, mais certains emballeurs l'ont personnalisé, par exemple,

"foo" [noeol] 2L, 9C                                          1,1           All

L'un des commentaires suggère d'utiliser le "?" modificateur de la setcommande, par exemple,

:set eol?

qui pourrait montrer quelque chose comme ceci:

noendofline                                                   2,1           All

mais en mode insertion, qui est remplacé par

-- INSERT --                                                  2,1           All

la ligne d'état semble donc le bon endroit pour conserver ces informations.

Les fonctionnalités existent depuis un certain temps:

  • La eolfonctionnalité est apparue pour la première fois dans vim 2.4 (juillet 1994), selon un commentaire dans son code source.

  • vile's newlinemode est apparu en juillet 1993 .

( nvi, elvis, vim et vile gèrent tous les fichiers binaires en plus des fichiers texte de POSIX vi ).

Thomas Dickey
la source
2
près de 20 ans d'utilisation de vim, et j'apprends encore de nouvelles choses à ce sujet. et j'ai toujours peur des emacs. : D
Tim Kennedy
1
Dans vim, vous pouvez également :set eol?voir si eol est activé ou désactivé, vous n'avez donc pas à parcourir toutes les sorties de :set all.
Kevin
Une façon moins confuse de dire que "les fichiers sont de longueur nulle ou ont une nouvelle ligne" est "toutes les lignes se terminent par une nouvelle ligne et un fichier texte est une séquence de zéro ligne ou plus".
R .. GitHub STOP HELPING ICE