有没有一种方法可以得到Vim缓冲区中的行数,而不一定是当前的行数?
使用line('$')
,可以获得当前缓冲区的最后一行的编号,从而获得行数量。用getbufline({expr}, 1 , '$')
可以得到一个由{expr}
给出的缓冲区的行字符串列表,列表的大小是行数。
使用getbufline
的开销是在内存中复制整个文件,只是为了获得它包含的行数。line
执行此任务,但仅适用于当前缓冲区。
这应该是从脚本中完成的,而不是交互式的,如果可能的话,与line('$')
一样具有最小的开销。
2条答案
按热度按时间yqhsw0fo1#
如果vim是使用python支持编译的,并且不是旧版本,那么可以使用7.3.569
。对于支持python的旧版vim,您可以使用
测试显示,对于11 MiB日志文件,第一种解决方案比
len(getbufline({expr}, 1, '$'))
快209倍(0.000211秒vs 0.044122秒)。请注意,vim.buffers
中的缓冲区的索引从零开始,而不是从一开始。fkaflof62#
自Vim 8.1.1967(2019年9月)起,您可以将窗口ID作为第二个参数传递给
line()
。所以现在它只是:其中
bufnr
是缓冲区编号。