ファイル内の文字数のカウント
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