Quels sont ces ^M qui apparaissent dans Mes fichiers dans emacs?

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

Qu'est-ce que ce mystérieux personnage ^M est censé faire, et d'où pourrait-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-t-il déjà eu ce problème?

124
demandé sur random 2009-12-01 01:26:30

14 réponses

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 adore le LF et Mac aimait le CR jusqu'à ce qu'on lui montre la voie Unix.

86
répondu Broam 2009-11-30 22:29:20

dans git-config , mettez core.autocrlf à true pour que git convertisse automatiquement les fins de ligne correctement pour votre plate-forme.

91
répondu Josh Lee 2009-11-30 22:32:08

^M est 0x0d , c'est à dire le caractère de retour chariot. Si votre écran ressemble à

line 1^M
line 2^M

alors le fichier doit provenir de Windows parce que la séquence newline standard sur Windows est CR LF ( 0x0d 0x0a ) alors que la séquence newline standard se compose uniquement de LF sur Unices.

si le fichier venait d'un Mac OS 9 ou d'un système antérieur, vous le verriez comme

line 1^Mline 2^M

parce qu'il n'y aurait pas d'alimentation de ligne après le retour de la distribution.

28
répondu Sinan Ünür 2009-11-30 22:33:04

pour faire disparaître le ^M en git, tapez:

git config --global core.whitespace cr-at-eol

crédits: https://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff /

9
répondu bonif 2018-01-22 09:46:46

ils ont à voir avec la différence entre les fins de ligne de style DOS et le style Unix. Consultez L'article de Wikipedia . Vous pouvez être en mesure de trouver un dos2unix outil pour aider, ou tout simplement écrire un petit script pour les corriger vous-même.

Edit : j'ai trouvé le code D'échantillon de Python suivant ici :

string.replace( str, '\r', '' )
8
répondu Parappa 2009-11-30 22:29:03

au lieu de query-replace vous pouvez aussi utiliser M-x supprimer-fuite-espace

6
répondu kaineer 2009-12-01 07:18:44

mettez ce qui suit dans votre ~/.emacs (ou eqiuvalent)

(defun dos2unix ()
  "Replace DOS eolns CR LF with Unix eolns CR"
  (interactive)
    (goto-char (point-min))
      (while (search-forward "\r" nil t) (replace-match "")))

et alors vous pourriez simplement utiliser M-x dos2unix .

4
répondu Jakub Narębski 2009-12-01 14:43:05

^M à la fin de la ligne dans Emacs indique un retour de chariot (\r) suivi d'un retour de ligne (\n). Vous verrez souvent cela si une personne édite des fichiers sous Windows (où end of line est la combinaison du retour de chariot et des caractères newline) et que vous éditez sous Unix ou Linux (où end of line n'est qu'un caractère newline).

La combinaison de caractères n'est généralement pas dangereux. Si vous utilisez le contrôle source, vous pouvez configurer le texte le format de vérification de fichier pour que les lignes soient ajustées par magie pour vous. Alternativement, vous pouvez être en mesure d'utiliser checkin et checkout déclenche automatiquement "fixer" les fichiers pour vous. Ou, vous pouvez juste utiliser un outil comme dos2unix pour ajuster manuellement les choses.

4
répondu atk 2017-12-19 02:43:13

Comme tout le monde l'a mentionné. C'est un style de fin de ligne différent. MacOSX utilise les fins de ligne Unix-i.e. LF (line feed).

Windows utilise à la fois CR (carriage return) et LF (line feed) comme fin de ligne. Puisque vous utilisez à la fois windows et mac thats où le problème provient.

si vous créez un fichier dans windows puis l'apportez sur le mac vous pouvez voir ces caractères ^M à la fin des lignes.

Si vous voulez vous pouvez le faire très facilement dans emacs. Il suffit de surligner et de copier le caractère ^M et de faire une requête-replace ^M avec et vous avez terminé.

EDIT: Quelques autres liens qui peuvent être utiles. http://xahlee.org/emacs/emacs_adv_tips.html

celui-ci vous aide à configurer emacs pour utiliser un type particulier de style de fin de ligne. http://www.emacswiki.org/emacs/EndOfLineTips

2
répondu Matt 2009-11-30 22:41:39

j'utilise Android Studio (JetBrains IntelliJ IDEA ) sur Mac OS et mon problème était que ^M a commencé à apparaître dans certains fichiers de ma demande de pull sur GitHub . Ce qui a fonctionné pour moi était de changer le séparateur de ligne pour un fichier.

ouvrir le fichier désiré dans l'éditeur aller à Fichier aller à Séparateurs De Ligne ensuite, choisissez la meilleure option pour vous (pour moi, c'était LF - Unix et OS X (\n) )

selon l'article suivant ce problème est le résultat de fins confuses de ligne entre les systèmes d'exploitation: http://jonathonstaff.com/blog/issues-with-line-endings /

Et plus d'informations vous pouvez trouver ici: https://www.jetbrains.com/help/idea/configuring-line-separators.html#d84378e48

enter image description here

2
répondu CookieMonster 2017-12-06 13:26:01

j'ai rencontré ce numéro il y a quelque temps. Le ^M représente un retour de chariot, et la recherche sur Ctrl-Q Ctrl-M (ce qui crée un ^m littéral) vous permettra d'obtenir une poignée sur ce caractère dans Emacs. J'ai fait quelque chose dans ce sens:

M-x replace-string [ENTER] C-q C-m [ENTER] \n [ENTER]
1
répondu nedblorf 2009-12-01 15:56:27

voir aussi:

se cacher dans emacs

faites attention si vous choisissez de supprimer les caractères ^M et de les soumettre à nouveau à votre équipe. Ils peuvent voir un fichier sans retour de carriage par la suite.

1
répondu Demosthenex 2017-05-23 12:10:41

si vous n'avez pas dos2unix utility installé sur votre système, vous pouvez créer votre propre pour se débarrasser des caractères de fin de ligne de Windows:

vi ~/dos2unix.bash:

avec le contenu suivant

#!/bin/bash
tr -d '\r' <  > repl.tmp
mv -f repl.tmp 

dans votre ~/.bashrc, ajouter la ligne:

alias 'dos2unix=~/dos2unix.bash'

application

dos2unix file_from_PC.txt

supprimera les caractères ^M à la fin des lignes dans file_from_PC.txt. Vous pouvez vérifier si vous avez ou non à l'aide de chat:

cat -v file_from_PC.txt
0
répondu grapesh 2018-05-08 18:27:47

la solution pour moi était d'utiliser la fonction elisp suivante trouvée dans cet article de Wiki D'Emacs .

 (defun dos2unix ()
      "Not exactly but it's easier to remember"
      (interactive)
      (set-buffer-file-coding-system 'unix 't) )

exécute la fonction M-x dos2unix sur le buffer et enregistre le fichier, tout ^M disparaîtra.

0
répondu Carlo Rodríguez 2018-07-16 15:02:04