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}))

Tags:

Vim

Viml