1

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

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

但是 vim 不喜欢它。

4

3 回答 3

5

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

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

这两种神奇的成分是

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

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

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

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

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

于 2013-11-11T19:47:55.670 回答
2

为了计算 vim 中视觉选择中的非空白字符,您可以执行

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

\SVim 然后会告诉它用它自己 ( )替换了非空白字符 ( ) 的次数&,也就是说,实际上并没有改变缓冲区。

于 2013-11-11T16:01:00.297 回答
1

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

:'<,'>w !tr -d '[:space:]' | wc -m
于 2013-11-11T15:57:16.357 回答