vim:缓冲区总数

vim:缓冲区总数

在 vim 中,

:buffers

我得到的所有缓冲区的数量相同

:ls

但是
我如何才能获得缓冲区的总数?

答案1

与 Heptite 的解决方案想法相同,但只需一行代码。许多其他事情也可以通过这种方式完成:获取缓冲区的名称(感谢 map),清除与模式匹配的缓冲区https://stackoverflow.com/questions/2974192/how-can-i-pare-down-vims-buffer-list-to-only-include-active-buffers/2974600#2974600nETC。

echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

答案2

到目前为止的答案都太老套了。这是 vim 的内置方法:

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

与往常一样,请参阅 vim 的帮助 ( :h getbufinfo()) 以获得官方解释。

答案3

据我所知,Vim 中没有内置方法可以执行此操作,但你可以创建一个函数:

function! NrBufs()
    let i = bufnr('$')
    let j = 0
    while i >= 1
        if buflisted(i)
            let j+=1
        endif
        let i-=1
    endwhile
    return j
endfunction

将上述内容放入一个以 .vim 结尾的文本文件中,:source 它,然后您可以执行以下操作:

:let buffer_count = NrBufs()
:echo buffer_count

6月21日注:如果您拥有截至 2017 年的最新版本的 Vim,那么下面 Gid 的答案就是最佳解决方案。

答案4

如果您想要将 Heptite 的解决方案作为命令,请将以下内容添加到您的 .vimrc 文件中:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

相关内容