如何在 Vim 中显示视觉选择的非空白字符数?

Hot*_*hke 1 vim shell piping

我想计算没有视觉选择空白的字符。直觉上,我尝试了以下操作

:'<,'>w !tr -d [:blank:] | wc -m
Run Code Online (Sandbox Code Playgroud)

但是vim不喜欢它。

glt*_*lts 5

这可以通过以下替代命令实现:

:'<,'>s/\%V\S//gn
Run Code Online (Sandbox Code Playgroud)

这两种神奇的成分是

  1. n替代命令的标志。它的作用是

    报告匹配次数,不要实际替换。(...) 用于计数项目。

    看看:h :s_flags,也看看:h count-items

  2. 零宽度原子\%V。它仅在视觉选择内匹配。作为零宽度匹配,它对以下原子\S“非空间”做出断言,该原子仅在视觉选择内时才匹配。见:h /\%V

因此,整个命令:s不会在全局范围内替换Visual selection 中的//每个非空白字符——只是它实际上不执行任何替换,而是报告它会有多少次!\S\%Vg