vim: Anzahl der Gesamtpuffer

12

in vim, mit

:buffers

Ich bekomme die Anzahl aller Puffer gleich mit

:ls

, aber
wie kann ich die Gesamtzahl der Puffer erhalten?

Juan Pablo
quelle

Antworten:

14

Die bisherigen Antworten sind zu hackig. Hier ist die integrierte Methode von vim:

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

:h getbufinfo()Die offizielle Erklärung finden Sie wie immer in der Hilfe von vim ( ).

Gid
quelle
3
Zu dem Zeitpunkt, als dies gefragt wurde, wäre Ihre Antwort nicht möglich gewesen, da Vim sie nicht unterstützt hat. Jetzt ist es wahrscheinlich die optimale Lösung.
Heptite
4

Meines Wissens gibt es in Vim keine integrierte Methode, um dies zu tun, aber Sie könnten eine Funktion erstellen:

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

Fügen Sie das Obige in eine Textdatei ein, deren Name auf .vim ,: source it endet. Dann können Sie Folgendes tun:

:let buffer_count = NrBufs()
:echo buffer_count

Hinweis vom 21. Juni: Wenn Sie ab 2017 eine aktuelle Version von Vim haben, ist die folgende Antwort von Gid die optimale Lösung.

Heptit
quelle
1
Hinweis für andere, die dies finden: Ich denke, es sollte 'while i> 0' sein, da die Puffernummern bei 1 beginnen, nicht bei 0.
Meta
@Meta: Ich habe meine Antwort korrigiert. Vielen Dank. Obwohl es nicht wirklich ein Problem sein wird, da es immer mindestens einen Puffer geben wird.
Heptite
3

Suchen Sie vielleicht?

:echo(bufnr('$'))
Turm
quelle
Dies "zählt" Puffer, die entladen wurden, da Vim niemals eine Puffernummer recycelt, und es müsste sein: echo bufnr ('$')
Heptite
(Okay, Ihre Version wird die Nummer des zuletzt geladenen Puffers korrekt wiedergeben, aber die Syntax ist etwas verwirrend.)
Heptite
@ Heptite - Ja, das war ein Fehler. In Bezug auf die Syntax sehe ich keinen Unterschied zwischen den beiden.
Turm
Sie machen dasselbe, aber: echo ist ein Befehl und keine Funktion und kann niemals wie eine Funktion verwendet werden (es sei denn, Sie wickeln Ihre eigene benutzerdefinierte Funktion um ein: echo). Der Unterschied ist in vielen Kontexten von VimL wichtig.
Heptite
@ Heptite - Ich muss zugeben, ich habe keine Ahnung, was Sie gerade gesagt haben ... (eher ein Klebebandingenieur hier; weniger ein "Code ist schön" -Programmierer)
Rook
2

Wenn Sie die Lösung von Heptite als Befehl verwenden möchten, fügen Sie Ihrer .vimrc-Datei Folgendes hinzu:

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