Search code examples
vimviml

Vimscript: Number of listed buffers


In my vimscript, I need to get a count of all buffers that are considered listed/listable (i.e. all buffers that do not have the unlisted, 'u', attribute).

What's the recommended way of deriving this value?


Solution

  • 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)'))