我想计算没有视觉选择空白的字符。 直觉上,我尝试了以下
:'<,'>w !tr -d [:blank:] | wc -m
但是vim并不喜欢它。
答案 0 :(得分:4)
使用以下替换命令可以实现:
:'<,'>s/\%V\S//gn
两种神奇的成分是
替换命令的n
标志。它的作用是
报告比赛次数,实际上不替换。 (...)用于计算物品。
请参阅:h :s_flags
,并查看:h count-items
。
零宽度原子\%V
。它仅在Visual选择内部匹配。作为零宽度匹配,它会对以下原子\S
“非空格”进行断言,仅在Visual选择内部时匹配。请参阅:h /\%V
。
因此,整个命令将:s
无//
替换为视觉选择\S
内的每个非空格字符\%V
,全局g
- 只有它实际上没有进行任何替换,而是报告它会有多少次!
答案 1 :(得分:2)
为了计算vim中视觉选择中的非空白字符,你可以做一个
:'<,'>s/\S/&/g
然后Vim将告诉它用自己(\S
)替换非空白字符(&
)的次数,即没有实际更改缓冲区。
答案 2 :(得分:1)
您必须转义shell的特殊字符,并更好地使用[:space:]
,因为它还会删除换行符。它应该是:
:'<,'>w !tr -d '[:space:]' | wc -m