DEV Community

KOGA Mitsuhiro
KOGA Mitsuhiro

Posted on • Originally published at qiita.com

vimshellで文字コードを制御する

はじめに

Windowsのコマンドプロンプトに機能不足を感じるvimmerにとってvimshellは頼もしい存在です。
ですが、GitやGoのようにUTF-8を出力するコマンドでは文字化けしてしまいます。
そんな場合の対処方法を紹介します。

exeのencodingオプション

他のコマンドを実行するexe内部コマンドに--encodingオプションがあり、ここでコマンドが出力する文字コードを指定できます。
指定できる文字コードはiconvに準拠しています。

使用例

$ exe --encoding=utf-8 git log

以下のように~/.vimshrcにaliasを定義してもよいでしょう。

alias git='exe --encoding=utf-8 git'

g:vimshell_interactive_encodings変数

g:vimshell_interactive_encodings変数はキーにコマンド名、値が文字コードの辞書で、キーと一致したコマンドが実行されるとその出力は値で指定された文字コードで変換されます。
また、キーに/が含まれているとコマンド名ではなくコマンドのパスに含まれるかチェックされます。

Windowsの場合だけ以下の初期値が設定されています。

キー
/MinGW/bin/ utf-8
/msysgit/bin/ utf-8
/cygwin/bin/ utf-8
gosh utf-8
fakecygpty utf-8

活用例

Windowsの場合

SourceTree経由でインストールしたgitを使っているので次のように設定しています。
このようにディレクトリを指定するとlsfindなど他のコマンドも一括指定できます。

let g:vimshell_interactive_encodings = {
\'/Users/'.$USERNAME.'/AppData/Local/Atlassian/SourceTree/git_local/':'utf-8',
\}

OSXの場合

OSXのデフォルト文字コードはUTF-8なので問題なさそうに見えますが、ファイル名だけは改変NFDであるUTF-8-MACが使われているので、ファイル名を出力するlsfindで濁点、半濁点を含むファイル名の表示がおかしくなります。
そこで少し乱暴ですが/utf-8-macを指定してしまいます。
また、g:vimshell_user_promptのカレントディレクトリ名も同様に変換します。

let g:vimshell_interactive_encodings = {
\'/':'utf-8-mac',
\}
let g:vimshell_user_prompt = 'iconv(fnamemodify(getcwd(), ":~"), "utf-8-mac", "char")'

Top comments (0)