vim エンコーディング・言語設定まとめ

ここでは、vim(またはneovim)の文字エンコーディングの設定や、言語設定についてまとめていきます。

set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis
language C
Language message C

encoding(略称enc)

set encoding=utf-8
set enc=utf-8   " 略称での設定も可

encodingは、vim内部で使用される文字エンコーディングを設定します。設定したエンコーディングは、バッファやレジスタ内のテキスト等に使用されます。

encodingのデフォルト値は “latin1” または $LANG となっています。つまり、vimを開いている端末(ターミナル)にセットされているロケール(言語設定のための環境変数)の値がデフォルト値としてセットされます。

環境変数 $LANG の値は、端末(ターミナル)で以下のように入力すことで確認できます。

$ echo $LANG   # 出力 : ja_JP.UTF-8(筆者の場合)

つまり筆者の環境の場合、.vimrc(init.vim)にてencodingの設定を記述しなかった場合、encodingは自動的にutf-8が使われることになります。

エンコーディングについてよく分かっていない人は、とりあえずutf-8を指定すれば大丈夫でしょう。

encordingなど、文字エンコーディングを指定する際に使用できる文字列は、次のリンク内に詳しく説明されているので、確認してみると良いでしょう。

Vim日本語ドキュメント

fileencodings(略称fencs)

set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis
set fencs=utf-8,iso-2022-jp,euc-jp,sjis   " 略称での設定も可

次に出てくるfileencodingとは別物(sの有無の違い)なので注意しましょう。この変数は既存のファイル編集時、そのファイルの文字コード判別のために使用されます。値は、文字コードを表す文字列をカンマ区切りで複数列挙します。

vimで既存ファイルの編集を始める際、このfileencodingsで列挙された文字コードを先頭から順に試し、うまくいくものが使用されます。うまくいくものが見つかった場合、次に説明するfileencoding変数に、その文字コードを表す文字列が値として設定されます。

新規ファイルの場合は’ fileencodings’ は適用されず、代わりに ‘fileencoding’ のグローバルな値が適用されます。

この変数の規定値は “ucs-bom” または、 ‘encoding’の値がUnicodeに設定された時は、”ucs-bom,utf-8,default,latin1″ となります。

fileencoding(略称fenc)

set fileencoding=utf-8
set fenc=utf-8   " 略称での設定も可

fileencodingは、ローカルカレントバッファのファイルの文字エンコーディングを設定します。主にファイル書き出しの際の文字コードの指定として使われます。

‘fileencoding’と’encoding’が異なる時、ファイル書き出しの際に文字エンコーディングの変換が行われます。

既存のファイルの編集を始める際は、上のfileencodingsで説明したように、自動的にfileencodingが設定されます。新規ファイルに対しては、設定したfileencodingの値が使用されます。

fileencodingのデフォルト値は “” (空文字列)で、fileencodingが空の場合、’encoding’と同じ値が使用されます。

++enc

こちらは、.vimrc(init.vim)に記述するような内容ではないが、以上に記載した文字コード絡みの引数なので、合わせて紹介しておきます。

:e ++enc=sjis   # 現在編集しているファイルをsjisで開き直す

encoding関係でたまに使用するのが上記のようなコマンドです。「現在編集しているファイルを指定した文字コードで開き直す」というものです。

このような++encオプション付きでファイルを開いた場合、
当然ではあるが、’fileencodings’の値は考慮されません。そして、’fileencoding’ には、++enc=で指定した文字コードを表す文字列が格納されます。つまり、++encを指定して開いたファイルの書き出しの際は、指定した文字エンコーディングに変換されて書き出されることになります。

language(略称lan)

language C
lan C " 略称での設定も可

languageは、現在の言語(ロケール)を設定します。指定できる文字列はシステムによって異なるので、一度vim内で以下のコマンドを打ち、どのような文字列が指定できるのか確認してみると良いでしょう。

:!locale -a

この設定は、vim起動中のターミナルの環境変数 $LANG を書き換えます。

$ echo $LANG
ja_JP.UTF-8 # vim起動前の端末の環境変数 $LANG の値
$ vim
:language C
:!echo $LANG
C # vim内で language を設定(環境変数を書き換え
:q
$ echo $LANG
ja_JP.UTF-8 # vimを抜けると元に戻る

language message(略称lan mes)

language message C
lan mes C " 略称での設定も可

language messageは、vim内のメッセージに使用する言語を設定します。

[ language message 指定なし ]
1 行 削除しました; 前方 #1  1 second ago
[ language message C ]
1 line less; before #1  1 second ago

私はコード内にマルチバイト文字を極力書かないようにしていますので、メッセージが日本語で出てくる事に違和感を覚えます。そこで、language messageを用いてメッセージを英語表記にしています。

以上、vimのエンコーディング・言語設定についてでした。