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?
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.
dans git-config , mettez core.autocrlf
à true
pour que git convertisse automatiquement les fins de ligne correctement pour votre plate-forme.
^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.
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 /
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', '' )
au lieu de query-replace vous pouvez aussi utiliser M-x supprimer-fuite-espace
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
.
^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.
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
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
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]
voir aussi:
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.
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
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.