2013-07-28 28 views
1

我經常使用VIM在報紙或博客網站上撰寫評論。如何在輸入時對字符進行計數?

通常會有最大數量的字符需要輸入。

如何創建一個計數器(在狀態欄中的p.e.)來查看輸入時鍵入的字符(包括空格)?

+1

你可以用'gCTRL-G',看看有多少字節的緩衝區,如果你使用ASCII這是非常接近的字符。每當你離開插入模式或者類似的東西時,你都可以做一個映射來看看。 – pandubear

+0

@pandubear,是的,我知道,但我想打字時看到它(只有字符數) – Reman

回答

6

'statusline'設置允許使用%{...}特殊項目評估表達式。

因此,如果我們能夠想出一個表達式來返回當前緩衝區中的字符數(不是字節數!),我們可以將它結合到狀態行中來解決問題。

此命令執行它:

:set statusline+=\ %{strwidth(join(getline(1,'$'),'\ '))} 

對於文本與CJK charactersstrwidth()不夠好,因爲它返回一個顯示單元數,而不是字符數。如果全角字符的是的要求的一部分,而不是使用這種改進的版本:

:set statusline+=\ %{strlen(substitute(join(getline(1,'$'),'.'),'.','.','g'))} 

但要注意的是,表達是在每一個變化到緩衝器評價。

請參閱:h 'statusline'


週日下午獎金 - 光標下的字符位置也被打包成一個單一的表達。不爲微弱的心臟:

:set statusline+=\ %{strlen(substitute(join(add(getline(1,line('.')-1),strpart(getline('.'),0,col('.')-1)),'.'),'.','.','g'))+1} 
+0

這很酷。 – pandubear

+0

非常好。非常感謝你!我發現這個也很有用:它計數直到遊標'strlen(替換(join(getline(1,'$'),'。'),'。','。','g'))'然而,在正常模式下不工作,當我將光標移動到文本上時。你知道爲什麼嗎? – Reman

+0

@Remonn該表達式適用於緩衝區中的所有字符。我已經爲光標下的字符添加了表達式 - 請參閱我的編輯。 – glts

相關問題