vim: кількість загальних буферів


12

в vim, с

:buffers

Я отримую однакове число всіх буферів

:ls

, але
як я можу отримати загальну кількість буферів?

Відповіді:


9

Та сама ідея, що і рішення Хептита, але як єдиний лайнер. Багато інших можливостей можна зробити так: отримайте назву буфера (завдяки карті), видаліть буфери, які відповідають шаблону , /programming/2974192/how-can-i-pare-down- vims-buffer-list-to-only-include-active-buffers / 2974600 # 2974600n і т.д.

echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

14

Відповіді поки що занадто хакі. Ось вбудований спосіб vim:

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

Як завжди, див. Довідку vim ( :h getbufinfo()) для офіційного пояснення.


3
У той час, коли це запитували, ваша відповідь була б неможлива, оскільки Вім не підтримав її. Зараз це, мабуть, оптимальне рішення.
Гептит

4

Наскільки мені відомо, у Vim немає вбудованого методу, який би це зробив, але ви можете створити функцію:

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

Покладіть вище в текстовий файл, його ім'я закінчується на .vim,: джерело, тоді ви можете зробити щось на кшталт:

:let buffer_count = NrBufs()
:echo buffer_count

21 червня зауважте: Якщо у вас є остання версія Vim станом на 2017 рік, відповідь Gid нижче - оптимальне рішення.


1
Зауважте для інших, хто вважає це: я думаю, що це має бути "while i> 0", оскільки буферні номери починаються з 1, а не від 0.
Meta

@Meta: я виправив свою відповідь. Дякую. Хоча це насправді не буде проблемою, оскільки завжди буде хоча б один буфер.
Гептит

3

Ви шукаєте, можливо, для?

:echo(bufnr('$'))

Це буде "рахувати" буфери, які були завантажені, оскільки Vim ніколи не переробляє номер буфера, плюс це повинно бути: echo bufnr ('$')
Heptite

(Гаразд, ваша версія належним чином відображатиме номер останнього завантаженого буфера, але синтаксис трохи заплутаний.)
Геппіт

@Heptite - Так, це була помилка. Щодо питання синтаксису, я не бачу різниці між ними.
Грак

Вони роблять те саме, але: echo - це команда, а не функція, і її ніколи не можна використовувати як функцію (якщо ви не обмотаєте власну визначену користувачем функцію навколо: echo). Різниця важлива у багатьох контекстах VimL.
Гептит

@Heptite - Я мушу визнати, що я не маю уявлення про те, що ти щойно сказав ... (більше тут інженера з клейкої стрічки; менше програміста "код прекрасний")
Rook

2

Якщо ви хочете рішення Heptite як команду, додайте у файл .vimrc наступне:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.