¿Cómo se muestran los búferes en una ventana de revisión rápida en Vim?


13

Usando el editor vim, una tarea común es buscar buffers. Ahora uso comandos estándar como :lso a :bnext. De hecho puse en mi .vimrc:

"move amongs buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>

Me gustaría examinar los buffers como una lista en la ventana de revisión rápida, de la manera simple (= excelente) que implementa el complemento MRU .

¿Existe un complemento tan simple como MRU pero que actúa sobre buffers?

OK, una posible solución podría ser usar el :CtrlpBufferscomando, parte del complemento Ctrlp, pero no soy un gran admirador de Ctrlp, porque a veces tengo comportamientos extraños que no entiendo completamente (las selecciones de modo difuso ...); así que busco algo realmente simple como el complemento MRU.

Por cierto, bromeé con el :cexpr {expr}comando, intentando llenar las ventanas de corrección rápida con el contenido de la :bufferslista, sin éxito (tal vez porque mi ignorancia programaba vimscripts)

Cualquier sugerencia ?


¿Quiso decir en :bnextlugar de :cnext?
— tommcdo

¿Necesita específicamente que sea la ventana de corrección rápida ? ¿O simplemente quieres poder ver los buffers abiertos en una ventana? (Porque hay varios complementos para hacer esto último).
— Rico

Quiero poder explorar los buffers abiertos en una ventana. De hecho quickfix no se reuired
— Giorgio Robino

@tommcdo: sí, lo siento, mis errores tipográficos habituales. Quiero decir: a continuación y actualicé la pregunta
— Giorgio Robino

Respuestas:


18

Puede completar la lista de soluciones rápidas con cada búfer de esta manera:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()toma una lista de elementos del diccionario que describe cada error (nombre de archivo, número de línea, posición, etc.). En este caso, estamos especificando un conjunto mínimo de información: el número de búfer
  • map()toma una Lista y una expresión (una cadena) y devuelve una nueva Lista de la expresión aplicada a cada elemento de la Lista de entrada. Aquí, tomamos una Lista de números de búfer enumerados y los formateamos para su uso en setqflist()( '{"bufnr": v:val}', donde v:vales el valor del elemento en la lista)
  • filter()filtra una Lista, eliminando elementos que no satisfacen una expresión dada. Aquí la expresión es buflisted(v:val), lo que significa que el número de búfer existe y está en la lista, es decir, aparece en la :lssalida
  • range(a, b)genera una lista de números desde ahastab
  • bufnr()devuelve el número de un nombre de búfer dado. Si el argumento es '$', devuelve el número de búfer más alto

Es mucho para escribir, y no es muy memorable, por lo que puede envolverlo en un comando en su vimrc:

command! Qbuffers call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr":v:val}'))

Ahora puede usar :Qbufferspara completar la lista de soluciones rápidas.


Si desea que esto se actualice automáticamente a medida que se agregan nuevas memorias intermedias, puede hacer algo como esto:

autocmd BufAdd * Qbuffers

Sin embargo, no recomendaría esto, ya que hará que la lista de soluciones rápidas sea bastante inutilizable para cosas como :makeo :grep.


1
gracias por las explicaciones, tommcdo. Qbuffers es hermoso! Tal vez agregaría un: copen al final de su llamada para abrir inmediatamente la ventana de corrección rápida y tal vez podría ser útil informar la posición del cursor. Tengo que estudiar un poco de vimscript :-)
— Giorgio Robino

9

Deberías probar este mapeo:

nnoremap gb :ls<CR>:b<Space>

En el indicador, escriba el número de búfer deseado y presione Entrar.

gb


La pregunta sobre la lista de buffers en la ventana de búsqueda rápida.
— VeXii

Sí, y mi respuesta ofrece una alternativa ligera.
— romainl

1
OP afirma que conoce la lista de búfer, pero le gusta tenerla en la ventana de revisión rápida. y tu solución es usar la lista de búfer?
— VeXii

1

Echa un vistazo al plugin bufexplorer . Abre una lista navegable de todos los buffers en una barra lateral, similar al complemento MRU mencionado. Además, hay varios complementos más en vim.org .

PD: Has hecho la misma pregunta sobre Stack Overflow ; ¡no envíe la misma pregunta a varios sitios en paralelo!


tks Ingo, probé un poco bufexplorer y me gusta. También publiqué aquí porque se sugirió hacer un stackoverflow
— Giorgio Robino

1
Si, lo ví. Hubiera preferido que hubiera eliminado la publicación SO original, o al menos vinculada a la publicación cruzada.
— Ingo Karkat
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.