Hero

USキーボードのMacでvimを使うときの日本語文字化けとその解決法

  • Insight
    那須 毅康(Takayasu Nasu - Tack)

M2 MacBook AirのターミナルでVimエディタを使って日本語を含むファイルを開くとなぜか日本語部分が文字化け。この問題を解決するために色々調べてみて、そのことを備忘録として記事にしてみました。

解決方法

最終的に以下のように.vimrcを変更して解決しました。

set termencoding=euc-jp

set termencoding=utf-8

うまくいかなかったことその1

前提として元々の.vimrcには下記が含まれています。

set encoding=utf-8
set fileencodings=ucs-bom,iso-2022-jp-3,iso-2022-jp,eucjp-ms,euc-jisx0213,euc-jp,sjis,cp932,utf-8

vimのコマンドモードで

:set encoding=utf-8

うまくいかなかったことその2

.zshrcに以下を追加

export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8

termencodingは何をしているのか?

Vimの termencoding 設定は、Vimがターミナルと通信する際に使用する文字エンコーディングを指定します。

set termencoding=utf-8を設定すると、Vimはターミナルとの間でUTF-8エンコーディングを使用します。世界中のほとんど全ての文字を含むことができるのがUTF-8の特徴で、現在のウェブ上ではもっとも一般的に使用されるエンコーディングです。

set termencoding=euc-jpを設定すると、Vimはターミナルとの間でEUC-JPエンコーディングを使用します。EUC-JPは比較的古いエンコーディング方式で、特にUNIX系のシステムでよく使われましたが、現在ではUTF-8に取って代わられつつあります。

この設定の違いは、少々難解に思えますが、要はターミナルがどのエンコーディングを理解できるかという点に尽きます。例えば、ターミナルがUTF-8しか理解できない場合、VimがEUC-JPで文字を送信すると、残念ながら文字化けが発生します。この逆もまた然りで、ターミナルがEUC-JPしか理解できない場合、VimがUTF-8で文字を送信すると、やはり文字化けという問題に直面します。

その一方で、各エンコーディングが適切に設定されていれば、我々は心地よく日本語の文字を見ることができます。ただし、例えば絵文字などの特定のUnicode文字はEUC-JPでは表現できないため、そのような文字を含む文書を編集する場合、やはりUTF-8の方が適しています。

結局、ターミナルがどのエンコーディングを理解できるかが重要であり、その選択が文字化けの原因だったということがわかりました。これはとても学びのある経験だったので、記事にして共有することにしました。

Other Insights