Vimscript:列出的缓冲区数量

Jon*_*han 6 vim viml

在我的vimscript中,我需要计算所有被认为列出/可列出的缓冲区(即所有没有未列出的'u'属性的缓冲区).

推导出这个值的推荐方法是什么?

sid*_*yll 13

您可以使用bufnr()获取最后一个缓冲区的编号,然后创建一个从1到该数字的列表,并使用该buflisted()函数作为测试表达式过滤掉未列出的缓冲区.

" All 'possible' buffers that may exist
let b_all = range(1, bufnr('$'))

" Unlisted ones
let b_unl = filter(b_all, 'buflisted(v:val)')

" Number of unlisted ones
let b_num = len(b_unl)

" Or... All at once
let b_num = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Run Code Online (Sandbox Code Playgroud)


Han*_*hiu 5

一个简单的解决方案是使用getbufinfo.

在你的 vim 脚本中:

len(getbufinfo({'buflisted':1}))
Run Code Online (Sandbox Code Playgroud)

或使用命令测试它:

:echo len(getbufinfo({'buflisted':1}))
Run Code Online (Sandbox Code Playgroud)