Vim: lista dinámica de buffers abiertos en una ventana

23

He investigado algunas formas de mantener una lista de buffers abiertos en Vim, y algunas de ellas son muy buenas, pero ninguna de ellas parece comportarse como me gustaría. Es muy posible que no exista nada como lo que quiero, y no está de más preguntar.

He estado usando NERDTree en GVim, y me gusta la idea de poner la información en una delgada ventana de la izquierda. He reunido un útil diagrama de cómo me gustaría que se vea mi entorno:

|--------|---------------------------------------|
|        |                                       | 
|        |                                       | 
|NERDTree|           Windows                     | 
|        |                                       | 
|        |                                       | 
|        |                                       | 
|--------|                                       |
|        |                                       | 
|        |                                       | 
|  List  |                                       | 
|   of   |                                       | 
|  Open  |                                       | 
| Buffers|                                       | 
|        |                                       | 
|        |                                       | 
|--------|---------------------------------------|

Entonces mi pregunta es: ¿hay una forma nativa de vim o habilitada para complementos para mantener una lista de búferes abiertos actualmente y seleccionar / editar / cerrar desde esa lista, dentro de una ventana similar a NERDTree?

Entiendo que este enfoque puede ser incongruente con la forma en que Vim hace las cosas , y si siente que me falta algo sobre cómo administrar varios archivos en una sesión de Vim, ¡deje un comentario con sugerencias!

asfallows
fuente
También estoy buscando tener una lista de búfer debajo (o arriba) del panel nerdtree. Intentaré recordar actualizar esta publicación si encuentro una buena solución (pero gracias por preguntar de todos modos)
Eric Drechsel

Respuestas:

7

¿Buscó en el repositorio de complementos de vim.org? Hay docenas de complementos de cambio de búfer para elegir, como BufferGator o SelectBuf . Alternativamente, la mayoría de ellos se compilan en una buena lista en el wiki de Vim .


Como mencionó en la última parte de su pregunta, ese tipo de sistema no es del gusto de todos.

Yo odio tener todos esos menús, botones y listas de tal o cual abierta en todo momento: una lista de buffers abiertos sólo es útil cuando realmente se necesita para saltar a otro buffer, dejando una abierta dicha lista parece un desperdicio de espacio para mí . Lo mismo se puede aplicar a las líneas de estado sobrealimentadas también.

Utilizo el mismo complemento para cambiar rápidamente entre buffers y explorar rápidamente el sistema de archivos alrededor del archivo que estoy editando actualmente. Invocada con ,f(archivos) o ,b(buffers), la ventana desaparece cuando termino. Perfecto. Hay otros complementos similares , pruébalos todos si te gusta esa idea.

EDITAR

Me siento obligado a agregar un GIF animado de CtrlP en acción, cambiando buffers:

Cambiar buffers con CtrlP

ENDEDITAR

El nativo :sb <Tab>también es bastante ordenado pero menos sexy. No admite la coincidencia difusa, pero tiene algunas grandes ventajas: está integrado y funciona de manera similar :e <Tab>, :vs <Tab>y así sucesivamente.

