Vim で Shift-JIS・CRLF のファイルを開き UTF-8・LF に変換して保存する

Vim で Shift-JIS のファイルだったり、CR+LF なファイルを扱ったりする方法まとめ。

目次

エンコーディング・改行コード設定を確認する

先に、エンコーディング設定を確認する Vim コマンドを紹介しておく。今どういう状態なのか分からなくなったら、以下のそれぞれの Vim コマンドを打って、やりたいことに対してどういう差が出ている状態か確認しよう。

Shift-JIS のファイルを開く

Shit-JIS 形式で保存されているテキストファイルを Vim で開くと、最初は <E3> みたいな変な記号入りの、文字化けしたような見た目になると思う。コレは UTF-8 と解釈されてファイルが開かれているから。

そこで、次の Vim コマンドで、ファイルを Shift-JIS 形式で開き直す

# 以下のいずか一つを入力する (どれでも同じ)
:e ++enc=sjis
:e ++enc=cp932
:e ++encoding=sjis
:e ++encoding=cp932
:edit ++enc=sjis
:edit ++enc=cp932
:edit ++encoding=sjis
:edit ++encoding=cp932

それぞれ省略形があるよ、ということで、上のどの組み合わせでも、好きに指定して良い。

Shift-JIS のファイルを Shift-JIS 形式のまま保存する

上の :e ++enc=sjis という指定は、「ファイルを Shift-JIS 形式で開き直す」だけで、保存時のエンコーディング指定は別に行う必要がある。

Shift-JIS 形式のファイルを Shift-JIS 形式のまま保存するには、保存前に以下の Vim コマンドを入力する。

# 以下のいずか一つを入力する (どれでも同じ)
:se fenc=sjis
:se fenc=cp932
:se fileencoding=sjis
:se fileencoding=cp932
:set fenc=sjis
:set fenc=cp932
:set fileencoding=sjis
:set fileencoding=cp932

コチラも省略形があるだけで、どの組み合わせでも良い。

Shift-JIS 形式のファイルを UTF-8 形式で保存し直すには

ココまでの :e ++enc:se ++fenc を駆使すれば、Shift-JIS 形式のファイルを開いて UTF-8 形式で保存し直す、という作業もできるようになるだろう。

# ファイルを開いたら文字化けしていた・Shift-JIS 形式で開き直してみる
:e ++enc=sjis
# 文字化け解消・元ファイルは Shift-JIS 形式だったようだ

# 文字化けが解消している状態で、UTF-8 形式で保存し直すことにする
:se fenc=utf-8
# あとは保存するだけ
:w

コレで OK。

改行コードを CR+LF から LF に変更する

Bash ファイルが上手く動作しなくて、^M\r がどうしたとかいうエラーを見つけたりして、あーこりゃ改行コードが悪さしてねえか?と思った時に。

ファイルを Vim で開いたら、次の Vim コマンドで改行コードを確認してみよう。冒頭の章でも紹介している確認コマンドだ。

# 以下のいずれか一つで確認する
:se ff?
:se fileformat?
:set ff?
:set fileformat?

すると、

のいずれかがプロンプトに表示されると思う。それぞれ併記したとおり、改行コードの種類によって unixdosmac のいずれかで表現される。mac (CR のみ) という改行コードのファイルは今日びお目にかからないと思うのでココでは除外するとして、fileformat=dos と表示された時は、CR + LF でファイルが保存されていることになる。

コレを LF に直すには、次のように作業する。

# 以下のいずれかの Vim コマンドで、ファイルの改行コードを LF に変更して開き直す
:e ++ff=unix
:e  ++fileformat=unix
:edit ++ff=unix
:edit ++fileformat=unix
# すると、CR 部分が「^M」と表示されるようになるはず

# 以下のいずれかの置換コマンドで、キャリッジリターン制御文字を一括削除する
:%s/^M//g
#  ↑ 上の「^M」部分は Ctrl+V → Ctrl+M とキー入力することで入力してやる
:%s/\r//g
#  ↑ コチラは直接「\r」と記述すれば良いので、コチラの方が楽かも

# いずれかの置換コマンドを実行すると、ファイル中の「^M」が消えると思うので、このまま保存してやれば LF で保存できる
:w

最初にファイルを LF で開き直すのがポイント。CR はなんらかの一括置換で削除してやる。

LF 形式のファイルを CR+LF で保存し直す

あまりないパターンだとは思うが、あえて Windows 向けに CR + LF で保存したい場合は、次のように操作すれば良い。

:se ff?
# 上のコマンドで改行コードを確認したら fileformat=unix で LF だった
# このファイルを CR + LF で保存し直すとする

# 以下のいずれかの Vim コマンドで、ファイルの改行コードを CR + LF に変更する
:se ff=dos
:se fileformat=dos
:set ff=dos
:set fileformat=dos
# コレで自動的に CR が付与される

# ファイルを保存する
:w

コチラは一括置換などは必要なく、自動的に CR が一括付与される。

以上

コレだけ覚えれば後はよしなに柔軟な操作ができるだろう。

参考文献