vim: número de buffers totais


12

em vim, com

:buffers

Eu recebo o número de todos os buffers da mesma forma

:ls

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

Respostas:



14

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

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

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


3
No momento em que isso foi solicitado, sua resposta não seria possível porque o Vim não a apoiava. Agora é provavelmente a solução ideal.
Heptite

4

Que eu saiba, não há método interno 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, e você pode fazer algo como:

:let buffer_count = NrBufs()
:echo buffer_count

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


11
Nota para os outros que encontrar o seguinte: eu acho que deveria ser 'enquanto i> 0', uma vez que os números de buffer começar a partir de 1, não 0.
Meta

@Meta: Eu consertei minha resposta. Obrigado. Embora não seja realmente um problema, pois sempre haverá pelo menos um buffer.
Heptite 11/07/2013

3

Você está procurando talvez?

:echo(bufnr('$'))

Isso "contará" os buffers que foram descarregados, pois o Vim nunca recicla um número de buffer, além de ter que ser: echo bufnr ('$')
Heptite

(Ok, sua versão ecoará corretamente o número do último tampão carregado, mas a sintaxe é um pouco confuso.)
Heptite

@ Heptite - Sim, isso foi um erro. Quanto à questão da sintaxe, não vejo diferença entre os dois.
Rook

Eles fazem o mesmo, mas: echo é um comando e não uma função, e nunca pode ser usado como uma função (a menos que você envolva sua própria função definida pelo usuário em torno de um: echo). A diferença é importante em muitos contextos do VimL.
Heptite 12/10/11

@Heptite - Devo admitir que eu não tenho nenhuma idéia do que você acabou de dizer ... (mais de um engenheiro de fita adesiva aqui, menos de um "código é bonito" programador)
Rook

2

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

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.