Vimで文字数カウントをステータスラインに表示する
Vimで全角を含む文字数をカウントしたい場合、以下の置き換えコマンドで確認することができます。(nオプションはマッチの個数を表示し、実際には置換を行いません。)
:s/./&/gn
しかし頻繁に実行するのは面倒なうえ、set hlsearchされていると全体がハイライトされてしまいます。
ここでは、上記コマンドは使用せずにステータスラインに文字数カウントを表示する方法を紹介します。
Vimで文字数カウントをステータスラインに表示する
以下のページで文字数をカウントするためのVimスクリプトが公開されています。
バッファを開いた時や保存時に文字数が更新されるようになっているようですが、私の方ではインサートモードから抜けたタイミングでも更新するよう修正してみました。
augroup CharCounter
autocmd!
autocmd BufNew,BufEnter,BufWrite,InsertLeave * call <SID>Update()
augroup END
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
上記を適当な名前(cc.vimなど)でpluginフォルダに保存し、statuslineの設定に以下を加えます。(前後に空白を入れたい場合\でエスケープする必要があるので注意)
%{b:charCounterCount}
bufstat.vimを使っているとb:charCounterCountの未定義エラーが出ることがあったので、とりあえずfunction BufstatGenerateLisに「let b:charCounterCount = 0」を加えて応急処置しています。
参考ページ
- 文字数をカウントするには? - 平凡プログラマー
- Vimで文字数を数える - present
- 仮想化された日々:vimでの文字数カウント方法 - livedoor Blog(ブログ)
- Kawamura's ChangeLog - Vimで文字数カウント -
- 焚き火小屋の備忘録 : Vimで文字数をカウントする。
上記は「:s/./&/gn」による文字数カウントに言及されている記事。 - ファイル内の文字数のカウント - サイト更新停滞ちうっ
こちらはファイル内にカウントした文字数を挿入するタイプ。