LoginSignup
9
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-05-11

はじめに

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

exeのencodingオプション

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

使用例

$ exe --encoding=utf-8 git log

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

~/.vimshrc
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など他のコマンドも一括指定できます。

.vimrc
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のカレントディレクトリ名も同様に変換します。

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9