Vimscript:列出的缓冲区数

Vimscript:列出的缓冲区数,vim,viml,Vim,Viml,在我的vimscript中,我需要获得被认为是已列出/可列出的所有缓冲区的计数(即,没有未列出的“u”属性的所有缓冲区) 导出此值的推荐方法是什么?我将通过调用buflisted()来实现,该值的范围为bufnr(“$”给出的最大缓冲区数。大概是这样的: function! CountListedBuffers() let num_bufs = 0 let idx = 1 while idx <= bufnr("$") if buflisted(id

在我的vimscript中,我需要获得被认为是已列出/可列出的所有缓冲区的计数(即,没有未列出的“u”属性的所有缓冲区)


导出此值的推荐方法是什么?

我将通过调用
buflisted()
来实现,该值的范围为
bufnr(“$”
给出的最大缓冲区数。大概是这样的:

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
函数!CountListedBuffers()
设num_bufs=0
设idx=1
而idx可以使用
bufnr()
获取最后一个缓冲区的编号,然后创建一个 从1到该数字列出,并通过删除未列出的缓冲区对其进行过滤 使用
buflisted()
函数作为测试表达式

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

一个简单的解决方案是使用

在vimscript中:

len(getbufinfo({'buflisted':1}))
或使用以下命令对其进行测试:

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

我的印象是这个答案并没有完全解决OP的问题。他要求的是“上市”,而不是“未上市”。当然,虽然我知道它是如何联系在一起的。但我相信答案会更简单,我很好奇那会是什么样子编辑:它似乎通过过滤未列出的“out”来回答