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」を加えて応急処置しています。

参考ページ

blog comments powered by Disqus