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など、文字エンコーディングを指定する際に使用できる文字列は、次のリンク内に詳しく説明されているので、確認してみると良いでしょう。
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のエンコーディング・言語設定についてでした。