我想计算没有视觉选择空白的字符。直觉上,我尝试了以下
:'<,'>w !tr -d [:blank:] | wc -m
但是 vim 不喜欢它。
这可以通过以下替代命令来实现:
:'<,'>s/\%V\S//gn
这两种神奇的成分是
替代命令的n
标志。它的作用是
报告匹配数,不要实际替换。(...) 对计数项目很有用。
看看:h :s_flags
,也看看:h count-items
。
零宽度原子\%V
。它仅在 Visual 选择内匹配。作为零宽度匹配,它对以下原子\S
“非空格”进行断言,该原子仅在 Visual 选择内时匹配。见:h /\%V
。
因此,整个命令在全局范围内:s
不替换Visual selection//
中的每个非空白字符- 只是它实际上并没有执行任何替换,而是报告它会有多少次!\S
\%V
g
为了计算 vim 中视觉选择中的非空白字符,您可以执行
:'<,'>s/\S/&/g
\S
Vim 然后会告诉它用它自己 ( )替换了非空白字符 ( ) 的次数&
,也就是说,实际上并没有改变缓冲区。
您必须为 shell 转义特殊字符,并且使用[:space:]
更好,因为它也会删除换行符。它应该是:
:'<,'>w !tr -d '[:space:]' | wc -m