windows + cygwin + gvim(windows) + vimshell + java(windows)
な環境で、
set encoding=utf-8 set termencoding=utf-8
としているのだけど、java (or javac) を叩くと文字化けしてしまう。
set termencoding=cp932
とすれば化けないのだけど他で困るので一時的に変えるようにしたい。で、hook を利用してみた。
call vimshell#hook#set('preexec' , ['g:vimshell_preexec']) call vimshell#hook#set('preprompt', ['g:vimshell_preprompt']) " vim コマンド実行前処理 let s:is_vimshell_change_term_encoding = 0 function! g:vimshell_preexec(cmdline, context) " termencoding を変更するコマンドの場合 if s:is_vimshell_change_termencoding_cmd(a:cmdline) set termencoding=cp932 let s:is_vimshell_change_term_encoding = 1 endif return a:cmdline endfunction " vim コマンド実行後 function! g:vimshell_preprompt(args, context) if s:is_vimshell_change_term_encoding set termencoding=utf-8 let s:is_vimshell_change_term_encoding = 0 endif endfunction
preexec で変えて preprompt で戻す。preprompt の引数の内容がよく分からなかったのでスクリプト変数を使って termencoding の切り替えを判定する。
ちらっと試した感じでは問題なさそうなんだけどよう分からんとです。