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

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

encoding(略称enc)

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

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

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

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

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

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

Vim日本語ドキュメント

fileencodings(略称fencs)

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

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

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

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

fileencoding(略称fenc)

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

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

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

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

++enc

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

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

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

language(略称lan)

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

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

language message(略称lan mes)

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

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

 

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