559 votes

Que signifie le caractère ^M dans Vim ?

Je continue à avoir ^M dans mon vimrc et cela casse ma configuration.

44 votes

BTW este est une excellente ressource.

0 votes

@LightnessRacesinOrbit - Hm, ça marche aussi maintenant. Je me suis rétracté de mon commentaire disant que le lien était mort.

3 votes

Miroir pour le lien @LightnessRacesinOrbit, qui est en panne en ce moment : fifi.org/doc/vim/html/digraph.html#digraph-tableau

611voto

Tomasz Stanczak Points 4790

Unix utilise 0xA pour un caractère de nouvelle ligne. Windows utilise une combinaison de deux caractères : 0xD 0xA. 0xD est le caractère de retour chariot. ^M se trouve être la façon dont vim affiche 0xD (0x0D = 13, M est la 13ème lettre de l'alphabet anglais).

Vous pouvez supprimer tous les ^M en exécutant la commande suivante :

:%s/^M//g

Donde ^M est entré en maintenant la touche Ctrl et en tapant v suivi par m puis en relâchant Ctrl . Ce terme est parfois abrégé en ^V^M mais notez que vous devez le saisir comme décrit dans la phrase précédente, plutôt que de le taper littéralement.

Cette expression remplacera toutes les occurrences de ^M avec la chaîne vide (c'est-à-dire rien). Je l'utilise pour me débarrasser de ^M dans les fichiers copiés de Windows vers Unix (Solaris, Linux, OSX).

11 votes

Au cas où vous seriez sous Windows, Ctrl+V sera probablement associé à coller. Si c'est le cas, les valeurs par défaut remettent la touche "échappement des caractères spéciaux" en Ctrl+Q.

11 votes

La vraie question est de savoir pourquoi Vim détecte parfois automatiquement les fins de ligne et s'affiche correctement, et parfois non.

11 votes

Vous verrez le ^M si le fichier a des fins de lignes non concordantes. Utilisez la commande fournie par Tomasz, puis tapez :fileformat={unix|dos|mac} selon le système d'exploitation que vous visez. S'il n'y a que quelques lignes sans le ^M vous voulez probablement :fileformat=dos . Si vous modifiez des fichiers dans un éditeur autre que vim, assurez-vous qu'il est configuré pour faire correspondre les fins de ligne (Notepad ne le fera pas, mais tout éditeur réputé comme Notepad++ ou TextMate le fera).

152voto

dlk5730 Points 131
:%s/\r//g 

a fonctionné pour moi aujourd'hui. Mais ma situation a pu être légèrement différente.

1 votes

L'option g n'est pas nécessaire, il n'y a qu'une seule nouvelle ligne par ligne. :%s/\r// suffirait.

7 votes

L'option g peut très bien être nécessaire, car un retour chariot n'est pas nécessairement une nouvelle ligne. Lorsqu'il est ouvert en mode Unix, le retour chariot est juste un autre caractère, et lorsqu'il est ouvert en mode Windows, le retour chariot n'est qu'un caractère spécial immédiatement suivi d'un saut de ligne.

65voto

Mori Points 10767

Pour traduire la nouvelle ligne au lieu de la supprimer :

:%s/\r/\r/g

2 votes

Qu'est-ce que c'est censé faire ? J'ai l'impression qu'il s'agit d'une substitution de type "like for like", ce qui, à mon avis, ne change rien. Est-ce que je rate quelque chose de spécial dans le fonctionnement de la syntaxe ?

16 votes

@PlatinumAzure Je ne sais pas pourquoi personne n'a jamais pensé à répondre à votre question. \r a un comportement différent dans la partie recherche et dans la partie remplacement. Voir stackoverflow.com/a/3834303 par exemple.

0 votes

Ou :%s/^V^M/^V^M/g voir aquí

38voto

cnicutar Points 98451

Cela signifie probablement que vous avez des retours de chariot (les différents systèmes d'exploitation utilisent différentes manières de signaler la fin de la ligne).

Utilice dos2unix pour corriger les fichiers ou définir les formats de fichiers dans vim :

set ffs=unix,dos

4voto

Scott Wilson Points 5160

Vous pouvez corriger cela dans vim en utilisant

:1,$s/^V^M//g

où ^ est le caractère de contrôle.

2 votes

Cela n'explique pas ce que ^M est.

2 votes

Il ne demande pas vraiment ce que c'est, il demande comment le réparer. Ce que c'est, c'est un caractère de retour de chariot du DOS.

3 votes

I savoir ce que c'est. Le titre de la question est "Que signifie le caractère ^M dans Vim".

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