8

в том, с

:buffers

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

:ls

, но
как я могу получить общее количество буферов?

5 ответов5

8

Та же идея, что и у решения Heptite, но в качестве одного лайнера. Многие другие вещи могут быть сделаны таким образом: получить имя буфера (благодаря карте), уничтожить буферы, которые соответствуют шаблону, https://stackoverflow.com/questions/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)'))
7

Ответы пока слишком хакерские. Вот встроенный способ vim:

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

Как всегда, см. Справку vim (:h getbufinfo()) для официального объяснения.

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,:source it, тогда вы можете сделать что-то вроде:

:let buffer_count = NrBufs()
:echo buffer_count

Примечание от 21 июня: если у вас последняя версия Vim по состоянию на 2017 год, ответ Гида ниже является оптимальным решением.

3

Вы ищете возможно?

:echo(bufnr('$'))
2

Если вы хотите использовать решение Heptite в качестве команды, добавьте следующее в ваш файл .vimrc:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .