Vim で Shift-JIS・CRLF のファイルを開き UTF-8・LF に変換して保存する
Vim で Shift-JIS のファイルだったり、CR+LF なファイルを扱ったりする方法まとめ。
目次
- エンコーディング・改行コード設定を確認する
- Shift-JIS のファイルを開く
- Shift-JIS のファイルを Shift-JIS 形式のまま保存する
- Shift-JIS 形式のファイルを UTF-8 形式で保存し直すには
- 改行コードを CR+LF から LF に変更する
- LF 形式のファイルを CR+LF で保存し直す
- 以上
- 参考文献
エンコーディング・改行コード設定を確認する
先に、エンコーディング設定を確認する Vim コマンドを紹介しておく。今どういう状態なのか分からなくなったら、以下のそれぞれの Vim コマンドを打って、やりたいことに対してどういう差が出ている状態か確認しよう。
- Vim のエンコードを確認する :
:set enc?
(enc?
=encoding?
)- Vim がファイルを開く時、何のエンコーディングで開こうとするかの指定
- ファイルのエンコードを確認する :
:set fenc?
(fenc?
=fileencoding?
)- 現在開いているファイルのエンコーディングを確認する
- ファイルの改行コードを確認する :
:set ff?
(ff?
=fileformat?
)- 現在開いているファイルの改行コードを確認する
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
:e
=:edit
++enc
=++encoding
sjis
=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
:se
=:set
++fenc
=++fileencoding
コチラも省略形があるだけで、どの組み合わせでも良い。
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?
すると、
fileformat=unix
(LF)fileformat=dos
(CR + LF)fileformat=mac
(CR)
のいずれかがプロンプトに表示されると思う。それぞれ併記したとおり、改行コードの種類によって unix
・dos
・mac
のいずれかで表現される。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 が一括付与される。
以上
:se enc?
・:se fenc?
・:se ff?
で現状を確認する : ハテナは確認:e ++enc=
や:e ++ff=
で開き直す :++
は:e(dit)
コマンドに対するオプション指定se fenc=
や:se ff=
でファイルの設定を変更する ::se(t)
で設定
コレだけ覚えれば後はよしなに柔軟な操作ができるだろう。