vim: número total de buffers

8

no vim, com

:buffers

Eu obtenho o número de todos os buffers o mesmo com

:ls

, mas
como posso obter o número total de buffers?

    
por juanpablo 12.10.2011 / 01:59

5 respostas

8

Mesma ideia que a solução da Heptite, mas como um forro. Muitas outras coisas podem ser feitas desta maneira: obtenha o nome do buffer (graças ao mapa), buffers wipeout que correspondem a um padrão , link etc.

echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
    
por 12.10.2011 / 07:51
7

As respostas até agora são muito hacky. Aqui está a forma integrada do vim:

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

Como sempre, veja a ajuda do vim ( :h getbufinfo() ) para a explicação oficial.

    
por 21.06.2017 / 21:51
4

Até onde sei, não existe um método embutido no Vim para fazer isso, mas você pode criar uma função:

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

Coloque o texto acima em um arquivo de texto com o nome terminado em .vim,: source it, então você pode fazer algo como:

:let buffer_count = NrBufs()
:echo buffer_count

21 de junho de nota: Se você tiver uma versão recente do Vim a partir de 2017, a resposta do Gid abaixo é a solução ideal.

    
por 12.10.2011 / 03:00
3

Você está procurando talvez?

:echo(bufnr('$'))
    
por 12.10.2011 / 03:00
2

Se você quiser a solução da Heptite como um comando, adicione o seguinte ao seu arquivo .vimrc:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
    
por 20.10.2015 / 18:15

Tags