Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

はじめに

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
goshutf-8
fakecygptyutf-8

活用例

Windowsの場合

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

.vimrc
letg: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
letg:vimshell_interactive_encodings = {
\'/':'utf-8-mac',
\}
letg:vimshell_user_prompt ='iconv(fnamemodify(getcwd(), ":~"), "utf-8-mac", "char")'

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>