vim: liczba wszystkich buforów

12

in vim, with

:buffers

Otrzymuję taką samą liczbę wszystkich buforów

:ls

, ale
jak mogę uzyskać całkowitą liczbę buforów?

juanpablo
źródło

Odpowiedzi:

14

Odpowiedzi do tej pory są zbyt trudne. Oto wbudowany sposób vima:

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

Jak zawsze zobacz :h getbufinfo()oficjalne wyjaśnienie w pomocy vima ( ).

Kołowacizna
źródło
3
W chwili, gdy o to pytano, twoja odpowiedź nie byłaby możliwa, ponieważ Vim jej nie obsługiwał. Teraz jest to prawdopodobnie optymalne rozwiązanie.
Heptite
4

O ile wiem, w Vimie nie ma wbudowanej metody, ale możesz utworzyć funkcję:

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

Umieść powyższe w pliku tekstowym, którego nazwa kończy się na .vim,: pobierz go, a następnie możesz zrobić coś takiego:

:let buffer_count = NrBufs()
:echo buffer_count

Uwaga z 21 czerwca: Jeśli masz najnowszą wersję Vima z 2017 roku, odpowiedź Gida poniżej jest optymalnym rozwiązaniem.

Heptyt
źródło
1
Uwaga dla innych, którzy to stwierdzą: Myślę, że powinno to być „podczas gdy i> 0”, ponieważ numery buforów zaczynają się od 1, a nie 0.
Meta
@Meta: Naprawiłem swoją odpowiedź. Dzięki. Chociaż tak naprawdę nie będzie to problemem, ponieważ zawsze będzie przynajmniej jeden bufor.
Heptyt
3

Szukasz może?

:echo(bufnr('$'))
Wieża
źródło
Spowoduje to „policzenie” buforów, które zostały zwolnione, ponieważ Vim nigdy nie przetwarza numeru bufora, a ponadto musiałby to być: echo bufnr ('$')
Heptite
(Okej, twoja wersja poprawnie wyświetli numer ostatnio załadowanego bufora, ale składnia jest trochę myląca.)
Heptite
@Heptite - Tak, to był błąd. Jeśli chodzi o składnię, nie widzę między nimi żadnej różnicy.
Rook
Robią to samo, ale: echo jest poleceniem, a nie funkcją, i nigdy nie może być używane jako funkcja (chyba że otoczysz własną funkcję zdefiniowaną przez użytkownika wokół: echo). Różnica jest ważna w wielu kontekstach VimL.
Heptyt
@Heptite - Muszę przyznać, że nie mam pojęcia, co właśnie powiedziałeś ... (bardziej tutaj inżynier taśm; mniej programisty „kodu jest piękny”)
Rook
2

Jeśli chcesz mieć rozwiązanie Heptite jako polecenie, dodaj do pliku .vimrc:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Andrzej
źródło