Voir les sauts de ligne et les retours chariot dans l'éditeur

180

Quelqu'un connaît-il un éditeur de texte sous Linux qui me permet de voir les sauts de ligne et les retours chariot? Vim prend-il en charge cette fonctionnalité?

test utilisateur
la source
1
REMARQUE: parfois, le retour à la ligne ($) et le retour chariot (^ M) sont masqués dans BEAUCOUP de jeux de couleurs, ainsi que lors de l'utilisation de putty pour ssh.
Vanessa Sanchez
1
OP Je pense que vous devriez reconsidérer la réponse choisie. car la réponse sélectionnée ne fonctionne pas. mais la réponse CaptSaltyJack fonctionne bien.
JavaSheriff
OP Ce qui montrera BOTH est la solution de @arno. J'avais besoin de voir LES DEUX, parce que j'ai un fichier utilisant au hasard les 3 formats de fichier ... Et la solution d'Arno fonctionne
Wayne Walker

Réponses:

139

:set listdans Vim affichera des espaces. La fin des lignes est représentée par « $» et les retours chariot sont généralement affichés par « ^M».

jay.lee
la source
2
Même question ici: superuser.com/questions/97692/…
Alec Jacobson
254
Incorrect, :set listN'affichera PAS les ^Mcaractères (CR). Fournir l' -boption à vi / vim fonctionnera. Ou, une fois que vim est chargé, tapez::e ++ff=unix
CaptSaltyJack
15
Pour info, pour désactiver le mode "set list", utilisez:set nolist
Tomofumi
@Tomofumi une retouche avec votre perposition sera la bienvenue!
Pipo
1
Mauvaise réponse. : la liste des ensembles n'affichera PAS ^ M caractères (CR). Utilisez l'option -b pour vi / vim fonctionnera.
nanosoft
265

Pour ne pas être d'accord avec la réponse officielle:

:set listne pas montrer ^ caractères M (SNPC). Fournir l'option -b à vi / vim fonctionnera. Ou, une fois que vim est chargé, tapez :e ++ff=unix.

CaptSaltyJack
la source
4
C'est la syntaxe. :help editspectacles e[dit]! [++opt] [+cmd]. Et :help ++edit que l' argument [++ opt] peut être utilisé pour forcer la valeur de 'fileformat' [..] .
dennis
19
juste pour clarifier, :set listmontre newline ( $), :e ++ff=unixmontre CR ( ^M); si vous voulez voir les deux, :set listalors:e ++ff=unix
Yibo Yang
5
Pour développer le commentaire de @ dennis, :set ff=unixdit à Vim de changer les fins de ligne en style Unix (dans le cadre de la définition du format de fichier), de sorte que les caractères ^ M ne soient plus là (et ne sont donc pas affichés). :e ++ff=unixlui dit de forcer le format du fichier comme unixsans modifier réellement le contenu. Ainsi, vim le lit comme un fichier Unix, voit les caractères CR comme supplémentaires et les affiche comme ^ M.
sundar - Réintégrer Monica le
2
Ni l'un ni l'autre ne fonctionne toujours pour moi vimpour une raison quelconque ... Je ne veux dire ni -boption, ni :e ++ff=unixà l'intérieur :(
RAM237
3
tout droit,: e ++ ff = unix a fonctionné. Maintenant, comment puis-je le désactiver?
Croo
78

VI montre les nouvelles lignes (caractère LF, code x0A) en affichant le texte suivant sur la ligne suivante.

Utilisez le -bcommutateur pour le mode binaire. Par exemple vi -b filenameou vim -b filename --.

Il affichera alors les caractères CR ( x0D), qui ne sont normalement pas utilisés dans les fichiers de style Unix, comme caractères ^M.

Larry K
la source
Je n'ai généralement pas besoin de voir la fin de la ligne, car je travaille principalement dans l' Unixenvironnement. Mais je voudrais être averti des fins de ligne de type Windows s'il y en a dans le fichier. Est-ce que vi -b filenameou :set binarysimplement montrer ^Ms'il s'agit d'un fichier de type Windows et pas d'autres fins de ligne autrement?
alpha_989
31

Juste pour clarifier pourquoi :set listne montrera pas les CR comme ^Msans e ++ff=unixet pourquoi :set listn'a rien à voir avec ^Mles.

