197 votes

Qu'est-ce que ces ^M qui apparaissent sans cesse dans mes fichiers dans emacs ?

Je pense donc que cela peut avoir un rapport avec textmate, mais nous travaillons dans une petite équipe et nous avons quelques problèmes avec des conflits de fichiers complets de fichiers presque identiques dans git parce que chaque ligne d'une branche a un ^M ajouté.

Quel est ce mystérieux ^M est censé faire, et d'où peut-il venir ?

Nos développeurs utilisent emacs sur Windows/Mac, TextMate sur Mac, coda sur Mac, et occasionnellement l'éditeur de texte wp-admin.

Quelqu'un a déjà eu ce problème à cause d'un de ces appareils ?

4 votes

Pour ce que ça vaut : cherchez "ctrl" au lieu de ^.

3 votes

La question la plus importante est de savoir ce que vous allez faire à ce sujet. Il y a de fortes chances qu'Emacs ne les introduise pas. Votre équipe devrait décider si les fichiers doivent être au format DOS (avec ^M) ou au format Unix (sans ^M), et faire respecter cette règle.

161voto

Josh Lee Points 53741

Sur git-config ensemble core.autocrlf à true pour que git convertisse automatiquement les fins de ligne correctement pour votre plateforme, par exemple, exécutez cette commande pour un réglage global :

git config --global core.autocrlf true

6 votes

Je pense que c'est la meilleure réponse car elle répond à la question dans le contexte de l'OP, à savoir git.

0 votes

J'avais déjà "[core] \n autocrlf = true" dans mon fichier '~/.gitconfig', mais il me laisse toujours 'git clone code.google.com/p/pytomtom ' avec '^m' chars ?????

29 votes

Cette réponse UNIQUEMENT s'applique si votre plateforme est Windows ! Si vous travaillez sur Mac/Linux, "true" doit devenir "input" ! Voir aide.github.com/articles/traiter les fins de ligne et ici : stackoverflow.com/questions/9225599/

104voto

Broam Points 2646

Quelqu'un ne convertit pas correctement ses caractères de fin de ligne. .

Je suppose que ce sont les gens de Windows qui aiment leur CRLF. Unix aime le LF et Mac aimait le CR jusqu'à ce qu'on lui montre la voie d'Unix.

14 votes

Pour clarification : Mac utilisait CR jusqu'à la version 10 (OS X), maintenant il utilise LF.

36 votes

Je pense que la méthode de Windows est plus logique, puisque les termes CR et LF proviennent de l'époque des machines à écrire. Vous deviez faire les deux : un retour chariot pour amener le point de frappe au début de la ligne et un saut de ligne pour descendre d'une ligne. La méthode classique de Mac OS (CR) sur une machine à écrire ne fait qu'écraser la même ligne. La méthode Unix (LF) sur une machine à écrire produirait un texte décalé jusqu'à ce que vous atteigniez la largeur totale de la page :)

128 votes

@Otherside : plus logique seulement dans le sens "nous voulons émuler une machine à écrire". Je n'arrive pas à comprendre pourquoi cela est encore utile, même de loin.

40voto

Sinan Ünür Points 76179

^M es 0x0d c'est-à-dire le caractère retour chariot. Si votre affichage ressemble à

line 1^M
line 2^M

alors le fichier doit provenir de Windows car la séquence standard de nouvelles lignes sous Windows est CR LF ( 0x0d 0x0a ) alors que la séquence standard de nouvelles lignes est composée uniquement de LF sur les Unices.

Si le fichier provenait d'un système Mac OS 9 ou antérieur, vous le verriez sous la forme suivante

line 1^Mline 2^M

parce qu'il n'y aurait pas de saut de ligne après les retours chariot.

8voto

Parappa Points 4835

Ils ont à voir avec la différence entre les fins de ligne du style DOS et du style Unix. Consultez le Article de Wikipedia . Vous pourrez peut-être trouver un outil dos2unix pour vous aider, ou simplement écrire un petit script pour les réparer vous-même.

Modifier : J'ai trouvé l'exemple de code Python suivant aquí :

string.replace( str, '\r', '' )

4 votes

Dans Emacs, ce serait <code>M- : (remplacer la chaîne " \r " "")</code>.

7voto

kaineer Points 41

Au lieu de query-replace vous pouvez aussi utiliser M-x delete-trailing-whitespace (supprimer les espaces blancs)

0 votes

Cela n'a pas fonctionné pour moi... J'ai sélectionné tout le texte et exécuté la commande.

0 votes

Cela a fonctionné pour moi. Merci. @devrimbaris, vous n'avez pas besoin de sélectionner quoi que ce soit, vous devez simplement exécuter la commande. Le 'M' est la touche méta, ou la touche d'échappement. Donc M-x est escape puis x. Ensuite, vous tapez delete-trailing-whitespace, et appuyez sur return.

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