vim: numero di buffer totali


12

in vim, con

:buffers

Ottengo il numero di tutti i buffer allo stesso modo

:ls

, ma
come posso ottenere il numero totale di buffer?

Risposte:



14

Le risposte finora sono troppo confuse. Ecco il modo integrato di vim:

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

Come sempre, vedi l'aiuto di vim ( :h getbufinfo()) per la spiegazione ufficiale.


3
Al momento della richiesta, la tua risposta non sarebbe stata possibile perché Vim non la supportava. Ora è probabilmente la soluzione ottimale.
Heptite,

4

Per quanto ne so, non esiste un metodo integrato in Vim per eseguire questa operazione, ma è possibile creare una funzione:

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

Metti quanto sopra in un file di testo con il suo nome che termina in .vim,: sorgente, quindi puoi fare qualcosa del tipo:

:let buffer_count = NrBufs()
:echo buffer_count

Nota del 21 giugno: se hai una versione recente di Vim a partire dal 2017, la risposta di Gid di seguito è la soluzione ottimale.


1
Nota per gli altri che lo trovano: penso che dovrebbe essere 'while i> 0', poiché i numeri di buffer iniziano da 1, non 0.
Meta

@Meta: ho corretto la mia risposta. Grazie. Anche se non sarà davvero un problema poiché ci sarà sempre almeno un buffer.
Heptite l'

3

Stai forse cercando?

:echo(bufnr('$'))

Questo conterà "contare" i buffer che sono stati scaricati poiché Vim non ricicla mai un numero di buffer, inoltre dovrebbe essere: echo bufnr ('$')
Heptite,

(Va bene, la tua versione echeggerà correttamente il numero dell'ultimo buffer caricato, ma la sintassi è un po 'confusa.)
Heptite,

@Heptite - Sì, è stato un errore. Per quanto riguarda la sintassi, non vedo alcuna differenza tra i due.
Rook,

Fanno la stessa cosa, ma: echo è un comando e non una funzione, e non può mai essere usato come una funzione (a meno che non si avvolga la propria funzione definita dall'utente attorno a un: echo). La differenza è importante in molti contesti di VimL.
Eptita,

@Heptite - Devo ammettere che non ho idea di quello che hai appena detto ... (più di un ingegnere del nastro adesivo qui; meno di un programmatore di "code is beautiful")
Rook,

2

Se vuoi la soluzione di Heptite come comando, aggiungi quanto segue al tuo file .vimrc:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.