UNIX系OSでファイルを編集(行追加)した後に、viで開くと”^M”という変な記号が出る。
でも、diffを取ると差分は出ない。
”^M”という変な記号はWindowsの改行コードのCR部分をエラーと認識してしまうために起こる現象。
Windowsでの改行コードCR+LF、UNIX系OSでの改行コードがLF、なのでWindowsの改行コードCR+LFの内、CRが「^M」として見えてしまう。
ちなみに、viで開いた時にCRLFだけだと、”^M”は出ない。
でも、最初はCRLFだけのファイルで、一部行を追加してLFが含まれてしまうと、”^M”という変な記号が出てしまう。
vi ファイル名
vi -b ファイル名
で開けば、ファイルをバイナリモードで開いて”^M”が表示されるのでわかるかも。
:%!xxd
でバイナリ16進数ダンプ形式に変換
CR(Carriage Return:行頭復帰、コード0x0D)
LF(Line Feed:改行、コード0x0A)
たしかに、もともとCR+LF同士だとdiffで差分でないよね。
改行コードがCR+LFだけならviが気を利かせて”^M”を表示しないと。
で、改行コードが混在するから、viがきちんと”^M”を表示してくれると。
【参考】
Windowsのファイルを読み込むと、改行の位置に「^M」が・・・ – Linux系OS – 教えて!goo
http://oshiete.goo.ne.jp/qa/2413601.html
vimでバイナリを表示し、値を変更したい – rderaログ
http://d.hatena.ne.jp/rdera/20081022/1224682665