82 votes

gVim affiche le retour chariot (^M) même lorsque le mode fichier est explicitement DOS

J'utilise gVim sous Windows. Mon code montre ^M les caractères en fin de ligne. J'ai utilisé :set ff=dos en vain. Le site ^M restent pour les lignes existantes, mais n'apparaissent pas pour les nouvelles lignes que je saisis. J'ai changé de mode pour passer en mode Mac (affiche ^J ) et unix (montre également ^M caractères) et retour à dos. Quelqu'un d'autre a-t-il vu cela ?

0 votes

Ver vim.wikia.com/wiki/File_format pour une explication complète des fins de ligne dans vim/gvim. Ce lien explique également comment résoudre le problème.

144voto

richq Points 29694

Cela se produit lorsque vous avez un mélange de terminaisons de ligne Windows et Unix. Si vous avez 100 lignes, 99 sont \r\n et l'un d'eux est \n vous verrez 99 caractères ^M. La solution est de trouver cette ligne et de la remplacer. Ou exécutez dos2unix sur le fichier. Vous pouvez remplacer les fins de ligne de Windows par :

:%s/\r\(\n\)/\1/g

0 votes

J'ai trouvé cette ligne juste avant que tu n'écrives ceci. :) Merci !

1 votes

Heh, typique. Vim est génial, alors restez-en là ! :-)

2 votes

J'aimerais pouvoir te donner +1000 pour ça.

45voto

beckelmw Points 929

Vous pouvez aussi courir :

:e ++ff=dos

Pour retirer le ^M : Voir Format de fichier - Vim Tips Wiki .

4 votes

C'est ce que je cherchais, et c'est la bonne réponse. Merci.

19voto

Evan Points 9261

J'utilise généralement ce qui suit pour nettoyer mes fins de lignes :

:g/^M$/s///

Pour obtenir le ctrl-M, je tape habituellement ctrl-Q, puis ctrl-M et il le met dedans. (Dans certains environnements, cela peut être ctrl-V puis ctrl-M.) Je ne sais pas pourquoi, mais je trouve cette méthode plus facile à mémoriser que rq 's.

N'oubliez pas de faire :set ff=dos aussi, ou vous finirez par sauvegarder avec les terminaisons de ligne UNIX encore.

0 votes

Oui, j'utilise normalement la version ^M avec Ctrl-Q et tout ça. Mais c'est plus difficile à expliquer ;-) et la version group match est plus facile à copier-coller.

15voto

dsrekab Points 306

Je sais qu'on a déjà répondu à cette question, mais une astuce que j'utilise est la suivante .

:%s/\r/\r/g

Cela remplace les retours de chariot unix par le CRLF de Windows. Juste ajouté au cas où quelqu'un d'autre aurait des problèmes.

6voto

Ivan Malyshev Points 369

Vous pouvez ignorer ces caractères !

mettez ceci dans votre vimrc

match Ignorer / \r $/

1 votes

C'est bien de savoir que cela existe, mais y a-t-il un bon cas d'utilisation pour laisser des fins de lignes non concordantes dans un fichier ? Il semble que ce soit une source de problèmes.

1 votes

C'est plus ce dont j'avais besoin (modifier le fichier n'est pas toujours conseillé lorsque cela entraîne des modifications massives d'un fichier qui apparaissent dans certains systèmes de contrôle de révision).

0 votes

Malheureusement, cela change les fins de ligne dès que vous enregistrez le fichier. Cela produit donc exactement ces grands changements non désirés dans l'espace blanc, mais sans vous le montrer. Du moins pour moi :(

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X