如何在打字时统计字符?

Rem*_*man 2 vim character

我经常使用VIM在报纸或博客网站上撰写评论.

通常需要输入最多字符数.

如何在键入时创建一个计数器(状态栏中的pe)以查看我键入的字符(包括空格)?

glt*_*lts 5

'statusline'设置允许使用%{...}特殊项目评估表达式.

因此,如果我们能够提出一个表达式来返回当前缓冲区中的字符数(而不是字节!),我们可以将其合并到状态行中以解决问题.

这个命令做到了:

:set statusline+=\ %{strwidth(join(getline(1,'$'),'\ '))}
Run Code Online (Sandbox Code Playgroud)

对于带有CJK字符的 文本strwidth()不够好,因为它返回显示单元格数,而不是字符数.如果双宽字符是要求的一部分,请改用此改进版本:

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

但请注意,表达式是在缓冲区的每次更改时进行评估的.

:h 'statusline'.


星期日下午奖金 - 光标下的角色位置也可以打包成一个表达式.不适合胆小的人:

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