有没有办法获得Vim缓冲区中的行数,不一定是当前的行数?
使用行(‘$’)可以获得当前缓冲区的最后一行的编号,从而获得行数.使用getbufline({expr},1,’$’),可以获得{expr}给出的缓冲区的行字符串列表,列表大小为行数.
使用getbufline会产生在内存中复制整个文件的开销,只是为了得到它包含的行数. line完成工作,但仅适用于当前缓冲区.
这应该是从脚本完成的,而不是交互式的,并且如果可能的话,使用line(‘$’)的开销最小.
如果
vim是使用
python支持编译的,并且不是旧版本,那么可以使用7.3.569
python import vim let numlines=pyeval('len(vim.buffers['.({expr}-1).'])')
.对于支持python的旧版本,您可以使用
python import vim python vim.command('let numlines='+str(len(vim.buffers[int(vim.eval('{expr}'))-1])))
.测试显示,对于11 MiB日志文件,第一个解决方案比len快了209倍(getbufline({expr},’$’))(0.000211 vs 0.044122秒).请注意,vim.buffers中的缓冲区从零开始编号,而不是一个.