En interne, lorsque Vim lit un fichier dans sa mémoire tampon, il remplace tous les caractères de fin de ligne par sa propre représentation (appelons- $la). Pour déterminer quels caractères doivent être supprimés, il détecte d'abord dans quel format les fins de ligne sont stockées dans un fichier. S'il n'y a que CRLF '\r\n'ou uniquement CR '\r'ou uniquement des '\n'caractères de fin de ligne LF , alors 'fileformat'est défini sur dos, macet unixrespectivement.

Lorsque l' listoption est définie, Vim affiche un $caractère lorsque le saut de ligne s'est produit, quelle que soit l' fileformatoption détectée. Il utilise sa propre représentation interne des sauts de ligne et c'est ce qu'il affiche.

Désormais, lorsque vous écrivez du tampon sur le disque, Vim insère des caractères de fin de ligne en fonction des fileformatoptions détectées, convertissant essentiellement tous ces internes $avec les caractères appropriés. Si le se fileformatproduit, unixil écrira simplement \nà la place de son saut de ligne interne.

L'astuce consiste à forcer Vim à lire un dosfichier codé en unixun seul. L'effet net est qu'il supprimera toutes \nles \rparties intactes et les affichera comme étant ^Mdans votre tampon. Le réglage :set listaffichera également les fins de ligne internes sous la forme $. Après tout, vous voyez ^M$à la place des dossauts de ligne codés.

Notez également que cela :set listn'a rien à voir avec les projections ^M. Vous pouvez le vérifier par vous-même (assurez-vous que vous avez d'abord désactivé l' listoption) en insérant un CR unique en utilisant CTRL-Vsuivi de Enteren mode insertion. Après avoir écrit le tampon sur le disque et l'avoir ouvert à nouveau, vous verrez ^Mbien que l' listoption soit définie sur 0.

Vous pouvez en savoir plus sur les formats de fichiers sur http://vim.wikia.com/wiki/File_format ou en tapant :help 'fileformat'Vim.

Paweł Smolak
la source
11

Essayez la commande suivante.

: définir le binaire

Dans VIM, cela devrait faire la même chose que l'utilisation de l'option de ligne de commande "-b". Si vous mettez ceci dans votre fichier de démarrage (ie .vimrc), il sera toujours en place pour vous.

Sur de nombreux systèmes * nix, il existe une commande «dos2unix» ou «unix2dos» qui peut traiter le fichier et corriger tout problème de fin de ligne suspecté. S'il n'y a aucun problème avec les fins de ligne, les fichiers ne seront pas modifiés.

Brian S. Wilson
la source
Malheureusement, dans mon système (Ubuntu 16.04) set binaryn'est pas le même que vim -b filename.py. Une idée pourquoi? J'ai vérifié helpet il semble que ce que vous dites est généralement correct. Comment puis-je comprendre pourquoi il en est ainsi?
alpha_989
:e ++ff=unixmontre le ^Mcorrectement et ne le montre pas quand j'utilise unixdes fichiers de type .. Donc je suppose que le problème est résolu pour l'instant ...
alpha_989
6

Je vous suggère de modifier votre fichier .vimrc, pour exécuter une liste de commandes. Modifiez votre fichier .vimrc, comme ceci:

cat >> ~/.vimrc <<EOF
set ffs=unix
set encoding=utf-8
set fileencoding=utf-8
set listchars=eol:¶
set list
EOF

Lorsque vous exécutez vim, les commandes dans .vimrc sont exécutées, et vous pouvez voir cet exemple:

My line with CRLF eol here ^M¶
Arno
la source
2

en utilisant catet -Avous pouvez voir les nouvelles lignes sous forme d' $onglets comme^I
cat -A myfile

mirhossein
la source
0

Vous pouvez afficher les lignes de rupture à l'aide de l' éditeur gedit .

Tout d'abord, si vous n'avez pas installé:

sudo apt-get install gedit

Maintenant, installez les plugins gedit :

sudo apt-get install gedit-plugins

et sélectionnez le plugin Draw Spaces , entrez dans Préférences, et choisissez Dessiner de nouvelles lignes

entrez la description de l'image ici

entrez la description de l'image ici

En utilisant VSCode, vous pouvez installer l' extension de fin de ligne .

Sublime Text 3 a un plugin appelé RawLineEdit qui affichera les fins de ligne et permettra l'insertion d'un type de fin de ligne arbitraire

shift + ctrl + p et commencez à saisir le nom du plugin, et basculez pour afficher la fin de la ligne.

Danilo
la source