Что это за ^ M, которые продолжают появляться в моих файлах в emacs? - PullRequest
139 голосов
/ 01 декабря 2009

Так что я думаю, что это может иметь отношение к textmate, но мы работаем в небольшой команде и имеем некоторые проблемы с конфликтами полных файлов почти идентичных файлов в git, потому что к каждой строке одной ветви добавляется ^ M .

Что должен делать этот таинственный персонаж ^M, и откуда он может взяться?

Наши разработчики используют emacs для Windows / Mac, TextMate для Mac, coda для Mac и иногда текстовый редактор wp-admin.

Кто-нибудь когда-нибудь сталкивался с этой проблемой, связанной с одним из них?

Ответы [ 14 ]

97 голосов
/ 01 декабря 2009

В git-config , установите core.autocrlf на true, чтобы git автоматически преобразовывал окончания строк для вашей платформы, например выполните эту команду для глобальной настройки:

git config --global core.autocrlf true
90 голосов
/ 01 декабря 2009

Кто-то неправильно преобразовывает свои символы конца строки .

Я предполагаю, что это люди из Windows, так как они любят свой CRLF. Unix любит LF, а Mac любит CR до тех пор, пока ему не показали путь Unix.

28 голосов
/ 01 декабря 2009

^M - это 0x0d, то есть символ возврата каретки. Если ваш дисплей выглядит как

line 1^M
line 2^M

тогда файл должен быть из Windows, потому что стандартная последовательность новой строки в Windows равна CR LF (0x0d 0x0a), тогда как стандартная последовательность новой строки состоит только из LF в Unices.

Если файл пришел из системы Mac OS 9 или более ранней версии, вы увидите его как

line 1^Mline 2^M

потому что после возврата каретки не будет перевода строки.

15 голосов
/ 22 января 2018

Чтобы ^ M исчез в git, наберите:

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

Кредиты: https://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff/

8 голосов
/ 01 декабря 2009

Они имеют отношение к разнице между окончаниями линий в стиле DOS и стилем Unix. Ознакомьтесь с статьей Википедии . Возможно, вам удастся найти инструмент dos2unix или просто написать небольшой скрипт, чтобы исправить их самостоятельно.

Редактировать : Я нашел следующий пример кода Python здесь :

string.replace( str, '\r', '' )
6 голосов
/ 01 декабря 2009

вместо запроса-замены вы также можете использовать M-x delete-trailing-whitespace

4 голосов
/ 06 декабря 2017

Я использую Android Studio (JetBrains IntelliJ IDEA ) на Mac OS , и моя проблема заключалась в том, что ^ M начал появляться в некоторых мой запрос на получение GitHub . Для меня сработало изменение разделителя строк для файла.

Откройте нужный файл в редакторе перейдите на Файл перейти к Разделители строк затем выберите лучший вариант для вас (для меня это было LF - Unix и OS X (\ n) )

Согласно следующей статье эта проблема является результатом путаницы в конце строк между операционными системами: http://jonathonstaff.com/blog/issues-with-line-endings/

И дополнительную информацию вы можете найти здесь: https://www.jetbrains.com/help/idea/configuring-line-separators.html#d84378e48

enter image description here

4 голосов
/ 01 декабря 2009

Добавьте в свой ~/.emacs (или эквивалент)

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

и тогда вы сможете просто использовать M-x dos2unix.

4 голосов
/ 01 декабря 2009

^M в конце строки в Emacs указывает возврат каретки (\ r), за которым следует перевод строки (\ n). Вы часто будете видеть это, если один человек редактирует файлы в Windows (где конец строки - это комбинация символов возврата каретки и перевода строки), и вы редактируете в Unix или Linux (где конец строки - только символ новой строки).

Комбинация символов обычно не вредна. Если вы используете систему контроля версий, возможно, вы сможете настроить формат регистрации текстового файла так, чтобы строки волшебным образом настраивались для вас. Кроме того, вы можете использовать триггеры checkin и checkout, которые автоматически «исправят» файлы за вас. Или вы можете просто использовать инструмент типа dos2unix для ручной настройки.

2 голосов
/ 01 декабря 2009

Как все уже упоминали. Это другой стиль окончания строки. MacOSX использует окончания строки Unix - т.е. LF (перевод строки).

Windows использует CR (возврат каретки) и LF (перевод строки) в качестве окончания строки. Так как вы используете и Windows, и Mac, отсюда и проблема.

Если вы создаете файл в Windows, а затем переносите его на компьютер Mac, вы можете увидеть эти символы ^ M в конце строк.

Если вы хотите удалить их, вы можете сделать это очень легко в Emacs. Просто выделите и скопируйте символ ^ M и выполните запрос-замену ^ M, и все готово.

EDIT: Некоторые другие ссылки, которые могут быть полезны. http://xahlee.org/emacs/emacs_adv_tips.html

Этот поможет вам настроить emacs для использования определенного типа стиля окончания строки. http://www.emacswiki.org/emacs/EndOfLineTips

...