vim:总缓冲区数

jua*_*blo 16 vim buffer

在 vim 中,与

:buffers
Run Code Online (Sandbox Code Playgroud)

我得到的所有缓冲区的数量与

:ls
Run Code Online (Sandbox Code Playgroud)

,但是
我怎么能得到缓冲区的总数呢?

Gid*_*Gid 18

到目前为止的答案太hacky了。这是vim的内置方式:

len(getbufinfo({'buflisted':1}))
Run Code Online (Sandbox Code Playgroud)

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

  • 在被问到这个问题的时候,你的答案是不可能的,因为 Vim 不支持它。现在它可能是最佳解决方案。 (5认同)

Luc*_*tte 11

与 Heptite 的解决方案相同的想法,但作为一个衬垫。许多其他事情可以通过这种方式完成:获取缓冲区的名称(感谢地图),与模式匹配的擦除缓冲区https: //stackoverflow.com/questions/2974192/how-can-i-pare-down- vims-buffer-list-to-only-include-active-buffers/2974600#2974600n等。

echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Run Code Online (Sandbox Code Playgroud)


Hep*_*ite 5

据我所知,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
Run Code Online (Sandbox Code Playgroud)

将上述内容放在名称以 .vim 结尾的文本文件中,:source it,然后您可以执行以下操作:

:let buffer_count = NrBufs()
:echo buffer_count
Run Code Online (Sandbox Code Playgroud)

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