web-dev-qa-db-ja.com

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

だから私はそれがテキストメイトに関係していると思うかもしれませんが、私たちは小さなチームで働いており、1つのブランチの各行に^ Mが追加されているため、git内のほぼ同一のファイルのフルファイル競合に関する問題を抱えています。

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

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

これらのいずれかに起因するこの問題を抱えている人はいますか?

140
Neil Sarkar

誰かが行末文字を正しく変換していない

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

92
Broam

git-config で、core.autocrlftrueに設定して、gitがプラットフォームの行末を自動的に正しく変換するようにします。グローバル設定のためにこのコマンドを実行します:

git config --global core.autocrlf true
98
Josh Lee

^M0x0d、つまり復帰文字です。ディスプレイが次のように見える場合

行1 ^ M 
行2 ^ M 

windowsの標準改行シーケンスはCRLF0x0d 0x0a)であるのに対して、ファイルはWindowsから来ている必要がありますが、標準改行シーケンスはUnicesのLFのみで構成されています。

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

 line 1 ^ Mline 2 ^ M 

キャリッジリターンの後に改行がないためです。

29
Sinan Ünür

Gitで^ Mを非表示にするには、次のように入力します。

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

クレジット: https://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff/

17
bonif

DOSスタイルの行末とUnixスタイルの違いに関係しています。 Wikipediaの記事 をご覧ください。役立つdos2unixツールを見つけることも、簡単に自分で修正する小さなスクリプトを作成することもできます。

Edit:次のPythonサンプルコードを見つけました here

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

query-replaceの代わりに、M-x delete-trailing-whitespaceも使用できます

6
kaineer

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

6
CookieMonster

以下を~/.emacs(または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 "")))

そして、あなたは単純にM-x dos2unixを使用することができます。

4
Jakub Narębski

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

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

4
atk

みんなが言ったように。異なる行末スタイルです。 MacOSXはUnixの行末記号を使用します-LF(改行)。

WindowsはCR(キャリッジリターン)とLF(改行)の両方を行末として使用します。 WindowsとMacの両方を使用しているため、問題の原因はそこにあります。

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

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

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

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

2
Matt

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

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

こちらもご覧ください:

emacsで^ Mを非表示にする

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

1
Demosthenex

システムに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
grapesh

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

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

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

0