vi で改行コードの文字化けを修正する

WindowsUnix 間でファイルをやりとりしていると改行コードがおかしくなってしまう事がある。 vi なんかでファイルを開いた時に行末に ^M と表示される現象だ。
これは、改行コードが LF のシステム上で、改行コードが CRLF になっているファイルを開くと CR の部分が化けて表示されるためにおこる。または、ファイル転送の際におかしい事になって*1、改行コードが CRCRLF になっちゃったりした時にもお目にかかる事になる。
ちなみになんで ^M になるかというと、 CR は16進表記では 0x0D 、十進表記では 13 になる。そして、 M はアルファベットの 13 番目の文字だ。多分、そういう理由。


文字化けが発生する原因は余分な CR が原因であるので、それを取り除けば問題は解決する。
vi の文字列置換を使用して CR を取り除くための手順は以下の通り。
1, まず、: を押下しコマンドモードに入る。
2, 以下を入力する。先頭の : はプロンプトなので入力する必要は無い。

:%s/^M//g

キモは ^M の部分で、ここの入力は「Ctrl+V」「Ctrl+M」で入力する。「Ctrl+V」で ^ が、次の「Ctrl+M」で M が入力される。そのまま ^M と打っても駄目なので注意が必要である。
3, あとは実行すれば、そのファイル中の ^M は全て消え去る。

*1:正確には設定がおかしいのだが