Vimscript: Number of listed buffers

2020-07-11 06:30发布

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?

标签: vim viml
3条回答
SAY GOODBYE
2楼-- · 2020-07-11 06:57

A simple solution is using getbufinfo.

In your vimscript:

len(getbufinfo({'buflisted':1}))

or test it with command:

:echo len(getbufinfo({'buflisted':1}))
查看更多
相关推荐>>
3楼-- · 2020-07-11 07:01

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)'))
查看更多
smile是对你的礼貌
4楼-- · 2020-07-11 07:05

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
查看更多
登录 后发表回答