¿Cómo prefieres cambiar entre buffers en Vim?


He probado MiniBufExplorer, pero normalmente termino con varias ventanas mostrándolo o cerrándolo por completo. Lo que me gustaría es algo como LustyJuggler con la búsqueda incremental, la forma en que cambio entre búferes en Emacs. ¿Seguro que hay un guión como este?

Author: Alexey Romanov, 2008-11-29

16 answers

He estado usando Wincent Colaiuta Comando-T vim plugin desde hace 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 el Comando Textmate-T. Echa un vistazo a la screencast.

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

Los archivos se seleccionan escribiendo personajes que aparecen en sus caminos, y están ordenados por un algoritmo que sabe que los personajes que aparecen en ciertos lugares (por ejemplo, inmediatamente después de un separador de ruta) se le debe dar más peso.

El cambio de búfer más fácil contiene muchos consejos útiles. He adaptado lo siguiente a mi .vimrc, que hace buffer-name autocompletado, asigna los comandos de conmutación de búfer más útiles a mis teclas y 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 listado en su propia división horizontal arriba.

 23
Author: David Rivers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-06 14:37:44

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 y cuando no termine con demasiadas pestañas en una instancia, la barra de pestañas te muestra el nombre de cada archivo que estás editando de un vistazo.

Luego leí un post de Jamis Buck sobre cómo cambió de TextMate a vim , y aprendí algunos grandes trucos:

  • Ctrl-w s y Ctrl-w v para dividir la ventana actual
  • Ctrl-6 para volver y adelante entre dos buffers en la misma ventana.
  • el impresionante fuzzyfinder.vim que le da la búsqueda de autocompletado de archivos en su directorio actual o de búfers que actualmente tiene abierto
  • El propio de Jamis fuzzy_file_finder y fuzzyfinder_textmate , 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 empezar). Mira este video para verlo en acción.

Ahora solo tengo una instancia de gvim, maximizada y dividida en varias ventanas para que pueda ver varios archivos a la vez. He enlazado Ctrl-F a fuzzyfinder_textmate, así que ahora si escribo (digamos) Ctrl-F mod/usob se abre app/models/user_observer.rb. Casi nunca me molesto con las pestañas más.

Actualización 2010/08/07

Mientras que fuzzybinder_textmate sigue siendo impresionante, como Casey señala en los comentarios, no es más tiempo mantenido. Además, es (y / o fuzzyfinder.vim) se vuelve un poco lento e inestable cuando se trabaja con proyectos grandes (muchos directorios o archivos), por lo que he estado buscando una alternativa.

Afortunadamente, parece haber una muy buena alternativa en forma de Wincent Colaiuta's Command-T plugin. Esto tiene un comportamiento muy similar (si no ligeramente mejor) a fuzzyfinder_textmate, pero es notablemente más rápido; también tiene buenas características como ser capaz de abrir el encontrado archivo en una división o división vertical. Gracias (y upvotes!) a David Rivers por señalarlo.

 73
Author: Sam Stokes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-09 01:25:21

Utilizar los conceptos básicos - ':ls' + ':bn'/':bp' + ':b <part-of-name>'

 33
Author: orip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-29 11:44:13

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 pulsada 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 a las teclas de flecha es molesto.

A continuación, configuré ctlr-tab para cambiar entre buffers 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í en los últimos años, aunque vim siempre tiene más secretos de los que puedes saber.

 31
Author: Dave Ray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-01 03:17:46
nmap <Leader>bb :ls<CR>:buffer<Space>

Y nadie mencionó buen plugin ctrlp.vim . Usando este plugin puedes buscar buffer por nombre.

 17
Author: KOlegA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-19 14:33:41

Utilizo

CTRL-J para el próximo búfer

CTRL-K anteriores búfer

CTRL-L para la siguiente ficha

CTRL-H para la ficha anterior

Aquí está la configuración .vimrc:

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

Véase http://syskall.com/my-biggest-vim-productivity-boost /

 14
Author: Olivier Lalonde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-21 03:20:43

Recientemente me he vuelto más minimalista.

Para los tampones de ciclo utilizo ] b y [b de intacto: https://github.com/tpope/vim-unimpaired

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

De manera similar a los búferes abiertos, uso : e con rutas relativas y tabulación completa.

También uso : ls ocasionalmente para ver qué búferes tengo abierto (y para comprobar su estado modificado).

Para deshacerse de un búfer utilizo : bw para borrar el búfer. Normalmente hago una división temporal y cambio búferes para preservar mi diseño, ya que :bw también cierra la ventana activa.

Todas las cosas de minibuf que probé terminaron molestándome, y no quiero que alguna cosa inteligente que coincida abra archivos aleatorios para mí. Si realmente necesito buscar algo, utilizo NERDTree (: e.).

IDK, Últimamente también dejé caer Yanqui (porque arruina xp ) y empecé a usar registros, y recientemente decidí el f/t los movimientos son lo más grande de la historia...

 6
Author: kitsu.eb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-23 19:53:02
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>
 5
Author: Terminus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-29 11:49:56

El excelente Buffer Explorer, el be ha llegado a ser una memoria muscular tan fuerte que me encuentro deseando poder usarlo en otras aplicaciones. Me parece que es extremadamente rápido cuando se edita activamente más de dos archivos.

 2
Author: csexton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-29 13:53:06

He pasado bastante tiempo construyendo mi.vimrc para trabajar con este proyecto HTML:: Mason He estado en durante cuatro años, así que tengo una extraña mezcla 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>
 2
Author: Jack M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-12 15:10:10

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

 2
Author: Taurus Olson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-03 23:39:58

Para listar y cambiar entre búferes utilizo:

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

Para cambiar entre búferes:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>
 2
Author: diegoviola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-19 12:57:38

He mapeado <S-J> y <S-K> a :bp y :bn, aunque admito que no lo uso ya que el número de archivos es mayor que 10. Luego he mapeado <C-J> y <C-K> a las pestañas anterior y siguiente de Gnome Terminal, y generalmente corro 4 instancias de vim para cada uno de los 4 proyectos diferentes en los que trabajo. Todavía realmente deseo buffer siguiente y anterior iría a la historia de los búferes que he estado trabajando, y no el orden int él lista de búfer.

 2
Author: puk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-09 12:26:51

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

 2
Author: anita,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-08 12:52:55

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

 0
Author: Eimantas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-29 10:28:49

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

: nnoremap (F5): buffers(CR): buffer(Space)

Vim.wikia.com

 0
Author: castor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-04 22:12:30