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