Una forma de seleccionar un búfer en vim podría ser navegar por la lista de búferes, utilizando comandos estándar como :ls
, o con algún código externo de plugin / vimscript para navegar por una lista en una ventana .
Digamos que quiero saltar directamente a un búfer, lo más rápido posible.
Para recorrer la lista de búferes en modo secuencial, ahora uso <C-J>
<C-K>
accesos directos, habiendo configurado en mi .vimrc:
" move among buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
Otra forma (acceso directo) podría ser cambiar por número : conociendo el número de búfer, es posible cambiar directamente ingresando el número de búfer seguido de <C-^>
. Entonces, si quiero cambiar al buffer número 5, presionaría 5<C-^>
.
Pero esto parece no funcionar para mí (uso vim 7.4 en ubuntu box, de un invitado de Windows, con teclado italiano ). Sospecho que eso se debe a que el ^
carácter está en mayúscula ^ì
en el teclado italiano, así que de hecho tengo ^
que presionarSHIFT-^
¿Algunas ideas?
<c-6>
lugar de<c-^>
?1<C-6>
cambia al número de búfer 1. ¡Gracias!Respuestas:
El
:b
comando también puede tomar una subcadena del nombre del archivo del búfer al que desea viajar, lo cual es muy conveniente.Por ejemplo, si tiene tres memorias intermedias
foo
,bar
ybaz
, a continuación,:b bar
cambiará albar
archivo.:b o
cambiará alfoo
archivo.:b a
le dará un error porque podría significar unobar
u otrobaz
, pero puede arreglar el nombre para que sea más específico, por ejemplo, con : ↑ r Enter.Esto puede ser muy útil, porque significa en lugar de
puedes hacer algo como
que es mucho más corto y fácil
Este comando también puede tomar un número, si desea usar eso:
fuente
:b
comando no podrá acceder a ningún búfer con el nombre parcial en el medio de una palabra . Por ejemplo, si tiene dos bufferspath/to/foo
ypath/to/tofu
, el comando:b f<Tab>
nunca coincidirápath/to/tofu
, ya que coincide al comienzo de una palabra enpath/to/foo
.:5b
es un poco más corto que:b 5
;-)Esto es lo que uso:
Ahora presionando
\b
se enumerarán los buffers disponibles y se prepararán:b
para usted.Luego puede simplemente escribir el número de búfer y presionar Enter.
O puede escribir parte del nombre del archivo y presionar Entrar. (Sin embargo, usualmente presiono Tab antes de presionar Enter, para verificar que obtuve el búfer correcto. Si no, continúo pedaleando con Tab hasta obtener el que quería).
De hecho, uso una versión ligeramente modificada de lo anterior:
Esto evitará que
-- More --
aparezca el mensaje cuando tenga más buffers que líneas disponibles para mostrarlos.Pero si normalmente tiene la
'more'
opción deshabilitada de todos modos, esta asignación realmente lo molestará, ¡porque vuelve a habilitar la'more'
opción después de hacerlols
!fuente
[count]<C-^>
cuando se conoce el número de búfer, es bastante útil cuando no se conoce.[count]<C-6>
me parece la forma más rápida de cambiar al búfer conocido[count]<C-^>
estos días. Pero eso significa que necesito ejecutar MiniBufExplorer o algo similar, ¡para saber cuáles son los números de búfer!:CtrlPBuffer
desde el complemento CtrlP (4k ★)La característica principal de este complemento es proporcionar una coincidencia difusa para abrir convenientemente un búfer diferente con retroalimentación visual.
Abra la lista de búferes difusos con
:CtrlPBuffer
o presione<C-p>
seguido de<C-b>
para cambiar el modo abuffer
.Ingrese un número suficiente de caracteres para especificar el búfer que desea abrir.
También puede usar
<C-j>
y<C-k>
para recorrer la lista y seleccionar manualmente el búfer.Personalización
Si desea abrir la lista de búfer inmediatamente con
<C-p>
, agregue la siguiente línea a su vimrc:Puede usar
<C-f/b>
para cambiar el modo de la ventana ctrlp.Yo personalmente uso
let g:ctrlp_cmd = 'CtrlPMRU'
. La lista utilizada más recientemente (mru) también contiene los búferes abiertos. Si utiliza diferentes modos ctrlp y desea mantener su último modo, puede configurarlolet g:ctrlp_cmd = 'CtrlPLastMode [--dir]'
.Complementos similares
Hay más complementos que proporcionan una lista de búfer con un mensaje interactivo con coincidencia difusa, p. Ej.
El lado oscuro vs. el lado claro
(es decir, configuración vim con mucho plugin frente a la forma vim)
Antes de decidir usar estos complementos más complejos, estudie las respuestas de @Doorknob y @joeytwiddle . En particular, verifique el one-liner si uno de ellos ya satisface sus necesidades.
nnoremap <Leader>b :b <C-d>
nnoremap <Leader>b :ls<Cr>:b<Space>
La instalación de los complementos solo para el cambio de búfer puede ser una exageración. Vea también las observaciones en https://www.vi-improved.org/recommendations y el artículo de Drew Neil 'Sobre el afilado de la sierra' .
fuente
map <leader>a <ESC>:CtrlPBuffer<CR><CR>
para saltar al búfer abierto previamente con<leader>a
(mientras<leader>b
solo abre la lista de búfer para mí)<C-^>
(=<C-6>
)? ver:h CTRL-^
. Afaik, esto simplemente hace lo que<leader>a
parece hacer tu mapeo . Por lo tanto, creo que acaba de dar un ejemplo de por qué la gente dice que el uso de complementos podría llevar a un usuario de vim que no sabe lo que vim ya puede hacer por sí solo.Además de las respuestas realmente útiles de joeytwiddle y Doorknob, no se olvide
:b#
, que cambia al búfer utilizado más recientemente. También se puede hacer con solo<C-^>
. Cuando tiene muchos búferes y cambia constantemente entre ellos, el búfer más reciente suele ser el destino más común.Personalmente uso la combinación de muchos métodos. Cuando trabajo principalmente con dos buffers y el resto se abre solo para referencia ocasional, tiendo a cambiar entre ellos con
:b#
o<C-^>
. Cuando tengo que trabajar con más de ellos y cambiar más a menudo, utilizo números (como en la sugerencia joeytwiddle) o parte de los nombres (como en la sugerencia de Doorknob) con TAB para completarlos. Cuando los nombres son confusos, y hay muchos búferes abiertos (generalmente más de 10), uso el complemento Ctrl-P con más frecuencia ( https://github.com/kien/ctrlp.vim ) Con dos teclas rápidas obtuve la lista de todos ellos y puedo usar una poderosa búsqueda difusa sobre ellos para encontrar rápidamente lo que quiero.fuente
[b
y]b
desde el complementovim-unimpaired
(> 2k ★)Si tiene instalado
vim-unimpaired
, puede usar[b
(:bp[revious]
) y]b
(:bn[ext]
)para recorrer en búfer abierto. No es necesario definir asignaciones más valiosas para los mismos comandos. Además, puede saltar al primer y último búfer si
[B
(:bf[irst]
) y]B
(:bl[ast]
)Hay muchas más asignaciones de corchetes contenidas en las
vim-unimpaired
que puede ser útil. Todos siguen el mismo esquema que hace que sea fácil memorizarlos.El lado oscuro vs. el lado claro
Este complemento puede considerarse ligero y 'vimish'. La comunidad #vim lo denota como un complemento "no daña".
fuente
3[b
saltar tres buffers hacia atrás.Actualmente estoy usando la tecla
<Leader>
+number
para cambiar. La clave del líder es mi<space>
clave. También uso vim-airline para mostrar el buffer nr en la parte superior de la ventana.Si bien el búfer a menudo excede de 10, entonces modifico mi propio mapeo, si
number
es la única coincidencia, cambie el búfer de inmediato, de lo contrario, espere más entrada de número o<space>
clave para confirmar:El código se pega desde aquí.
Por cierto, también uso
<S-h>
y<S-l>
para:bp
y:bn
, o:tabp
y:tabn
si actualmente se abre más de una pestaña. Es bastante intuitivo para mí.fuente
En estos días estoy usando
[buffer_number]<Ctrl-^>
para cambiar buffers porque es muy rápido.Pero, ¿cómo saber el número de búfer? Uso MiniBufExplorer para que siempre pueda ver los números de búfer en la parte superior de Vim.
También uso el siguiente mapeo, porque
<C-^>
es un poco difícil de alcanzar con una mano.En una máquina nueva sin configuración, vuelvo a
:b [part_of_filename]<Tab><Enter>
fuente