¿Cómo prefiere cambiar entre búferes en Vim?

92

He intentado MiniBufExplorer , pero por lo general terminan con varias ventanas mostrarlo o cerrar por completo. Lo que me gustaría es algo como LustyJuggler con búsqueda incremental, la forma en que cambio entre búferes en Emacs. ¿Seguro que hay un guión como este?

Alexey Romanov
fuente

Respuestas:

23

He estado usando el complemento vim Command-T de Wincent Colaiuta durante un par de meses. Wincent escribió las partes que necesitan ser rápidas en C, ¡y debo decir que lo es! Y creo que su lógica de coincidencia de patrones de archivo es incluso mejor que Command-T de Textmate. Mira el screencast .

El complemento Command-T para VIM proporciona un mecanismo intuitivo y extremadamente rápido para abrir archivos con un número mínimo de pulsaciones de teclas. Se llama "Command-T" porque está inspirado en la ventana "Ir a archivo" vinculada a Command-T en TextMate.

Los archivos se seleccionan escribiendo los caracteres que aparecen en sus rutas y se ordenan mediante un algoritmo que sabe que los caracteres que aparecen en ciertas ubicaciones (por ejemplo, inmediatamente después de un separador de ruta) deben tener más peso.

El cambio de búfer más sencillo contiene muchos consejos útiles. He adaptado lo siguiente a mi .vimrc, que completa automáticamente el nombre del búfer, asigna los comandos de cambio de búfer más útiles a mi <Leader> y las teclas de la fila de inicio del lado izquierdo, y muestra el número de búfer actual en la línea de estado :

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

También uso MiniBufExplorer , que proporciona una lista compacta de cada búfer enumerado en su propia parte superior dividida horizontalmente.

David Rivers
fuente
73

Solía ​​usar una combinación de pestañas y múltiples instancias de gvim, manteniendo grupos de archivos relacionados como pestañas en cada instancia. Siempre que no termine con demasiadas pestañas en una instancia, la barra de pestañas le muestra el nombre de cada archivo que está editando de un vistazo.

Luego leí una publicación de Jamis Buck sobre cómo cambió de TextMate a vim y aprendí algunos trucos geniales:

  • Ctrl-w sy Ctrl-w v para dividir la ventana actual
  • Ctrl-6 para alternar entre dos búferes en la misma ventana.
  • el increíble fuzzyfinder.vim que le brinda autocompletar la búsqueda de archivos en su directorio actual o de búferes que actualmente tiene abiertos
  • Los propios fuzzy_file_finder y fuzzyfinder_textmate de Jamis , que modifican ligeramente cómo funciona fuzzyfinder para comportarse más como una característica similar en TextMate (por lo que puedo decir, la diferencia es que coincide en cualquier lugar del nombre del archivo en lugar de solo desde el principio). Mire este video para verlo en acción.

Ahora solo tengo una instancia de gvim, maximizada, y la divido en varias ventanas para poder ver varios archivos a la vez. Vinculé Ctrl-F a fuzzyfinder_textmate, así que ahora si escribo (digamos) Ctrl-F, mod/usobse abre app / models / user_observer.rb. Ya casi nunca me molesto con las pestañas.

Actualización 07/08/2010

Si bien fuzzyfinder_textmate sigue siendo increíble, como señala Casey en los comentarios, ya no se mantiene. Además, (y / o fuzzyfinder.vim) se vuelve un poco lento e inestable cuando se trabaja con proyectos grandes (muchos directorios o archivos), así que he estado buscando una alternativa.

Afortunadamente, parece que hay una muy buena alternativa en forma de Wincent Colaiuta 's Comando-T plug-in . Esto tiene un comportamiento muy similar (si no un poco mejor) a fuzzyfinder_textmate, pero es notablemente más rápido; también tiene características interesantes como poder abrir el archivo encontrado en una división o división vertical. Gracias (¡y votos a favor!) A David Rivers por señalarlo.

