ファイル内の文字数のカウント

vimエディタの質問で、よくファイル内の文字数の数え方を聞く人がいるけど、
ひょっとして、こんなスクリプトが欲しいんじゃないかな?
(さっき思いついて作ったよ。私自身がこういうの欲しいな、と思ったんだ。)

" vim:set et ff=unix nowrap :
" WC:[1144/4200]:
augroup WC
    autocmd!
    autocmd BufUnload,FileWritePre,BufWritePre * call <SID>WC()
augroup END

function! s:WC()
    let l:current = 0
    let l:last = line('$')
    let l:charcount = s:CharCount()
    while l:current <= l:last
        let l:line = getline(l:current)
        call s:SearchAndReplace(l:line, l:current, l:charcount)
        let l:current += 1
    endwhile
endfunction

function! s:CharCount()
    let l:count = 0
    let l:current = 0
    let l:last = line('$')
    while l:current <= l:last
        let l:line = getline(l:current)
        let l:count += strlen(substitute(l:line, ".", "x", "g"))
        let l:current += 1
    endwhile
    return l:count
endfunction

function! s:SearchAndReplace(linetext, lineno, charcount)
    let l:found = match(a:linetext, 'WC:\[\d\{1,}/\d\{1,}]:')
    if l:found >= 0
        let l:pre  = substitute(a:linetext, '\(^.*WC:\[\)\d\{1,}\(/\d\{1,}]:.*$\)', '\1', '')
        let l:post = substitute(a:linetext, '\(^.*WC:\[\)\d\{1,}\(/\d\{1,}]:.*$\)', '\2', '')
        let l:newline = l:pre . a:charcount . l:post
        call setline(a:lineno, l:newline)
    endif
endfunction

このスクリプトをpluginディレクトリに入れると、
ファイル保存時に、あらかじめファイル内に書いておいた

WC:[数字/数字]:

の部分の左側数値が自動的にファイル内の文字数で置き換わる、autodate.vimっぽい動きのスクリプト
右の数値には、最大文字数でも入れておけば、あとどれくらい書けるか分かっていいね。


文字数結果表示行を入れたせいで文字数のカウントがずれるとか、
数え方が手抜きだとか、ハイライト表示してくれとか、
そういうのは、作ったばかりのスクリプトなので勘弁してください。


スクリプトをダウンロードできるようにしておくので、欲しい人はこっちから持って行ってくださいね。
http://nanasi.jp/dist/download/auto_wc.vim