vim: nombre total de tampons

12

à vim, avec

:buffers

J'obtiens le même nombre de tampons avec

:ls

, mais
comment obtenir le nombre total de tampons?

Juan Pablo
la source

Réponses:

14

Jusqu'à présent, les réponses sont trop floues. Voici la méthode intégrée de vim:

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

Comme toujours, consultez l'aide de vim ( :h getbufinfo()) pour l'explication officielle.

Gid
la source
3
Au moment où cela a été demandé, votre réponse n'aurait pas été possible car Vim ne l'a pas soutenue. Maintenant, c'est probablement la solution optimale.
Heptite
4

À ma connaissance, il n'y a pas de méthode intégrée dans Vim pour ce faire, mais vous pouvez créer une fonction:

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

Mettez ce qui précède dans un fichier texte avec son nom se terminant par .vim,: sourcez-le, puis vous pouvez faire quelque chose comme:

:let buffer_count = NrBufs()
:echo buffer_count

Remarque du 21 juin: si vous avez une version récente de Vim à partir de 2017, la réponse de Gid ci-dessous est la solution optimale.

Heptite
la source
1
Remarque pour ceux qui trouvent cela: je pense que cela devrait être «alors que i> 0», car les nombres de tampons commencent à 1, pas à 0.
Meta
@Meta: J'ai corrigé ma réponse. Merci. Bien que cela ne soit pas vraiment un problème car il y aura toujours au moins un tampon.
Heptite
3

Cherchez-vous peut-être?

:echo(bufnr('$'))
Tour
la source
Cela "comptera" les tampons qui ont été déchargés depuis que Vim ne recycle jamais un numéro de tampon, en plus il devrait être: echo bufnr ('$')
Heptite
(D'accord, votre version fera correctement écho au numéro du dernier tampon chargé, mais la syntaxe est un peu déroutante.)
Heptite
@Heptite - Oui, c'était une erreur. Quant à la question de la syntaxe, je ne vois aucune différence entre les deux.
Tour
Ils font la même chose, mais: echo est une commande et non une fonction, et ne peut jamais être utilisé comme une fonction (sauf si vous enveloppez votre propre fonction définie par l'utilisateur autour d'un: echo). La différence est importante dans de nombreux contextes de VimL.
Heptite
@Heptite - Je dois admettre que je n'ai aucune idée de ce que vous venez de dire ... (plus d'un ingénieur en ruban adhésif ici; moins d'un programmeur "le code est beau")
Rook
2

Si vous souhaitez que la solution Heptite soit une commande, ajoutez ce qui suit à votre fichier .vimrc:

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