vimのエンコーディングいろいろ ひとりぷちアドベントカレンダー2017 17日目
vim
のエンコーディング周りのメモです。
エンコーディングを指定して開き直す
化けてしまって別の設定で開き直したい時に使います。
大体はこのあたりのどれかでok。utf-8
はutf8
でも大丈夫です。
:e ++enc=shift_jis :e ++enc=cp932 :e ++enc=utf-8
場合によっては先に内部エンコーディングを変えておいた方が良いかもしれません。
set encoding=utf-8
エンコーディングを指定して保存する
開くのではなく、今のファイルを別の設定で保存したい時に使います。
:set fileencoding=utf-8
文字化けしにくいようにする
文字エンコーディングの候補を設定すると文字化け確率を減らせます。もちろん、候補に無い物は化けます...。
:set fileencodings=ucs-bom,utf-8,cp932
最初のucs-bom
は少し特殊な物で、バイトオーダーマーク(BOM)関係です。最初に入れておくと良いと思います。
候補の指定にはfileencodings
で、最後にs
が必要です。fileencoding
とは別のものです。
エンコードの判定
そもそもテキストファイルというものは、文字エンコードについての情報を持っていません。
そのため、各種エディタはいろいろ試して(あるいは固定)でエンコードを推測してくれています。
vim
の場合は、候補リストのfileencodings
と内部エンコーディングのencoding
を使って推測してくれます。
fileencodings
の先頭の設定で開いてみる。- 成功した場合は確定!
- 失敗した場合は、次の設定で繰り返す。
成功/失敗は、不正なバイト列があるかどうかで決まります。 なので、中身が空の場合や文字が少なく偶然成功した場合は、先頭の方の候補として誤認識される場合もあります。
ゴミが入っている場合も失敗します。utf8
なファイルだけど、壊れたバイトが含まれてしまっているという場合は失敗にしてしまいます。
以前にディスクがあふれて途中まで書きこまれ、壊れたバイトを含むため正しく開けない、なんてことがありました。
終わりに
テキストファイルさん、エンコード情報何処かに持っていてほしかったなあ。