emacsでファイルに表示され続ける^ Mは何ですか?


157

したがって、テキストメイトに関係している可能性があると思いますが、私たちは小さなチームで作業していて、1つのブランチの各行に^ Mが追加されているため、git内のほぼ同じファイルのフルファイルの競合に関する問題が発生しています。

この神秘的な^Mキャラクターは何をすることになっているのですか?それはどこから来たのでしょうか?

私たちの開発者は、Windows / Macではemacs、MacではTextMate、Macではcoda、そして時にはwp-adminテキストエディターを使用しています。

誰かがこの問題を原因としてこの問題を抱えたことはありますか?


3
価値のあるものについては、^ではなく "ctrl"を検索してください
Broam 2009年

3
より大きな問題は、あなたはそれについて何をするつもりですか?おそらく、Emacsはそれらを紹介していません。チームは、ファイルをDOS形式(^ Mを持つ)またはUnix形式(^ Mなし)にするかどうかを決定し、それを強制する必要があります。
トレイジャクソン

回答:


111

git-config設定、設定core.autocrlfするtrueGitは自動的に、例えば、ご使用のプラットフォーム用に正しく行末を変換するグローバル設定のため、このコマンドを実行するには:

git config --global core.autocrlf true

6
これはOPのコンテキストでの質問、つまりgitに答えるため、これが最良の答えだと思います。
ネオタピル2014年

「〜/ .gitconfig」ファイルに「[core] \ n autocrlf = true」がすでにありましたが、それでも「^ m」文字を使用して「git clone code.google.com/p/pytomtom」を実行できますか??? ??
ビッグリッチ

11
この回答は、プラットフォームがWindowsの場合にのみ適用されます。Mac / Linuxで作業する場合、「true」が「入力」になるはずです。参照help.github.com/articles/dealing-with-line-endingsこことを:stackoverflow.com/questions/9225599/...
K.マイケルエイ

警告:gitが行末が重要ではなく、変更する必要があると誤って「推測」すると、この回答は他の多くのファイルを破壊します。これは、これらの文字がデータファイルに存在するソフトウェアプロジェクトにとっては致命的です(そうです、私はこれに火をつけられており、壊れることがありません)。それは私にとってはひどい解決策です。
アダム

@Adam何が行末の変更を正確に壊しますか?データを操作するときにどこで問題がありましたか?それは何にも影響を与えるべきではなく、行の終わりをマークするための異なる方法です。ただ疑問に思います。
MBI 2018

97

誰かが行末文字を正しく変換していません

彼らは彼らのCRLFを愛しているので、私はそれはWindowsの人々だと思います。UnixはLFを愛し、MacはUnixのやり方が示されるまでCRを愛していました。


12
説明のために:Macではバージョン10(OS X)までCRを使用していましたが、現在はLFを使用しています。
ミカエルS

34
CRとLFという用語はタイプライターの時代から来ているので、Windowsの方がより論理的だと思います。両方を実行する必要がありました:入力ポイントを行の先頭に戻すキャリッジリターンと、1行下にスクロールするラインフィード。タイプライターのMac OSクラシックウェイ(CR)は、同じ行を上書きし続けるだけです。タイプライターのUnixウェイ(LF)は、ページの全幅に達するまで、ずらしたテキストを出力します。:)
その他の側

114
@Otherside:「タイプライターをエミュレートしたい」という意味でのみより論理的。それがリモートでさらに役立つ理由が理解できなくなりました。
Bryan Oakley

29
@その他、なぜ1文字で表現できるのに2文字で表現するのですか?
Matthew G

13
@マシューG:私たちの多くが同意する限り、すべてを1つの文字で表すことができます。それは私たちがすべきだという意味ですか?句読点や大文字を使わずにすべてのメッセージを入力できます。新しい行のすべての文を入力すれば、誰でも理解できます。それは私たちがすべきだという意味ですか?それは「できることから何かをする」ことではありません。そうは言っても、私はLFも好みます。
jaffog 2014

33

^Mis 0x0d、つまり復帰文字。ディスプレイが次のようになっている場合

行1 ^ M
行2 ^ M

Windowsの標準の改行シーケンスはCR LF0x0d 0x0a)なので、ファイルはWindowsからのものである必要がありますが、標準の改行シーケンスはLFUnices のみで構成されています。

ファイルがMac OS 9以前のシステムからのものである場合、次のように表示されます。

行1 ^ M行2 ^ M

