Vim - 计算非空白非空白行

时间:2014-01-02 12:37:12

标签: vim

使用GVIM,我希望有一些类似于MSExcel提供的行数 - 一个即时行数,显示我到目前为止选择了多少行是非空白的(即不是' t只包含空格)。

到目前为止,我总是使用y进行抽搐,然后在底部显示有多少条线被猛拉,但是:

  1. 这不是即时的
  2. 这也算空白/空白行。
  3. 实现这一目标的最佳方法是什么?

3 个答案:

答案 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
相关问题