Vimscript: Number of listed buffers

血红的双手。 提交于 2019-12-09 17:46:13

问题


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?


回答1:


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



回答2:


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



回答3:


A simple solution is using getbufinfo.

In your vimscript:

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

or test it with command:

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


来源:https://stackoverflow.com/questions/17931507/vimscript-number-of-listed-buffers

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!