2009年6月11日木曜日

vimで開いたファイルに日本語が無かった場合の挙動を制御

vimで
set fileencodings=utf-8,ucs-bom,cp932,ucs-2,euc-jp
↑を書いておくと上から順に判定してくれる。ただしこう書いておくと困ることがある
日本語を含まないファイルを開くとUTF-8でfencしてしまう。(:eで新規作成するファイルはencの値を使われるので問題ない)
つーわけでスクリプトで解決する。
ずんwikiに日本語判定スクリプトがあったので参考にする
ただし、このスクリプトには問題があってsearch関数はカーソル以下を検索するのでカーソル前に日本語があっても見逃してしまう
例えば下記の例で3行目にカーソルがあると日本語なしと判断してしまう

aaa
ああああ
hogehoge←カーソル


こんな感じで書くといいんじゃないでしょうか
" 日本語を含まない場合は fileencoding に encoding を使うようにする
function! AU_ReCheck_FENC()
let l:c=line(".")
normal gg
if search("[^\x01-\x7e]", 'n') == 0
"let &fileencoding=&encoding
set fenc=cp932
call cursor(l:c,1)
endif
endfunction
autocmd BufReadPost * call AU_ReCheck_FENC()

0 件のコメント: