使用GVIM,我希望有一些类似于MSExcel提供的行数 - 一个即时行数,显示我到目前为止选择了多少行是非空白的(即不是' t只包含空格)。
到目前为止,我总是使用y
进行抽搐,然后在底部显示有多少条线被猛拉,但是:
实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
:substitute//n
的缺点是,它是最后一个搜索模式和搜索历史记录,它的输出包含其他文本,很难捕获。或者,您可以filter()
整个缓冲区,并计算匹配项:
:echo len(filter(getline(1, '$'), 'v:val =~# "\\S"'))
这可以很容易地转换为自定义映射或命令。如果性能可以接受,您甚至可以将其添加到'statusline'
:
:let &statusline .= ' %{len(filter(getline(1, "$"), ''v:val =~# "\\S"''))} lines'
注意:状态线更新在视觉选择期间不起作用,因为标记'<
和'>
仅在离开选择后设置。< / p>
答案 1 :(得分:1)
:%s/\S//n
3 matches on 3 lines
这结合了一个no-op :substitute
(带有/n
标志),它只计算匹配的行与\S
原子,它与非空格匹配。只要行中有任何此类行为,就会计算在内。
对于视觉选择,只需从那里触发;它会自动使用:'<,'>
范围代替:%
。
答案 2 :(得分:0)
获取可以使用的空白行数
:%s/^.\+//n
当然,您可以使用任何其他范围命令而不是%
但是,此方法仅计算非空行(没有空格)不以空格开头。有关计算搜索结果的一些提示可以找到here。
要允许空格识别,您可以使用类似
的内容:%s/^.*[^ ]\+//n