Sam Stokes
fuente
Sí, fuzzyfinder se ajusta muy bien a lo que quiero.
Alexey Romanov
Fuzzyfinder_textmate de Jamis completa vim. ¡Realmente debería convertirse en una característica central!
csexton
Parece que Jami ha dejado de trabajar en este proyecto. ¿Quizás el autor original incorporará estas características? weblog.jamisbuck.org/2009/1/28/…
cmcginty
Sam, gracias por los accesorios que me diste (¡en mi cumpleaños!): D
David Rivers
14
Pruebe el complemento ctrlp vim ( kien.github.com/ctrlp.vim ) que implementa fuzzyfinder pero con muchas funciones más útiles :)
Philip
33

Yo uso lo básico - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'

orip
fuente
8
:-) Nunca pensé que vería "simple" y "': ls' + ': bn' / ': bp' + ': b <part-of-name>'" en la misma oración.
paxdiablo
16
Pax, todavía no lo veo. :-)
csexton
Esto, más :map <c-n> :bn<cr>y :map <c-p> :bp<cr>, ya que C-ny C-pson rápidos de escribir y permiten alternar entre búferes si los presiona repetidamente. (Nunca los utilicé para su propósito original.) Es como un ciclo entre las pestañas del navegador con C-PgUpy C-PgDno lo que sea de acceso directo a su navegador tiene.
Tobia
Ctrl + N es el estándar para 'Nuevo archivo' en la mayoría de los otros editores y Ctrl + P es el comando de pegar, por lo que para la mayoría de las personas estos serán realmente confusos. El vim-unimpaired de Tim Pope le da [bpara el búfer anterior y ]bpara el siguiente. Además de muchas otras ventajas que utilizan el concepto de ]para el siguiente y [para el anterior.
icc97
31

Me gusta "ctrl-w s" y "ctlr-w v" para dividir la ventana. Luego mapeo las teclas de movimiento (h, j, k, l) con ctrl presionado para moverme entre las ventanas divididas:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

Tener que mover mi mano hacia las teclas de flecha es molesto.

A continuación, configuré ctlr-tab para cambiar entre búferes en la ventana actual (como muchos otros entornos):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Estos han funcionado bastante bien para mí durante los últimos años, aunque vim siempre tiene más secretos de los que puedes saber.

Dave Ray
fuente
3
Su comentario "cambiar a archivo alternativo" es engañoso porque Vim ya tiene un archivo alternativo, es el archivo anterior en el que estaba y puede cambiar los archivos actual (%) y alternativo (#) fácilmente usando ctrl-6.
graywh
10
Además, <Cw> con hjkl cambiará de ventana; no se requieren teclas de flecha.
graywh
4
<CS-Tab> solicita RSI. He asignado <SJ> :bpy <SK> a:bn
puk
3
Remapear <SJ> parece una mala elección en el modo normal, ya que se usa comúnmente (para concatenar líneas).
Michael Percy
18
nmap <Leader>bb :ls<CR>:buffer<Space>

y nadie mencionó el buen complemento ctrlp.vim . Con este complemento puede buscar búfer por nombre.

KOlegA
fuente
¡Me gusta ese mapeo! Inteligente y flexible.
ivan
14

yo suelo

CTRL- Jpara el siguiente búfer

CTRL- Kpara búfer anterior

CTRL- Lpara la siguiente pestaña

CTRL- Hpara pestaña anterior

Aquí está la .vimrcconfiguración:

map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
map <C-L> :tabn<CR>
map <C-H> :tabp<CR>

Ver http://syskall.com/my-biggest-vim-productivity-boost/

Olivier Lalonde
fuente
5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>
Término
fuente
1
¡Lo más interesante de Vim es que puedes aprender algo todos los días!
Luc M
La pregunta es sobre búferes , no pestañas ... pero puede :tab sballprimero, o en lugar de usar :tabndebe usar:buffer
pera
5

Recientemente me he vuelto más minimalista.

Para ciclar los búferes que utilizo ]by [bde los que no están afectados: https://github.com/tpope/vim-unimpaired

Para saltar directamente a un búfer abierto, simplemente use la función de completar la pestaña de Vim con :b. Unas pocas letras son suficientes para llegar a cualquier búfer abierto con una pestaña o dos.

De manera similar a los búferes abiertos que uso :econ rutas relativas y pestaña completa.

También utilizo :lsocasionalmente para ver qué búferes tengo abiertos (y para verificar su estado modificado).

Para deshacerme de un búfer, utilizo :bwpara limpiar el búfer. Normalmente hago una división temporal y cambio los búferes para conservar mi diseño, ya que :bwtambién cierra la ventana activa.

Todas las cosas de minibuf que probé simplemente terminaron molestándome, y no quiero que algo de coincidencia inteligente abra archivos aleatorios para mí. Si realmente necesito buscar algo, uso NERDtree ( :e .).

IDK, últimamente también dejé caer Yankring (porque se estropea xp) y comencé a usar registros, y recientemente decidí que los movimientos f/ tson lo mejor que existe ...

kitsu.eb
fuente
Todo esto es un gran consejo. Me asigné <leader>lla :ls. También es muy útil para asegurarse de que usted tiene set wildmenuen su .vimrccomo entonces se obtiene un pequeño menú que aparece con todas las alternativas para:b
icc97
2

El excelente Buffer Explorer , ha llegado a tener una memoria muscular tan fuerte que me encuentro deseando poder usarlo en otras aplicaciones. Lo encuentro extremadamente rápido cuando edito activamente más de dos archivos.

csexton
fuente
2

Pasé bastante tiempo construyendo mi .vimrc para trabajar con este proyecto HTML :: Mason en el que he estado durante cuatro años, así que tengo una extraña combinación de pestañas y ventanas divididas. Para su disfrute visual:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>
Jack M.
fuente
2

Yo uso tselectbuffer . Es realmente rápido y, a diferencia de bufexplorer, no ocupa espacio en tu ventana. También tiene una búsqueda incremental. Probé con minibufexplorer y encontré un poco difícil la navegación en el búfer.

Tauro Olson
fuente
Gracias por el puntero, ahora uso ambos. Los valores predeterminados para BufExplorer son ,be, ,bs, ,bv, por lo que Me asignan a TSelectBuffer ,bb.
Brady Trainor
2

Para enumerar y cambiar entre búferes que uso:

nnoremap <Leader>l :ls<CR>:b<space>

Para cambiar entre búferes:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>
diegoviola
fuente
2

He mapeado <S-J>y <S-K>a :bpy :bn, aunque admito que no lo uso ya que la cantidad de archivos es mayor a 10. Luego he mapeado <C-J>y <C-K>a las pestañas anterior y siguiente de Gnome Terminal, y normalmente ejecuto 4 instancias de vim para cada una de los 4 proyectos diferentes en los que trabajo. Todavía deseo que el búfer anterior y el siguiente vayan al historial de búferes en los que he estado trabajando, y no al orden en la lista de búferes.

puk
fuente
2

Yo uso tselectbuffer. Es realmente rápido y, a diferencia de bufexplorer, no ocupa espacio en tu ventana. También tiene una búsqueda incremental. Probé con minibufexplorer y encontré un poco difícil la navegación en el búfer.

anita
fuente
0

Yo uso simple: vsplit con ^ W + w / ^ W + r y: tabnew con combinaciones de teclas Ctrl + Alt + PgUp / PgDown.

Eimantas
fuente
1
Tengo que estar de acuerdo con lo que dijo Zathrus aquí . Las pestañas en Vim (o Emacs con TabBar para el caso) simplemente no funcionan como en las interfaces con pestañas habituales.
Alexey Romanov
0

Cuando hay varios búferes abiertos en una sesión de Vim, puede resultar difícil realizar un seguimiento de los búferes y sus respectivos números de búfer. Si este es el caso, cambiar a un archivo diferente puede ser más fácil usando un mapa simple:

: nnoremap (F5): búferes (CR): búfer (espacio)

vim.wikia.com

castor
fuente