该'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)
但请注意,表达式是在缓冲区的每次更改时进行评估的.
星期日下午奖金 - 光标下的角色位置也可以打包成一个表达式.不适合胆小的人:
:set statusline+=\ %{strlen(substitute(join(add(getline(1,line('.')-1),strpart(getline('.'),0,col('.')-1)),'.'),'.','.','g'))+1}
Run Code Online (Sandbox Code Playgroud)