vim: número de buffers totales


12

en vim, con

:buffers

Obtengo el mismo número de buffers con

:ls

, pero
¿cómo puedo obtener el número total de buffers?

Respuestas:



14

Las respuestas hasta ahora son demasiado extravagantes. Aquí está la forma incorporada de vim:

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

Como siempre, vea la ayuda de vim ( :h getbufinfo()) para la explicación oficial.


3
En el momento en que se le preguntó esto, su respuesta no hubiera sido posible porque Vim no lo admitió. Ahora es probablemente la solución óptima.
Heptita

4

Que yo sepa, no hay un método incorporado en Vim para hacer esto, pero podría crear una función:

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

Ponga lo anterior en un archivo de texto con su nombre que termine en .vim,: fuente, luego puede hacer algo como:

:let buffer_count = NrBufs()
:echo buffer_count

Nota del 21 de junio: si tiene una versión reciente de Vim a partir de 2017, la respuesta de Gid a continuación es la solución óptima.


1
Nota para otros que encuentren esto: creo que debería ser 'while i> 0', ya que los números de buffer comienzan desde 1, no 0.
Meta

@Meta: arreglé mi respuesta. Gracias. Aunque en realidad no va a ser un problema, ya que siempre habrá al menos un búfer.
Heptita

3

¿Estás buscando quizás?

:echo(bufnr('$'))

Esto "contará" los buffers que se han descargado ya que Vim nunca recicla un número de buffer, además tendría que ser: echo bufnr ('$')
Heptita

(De acuerdo, su versión reflejará correctamente el número del último búfer cargado, pero la sintaxis es un poco confusa.)
Heptita

@Heptite - Sí, eso fue un error. En cuanto a la cuestión de la sintaxis, no veo diferencia entre los dos.
Torre

Hacen lo mismo, pero: echo es un comando y no una función, y nunca puede usarse como una función (a menos que ajuste su propia función definida por el usuario alrededor de un: echo). La diferencia es importante en muchos contextos de VimL.
Heptita

@Heptite - Debo admitir que no tengo idea de lo que acabas de decir ... (más de un ingeniero de cinta adhesiva aquí; menos de un programador de "código es hermoso")
Rook

2

Si desea la solución de Heptite como un comando, agregue lo siguiente a su archivo .vimrc:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.