キャリッジリターンに続くラインフィードがないためです。


28

^ 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/


1
何も変更しません。
Vivex 2018

3
git diffを使用したときに^ Mがディスプレイから消えるだけですが、それはまだそこにあります
FernandoZ

1
実際、^ Mは空白としてのみ表示されますが、git diffファイルを比較するときは^ Mが考慮されます。git config --global --unset core.whitespaceこのスレッドから)でこの設定を削除します。
miguelmorin

1
を省略し--globalて、現在のリポジトリを設定することもできます。
Derek Veit

8

それらは、DOSスタイルの行末とUnixスタイルの違いに関係しています。チェックアウトウィキペディアの記事を。役立つdos2unixツールを見つけるか、自分で修正するための小さなスクリプトを作成するだけです。

編集:私はここに次のPythonサンプルコードを見つけました:

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

3
Emacsでは、それは<code> M-:(replace-string "\ r" "")</ code>です。
huaiyuan

7

私はMac OSでAndroid Studio(JetBrains IntelliJ IDEA)を使用していますが、問題は^ 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

ここに画像の説明を入力してください


6

query-replaceの代わりに、Mx delete-trailing-whitespaceを使用することもできます


これはうまくいきませんでした...すべてのテキストを選択してコマンドを実行しました。
ᐅdevrimbaris

これは私のために働いた。ありがとう。@devrimbaris、何も選択する必要はなく、単にコマンドを実行します。「M」はメタキーまたはエスケープキーです。したがって、Mxはxの次にエスケープです。次に、delete-trailing-whitespaceと入力し、Enterキーを押します。
astromax、2015

5

あなたの~/.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

^MEmacsの行末の改行は、復帰(\ r)とそれに続く改行(\ n)を示しています。Windowsでファイルを編集し(行末はキャリッジリターンと改行文字の組み合わせ)、UnixまたはLinuxで編集すると(行末が改行文字のみ)、これがよく見られます。

文字の組み合わせは通常、害はありません。ソース管理を使用している場合は、テキストファイルのチェックイン形式を構成して、行が魔法のように調整されるようにすることができます。または、ファイルを自動的に「修正」するチェックインおよびチェックアウトトリガーを使用できる場合があります。または、dos2unixなどのツールを使用して手動で調整することもできます。


2

みんなが言ったように。別の行末スタイルです。MacOSXはUnixの行末、つまりLF(改行)を使用します。

Windowsは、CR(復帰)とLF(改行)の両方を行末として使用します。問題の原因となっているウィンドウとMacの両方を使用しているためです。

Windowsでファイルを作成し、それをMacに持ってくると、これらの^ M文字が行末に表示されることがあります。

それらを削除したい場合は、emacsでこれを非常に簡単に行うことができます。^ M文字を強調表示してコピーし、クエリ^ Mをに置き換えれば完了です。

編集:役立つかもしれないいくつかの他のリンク。 http://xahlee.org/emacs/emacs_adv_tips.html

これは、特定のタイプの改行スタイルを使用するようにemacsを構成するのに役立ちます。 http://www.emacswiki.org/emacs/EndOfLineTips


2

しばらく前にこの問題に遭遇しました。^ Mは復帰を表し、Ctrl-Q Ctrl-M(これによりリテラル^ Mが作成されます)を検索すると、Emacs内でこの文字のハンドルを取得できます。私はこれらの線に沿って何かをしました:

M-x replace-string [ENTER] C-q C-m [ENTER] \n [ENTER]

2

システムにdos2unixユーティリティがインストールされていない場合は、独自のユーティリティを作成してWindowsのエンドライン文字を取り除くことができます。

vi ~/dos2unix.bash:

次の内容で

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

〜/ .bashrcに次の行を追加します。

alias 'dos2unix=~/dos2unix.bash'

申請中

dos2unix file_from_PC.txt

file_from_PC.txtで終わる行の^ M文字を削除します。あなたはそれらを持っているかどうかをcatを使ってチェックできます:

cat -v file_from_PC.txt

1

以下も参照してください。

emacsで^ Mを非表示にする

^ M文字を削除してチームに再送信する場合は注意してください。その後、キャリッジリターンのないファイルが表示される場合があります。


0

私の解決策は、このEmacs Wiki記事にある次のelisp関数を使用することでした。

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

M-x dos2unixバッファで関数を実行してファイルを保存すると、すべて^Mが消えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.