文字数カウントスクリプト

vimエディタの質問で、よくファイル内の文字数の数え方を聞く人がいるけど、

ひょっとして、こんなスクリプトが欲しいんじゃないかな?

(さっき思いついて作ったよ。私自身がこういうの欲しいな、と思ったんだ。)

これをみて、ステータスラインに表示するのに都合が良いようにしてみた。
(ステータスラインに関数を直接埋め込むと大変なことになりそうなので変数を更新する方式で)
WC:[0/0] とか埋め込んで書き換えちゃうと変更あつかいになっちゃうし…

" Tue Apr 22 07:49:35 JST 2008
"
" b:charCounterCount に文字数をセットするスクリプト
" バッファを保存したりしたときに、更新される。
"
" ステータスラインに入れて使う例↓
" set statusline=%{b:charCounterCount}

if exists("anekos_charCounter")
	finish
endif
let anekos_charCounter=1

augroup CharCounter
	autocmd!
	autocmd BufCreate,BufEnter * call <SID>Initialize()
	autocmd BufUnload,FileWritePre,BufWritePre * call <SID>Update()
augroup END

function! s:Initialize()
	if exists('b:charCounterCount')
	else
		return s:Update()
	endif
endfunction

function! s:Update()
	let b:charCounterCount = s:CharCount()
endfunction

function! s:CharCount()
	let l:result = 0
	for l:linenum in range(0, line('$'))
		let l:line = getline(l:linenum)
		let l:result += strlen(substitute(l:line, ".", "x", "g"))
	endfor
	return l:result
endfunction

function! AnekoS_CharCounter_CharCount()
	return s:CharCount()
endfunction

http://www.kurinton.net/~snca/blogfiles/ank_cc.vim

08/22 07:51

Initializeを使うように修正