vim: jumlah buffer total

12

dalam vim, dengan

:buffers

Saya mendapatkan jumlah semua buffer sama dengan

:ls

, tetapi
bagaimana saya bisa mendapatkan jumlah buffer?

juanpablo
sumber

Jawaban:

14

Jawaban sejauh ini terlalu rumit. Ini adalah cara bawaan vim:

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

Seperti biasa, lihat bantuan vim ( :h getbufinfo()) untuk penjelasan resmi.

Gid
sumber
3
Pada saat ini ditanyakan, jawaban Anda tidak akan mungkin karena Vim tidak mendukungnya. Sekarang mungkin ini solusi optimal.
Heptite
4

Setahu saya tidak ada metode bawaan di Vim untuk melakukan ini, tetapi Anda bisa membuat fungsi:

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

Masukkan yang di atas dalam file teks dengan nama yang berakhiran .vim,: sumber, maka Anda dapat melakukan sesuatu seperti:

:let buffer_count = NrBufs()
:echo buffer_count

Catatan 21 Juni: Jika Anda memiliki versi terbaru Vim pada 2017, jawaban Gid di bawah ini adalah solusi optimal.

Heptite
sumber
1
Catatan untuk orang lain yang menemukan ini: Saya pikir itu harus 'sementara saya> 0', karena nomor penyangga mulai dari 1, bukan 0.
Meta
@Meta: Saya memperbaiki jawaban saya. Terima kasih. Meskipun itu tidak benar-benar akan menjadi masalah karena akan selalu ada setidaknya satu buffer.
Heptite
3

Apakah Anda mencari mungkin?

:echo(bufnr('$'))
Benteng
sumber
Ini akan "menghitung" buffer yang telah dibongkar sejak Vim tidak pernah mendaur ulang nomor buffer, ditambah lagi harus: echo bufnr ('$')
Heptite
(Oke, versi Anda akan menggemakan jumlah buffer yang terakhir dimuat dengan benar, tetapi sintaksnya sedikit membingungkan.)
Heptite
@Heptite - Ya, itu kesalahan. Mengenai masalah sintaksis, saya tidak melihat perbedaan antara keduanya.
Benteng
Mereka melakukan hal yang sama, tetapi: gema adalah perintah dan bukan fungsi, dan tidak pernah dapat digunakan seperti fungsi (kecuali jika Anda membungkus sendiri fungsi yang ditentukan pengguna di sekitar:: gema). Perbedaannya penting dalam banyak konteks VimL.
Heptite
@Heptite - Saya harus mengakui saya tidak tahu apa yang baru saja Anda katakan ... (lebih dari seorang insinyur lakban di sini; lebih sedikit dari programmer "code is beautiful")
Rook
2

Jika Anda ingin solusi Heptite sebagai sebuah perintah, tambahkan berikut ini ke file .vimrc Anda:

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