Vimscript: Number of listed buffers
You could use bufnr()
to get the number of the last buffer, then create a
list from 1 to that number and filter it removing the unlisted buffers, by
using the buflisted()
function as the test expression.
" 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)'))
I would do it by calling buflisted()
on the range of numbers up to the largest buffer number given by bufnr("$")
. Something like this:
function! CountListedBuffers()
let num_bufs = 0
let idx = 1
while idx <= bufnr("$")
if buflisted(idx)
let num_bufs += 1
endif
let idx += 1
endwhile
return num_bufs
endfunction
A simple solution is using getbufinfo
.
In your vimscript:
len(getbufinfo({'buflisted':1}))
or test it with command:
:echo len(getbufinfo({'buflisted':1}))