はじめに
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を使っているので次のように設定しています。
このようにディレクトリを指定するとls
やfind
など他のコマンドも一括指定できます。
let g:vimshell_interactive_encodings = {
\'/Users/'.$USERNAME.'/AppData/Local/Atlassian/SourceTree/git_local/':'utf-8',
\}
OSXの場合
OSXのデフォルト文字コードはUTF-8なので問題なさそうに見えますが、ファイル名だけは改変NFDであるUTF-8-MACが使われているので、ファイル名を出力するls
やfind
で濁点、半濁点を含むファイル名の表示がおかしくなります。
そこで少し乱暴ですが/
に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")'