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