romainl
fuente
Gracias por sus sugerencias Parece que BufferGator y SelectBuf están al menos cerca de la funcionalidad que busco, aunque podrían necesitar algunos ajustes para que las cosas funcionen. Definitivamente aprecio la preocupación por el desperdicio de espacio, pero con mi caso de uso actual tengo una instancia de GVim abierta durante horas a la vez con muchos archivos abiertos a la vez, saltando entre ellos según sea necesario. En estas circunstancias, una lista de búfer persistente es extremadamente útil. Sin embargo, me tomaré un tiempo para aprender sobre los enfoques más típicos de Vim para la gestión del búfer.
asfallows
Me imagino que trabajas en un monitor grande. Independientemente del sistema que elija, aún necesitará: 1. cambiar a la lista de búfer, 2. seleccionar un búfer, 3. presionar una tecla para saltar a él, ya sea que la lista de búfer ya sea visible o no. Por lo tanto, usar un conmutador de búfer "bajo demanda" es tan efectivo como mantener abierta una lista de búfer y ahorra espacio.
romainl
Definitivamente aprecio ese razonamiento, por lo que no estoy demasiado preocupado acerca de la posibilidad de que la configuración exacta que describo aquí no sea posible. La única ventaja importante que tiene una lista de búferes persistentes es que se requieren 0 pulsaciones de teclas para verificar qué búferes están abiertos, una información que considero valiosa y que también me resulta muy mala para guardar en la memoria a corto plazo. (Y sí, trabajo en un monitor bastante grande.)
asfallows
@romainl, ¿qué comando vimrc usaste para mapear ,bpara buscar búferes con ctrlp?
nevado
1
@snowbound, FWIW He dejado de usar CtrlP o cualquier otro complemento similar hace algún tiempo. De todos modos, mi comando fue nnoremap ,b :CtrlPBuffer<CR>.
romainl
5

Puedo recomendar el MiniBufExplorer . ¿Ves también una alternativa a minibufexplorer?

Captura de pantalla

Marco
fuente
Gracias por la respuesta: encontré MiniBufExplorer y parece que es extremadamente bueno en lo que hace, pero no cumple con las condiciones que describí sobre cómo me gustaría administrar los buffers. Si resulta que no hay una buena manera de hacer lo que estoy tratando de hacer, o si decido que no es la forma correcta de hacerlo, MBE ocupa un lugar destacado en mi lista de cosas para probar a continuación.
asfallows
1
La única condición que no se cumple es que la lista está a la izquierda. Estoy de acuerdo, MiniBufExplorerestá en la parte superior (donde no desperdicia tanto espacio como a la izquierda). O tal vez no entendí tus requisitos.
Marco
Con mi configuración actual, tener la lista de buffers a la izquierda como se muestra en realidad es una mejora del uso del espacio, porque NERDTree está abierto en todo momento, pero no siempre nos muestra la vertical completa. Compartir ese espacio con una lista de búfer sería bueno. Vale la pena señalar que así es como uso GVim, y no querría una columna izquierda persistente si estuviera usando Vim en la consola. La mayor parte de mi uso de la consola de Vim es "abrir archivo, hacer edición rápida, cerrar vim"
asfallows
1

Hay una manera de hacer exactamente eso usando el complemento winmanager . En esta captura de pantalla , combino los complementos NERDTree y MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, último commit atm 349a9fbb) en la misma división vertical y lo alterno con F4. En teoría, esta solución debería funcionar para cualquier otra combinación de complementos.

Ejemplo de mi .vimrc

"{{{Configuración MiniBufExpl
let g: miniBufExplVSplit = 20 "abierto en vertical
let g: miniBufExplSplitToEdge = 0 "abierto en relación con la ventana anterior (NERDTree)
"}}} Configuración MiniBufExpl

"{{{configuración de winmanager
"registra los complementos
let g: NERDTree_title = 'Árbol NERD'
let g: MiniBufExpl_title = 'MiniBufExpl'

"establecer el diseño
let g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"controlador para NERDTree
¡función! NERDTree_Start ()
    ejecutivo 'NERDTree'
función final

"controlador para MiniBufExpl
¡función! MiniBufExpl_Start ()
    ejecutivo 'MBEOpen'
función final

"asignación para alternar la división a F4
nmap <F4>: WMToggle
"}}} configuración de winmanager

Problemas:

  • NERDTree no utiliza el búfer que crea winmanager, sino que se abre por sí solo ...
  • ... por lo tanto, el búfer winmanager permanece sin usar
  • MiniBufExpl no se actualiza correctamente al saltar entre buffers

El comportamiento que he logrado está lejos de ser perfecto, pero es un buen comienzo.

svlasov
fuente