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

时间:2013-11-11 15:53:00

标签: shell vim piping

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

:'<,'>w !tr -d [:blank:] | wc -m

但是vim并不喜欢它。

3 个答案:

答案 0 :(得分:4)

使用以下替换命令可以实现:

:'<,'>s/\%V\S//gn

两种神奇的成分是

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

      

    报告比赛次数,实际上不替换。 (...)用于计算物品。

    请参阅:h :s_flags,并查看:h count-items

  2. 零宽度原子\%V。它仅在Visual选择内部匹配。作为零宽度匹配,它会对以下原子\S“非空格”进行断言,仅在Visual选择内部时匹配。请参阅:h /\%V

  3. 因此,整个命令将:s//替换为视觉选择\S内的每个非空格字符\%V,全局g - 只有它实际上没有进行任何替换,而是报告它会有多少次!

答案 1 :(得分:2)

为了计算vim中视觉选择中的非空白字符,你可以做一个

:'<,'>s/\S/&/g

然后Vim将告诉它用自己(\S)替换非空白字符(&)的次数,即没有实际更改缓冲区。

答案 2 :(得分:1)

您必须转义shell的特殊字符,并更好地使用[:space:],因为它还会删除换行符。它应该是:

:'<,'>w !tr -d '[:space:]' | wc -m