Últimamente he estado reduciendo drásticamente la cantidad de complementos que estoy usando, así que estoy buscando respuestas usando solo las funciones integradas de Vim.
He estado notando una falla en mi flujo de trabajo cuando estoy editando muchos buffers: estoy en un buffer y quiero cambiar a otro del cual no recuerdo el nombre y que no es el buffer alternativo . Por lo tanto, :b#
no es posible usarlo y usar la finalización con el comando :b
tampoco es conveniente.
Para hacer eso estaba haciendo lo siguiente:
- Primer uso
:buffers
para obtener la lista de buffers abiertos - Recuerda el número del búfer que quiero usar
- Presione Enterpara cerrar la lista de buffers
- Use
:bX
conX
el número del búfer a usar.
Este flujo de trabajo me pareció bastante pesado, así que agregué las siguientes líneas a mi
.vimrc
:
" Improve the navigation in the buffers
nnoremap <Leader><S-b> :B<CR>
command! B call Buffers()
function! Buffers()
execute "buffers"
let buffer=input("Enter a buffer:")
execute "b" . buffer
endfunction
Esto me da un comando :B
(y un mapeo) que llama a la función :buffers
esperar una entrada y finalmente llama :b
seguido de la entrada.
Funciona bien, pero me sorprende que haya tenido que desarrollar dicha función: por lo general, Vim tiene un flujo de trabajo predeterminado bastante eficiente, por lo que me pregunto si hay una mejor manera de cambiar a un búfer del que no sé nada, excepto que ya se abrió en mi sesión de edición.
:ls
seguido de:b#
(no es necesario presionar regresar o escapar primero, puedo ir directamente de la lista de búfer en 'ls'). (¿Publicar como comentario porque no parece lo suficientemente sustancial como para ser una respuesta? También me pregunto si me falta algo y respondo la pregunta equivocada.):b#
no es lo que estoy buscando, pero sí, el hecho de que puede guardar una pulsación de tecla ingresando directamente:b
sin presionarenter
antes es interesante. (De hecho, eso puede ser demasiado ligero para ser una respuesta, pero valió la pena comentarlo :-))#
personaje como un sustituto de un número (buffer), en lugar del#
carácter literal .Respuestas:
Por el contrario, considero que completar las pestañas es extremadamente conveniente. Establecer las opciones correctas en valores que funcionen para usted puede ayudar mucho. Estas son las líneas relevantes de mi
vimrc
(funcionan para mí pero pueden no funcionar para usted, así que no las copie simplemente) :Con eso, el búfer correcto rara vez está a más de cinco o seis pulsaciones de teclas:
A Barry Arthur se le ocurrió una solución mucho más simple hace años que se ha vuelto bastante popular desde entonces:
de las cuales propuse una variante un poco más versátil hace un par de años:
Ya que estamos hablando de vimscript, aquí hay una pequeña y agradable función que escribí que "autocompone" la línea de comandos con el código auxiliar de comando correcto después de comandos tipo lista como
:ls
o:ilist
. La ventaja de esa función sobre las asignaciones anteriores es que no tengo que recordar asignaciones específicas. Funciona igual que Vim, pero con un pequeño giro .Dicho esto, soy un gran defensor de la "navegación basada en símbolos" sobre la "navegación basada en archivos". Cuando corresponde, la navegación basada en símbolos es mucho más rápida y mucho más económica que la navegación basada en archivos.
El último GIF muestra un medio de navegación basada en símbolos, por cierto. El ejemplo es tonto pero ... bueno.
fuente
wild*
opciones, intentaré ajustarlo a mi manera. Sobre la solución de Barry Arthur, está bastante cerca de la respuesta de @nobe4 que es interesante. Finalmente, tendré que analizar más profundamente suCCR()
función para obtenerla realmente, pero se ve prometedora. Gracias por tu respuesta.Encontré el mismo problema hace un tiempo y encontré una solución:
Esto abrirá la lista de búfer y, sin ocultarla, le dará la opción de cambiar el búfer.
Creo que tiene sentido que Vim no tenga una opción de "lista y selección" aquí, estas son dos acciones separadas. Pero Vim es lo suficientemente poderoso como para combinar el comando juntos.
Piense en ello como la filosofía de Unix: haga una cosa y hágalo bien.
:buffers
enumera los búferes y le:buffer xxx
permite seleccionar uno.fuente
Pero más recientemente he encontrado que el método más rápido con la menor cantidad de pulsaciones de teclas es usar:
{count} CTRL-^
Esto no es tan diferente de,
:b#<Enter>
pero como usted dice, ¡ necesita saber el número de búfer!Entonces, para eso, ejecuto el complemento MiniBufExplorer , que muestra una lista de nombres de archivos en la parte superior (como casi cualquier otro editor). Estoy seguro de que hay numerosas alternativas.
Finalmente, dado que Ctrl-^es un poco exagerado para mis dedos, y esta es una operación muy común, lo moví a Ctrl-E. La implementación para eso no es demasiado compleja:
Entonces mi proceso actual de cambio de búfer es algo como esto:
Lamentablemente, MBE y el script anterior no son Vim incorporados, como solicitó. Cuando estoy en una máquina remota sin configuración, solo uso
:b [partial]
y tabulación completa.fuente