Vim - lista dinâmica de buffers abertos em uma janela

20

Eu tenho investigado algumas maneiras de manter uma lista de buffers abertos no Vim, e alguns deles são muito bons, mas nenhum deles parece se comportar da maneira que eu gostaria. É muito possível que nada como o que eu quero exista, e não faz mal perguntar.

Eu tenho usado o NERDTree no GVim, e gosto da idéia de colocar as informações em uma pequena janela esquerda. Eu criei um diagrama útil para a aparência do meu ambiente:

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

Então, a minha pergunta é: Existe uma maneira vim-native ou plugin-enabled para manter uma lista de buffers atualmente abertos e selecionar / editar / fechar a partir dessa lista, dentro de uma janela semelhante ao NERDTree?

Eu entendo que esta abordagem pode ser incongruente com a maneira do Vim de fazer as coisas , e se você sentir que está faltando alguma coisa sobre como gerenciar vários arquivos em uma sessão do Vim, por favor deixe um comente com sugestões!

    
por asfallows 03.05.2012 / 19:53

3 respostas

6

Você pesquisou o repositório de plugins do vim.org? Existem dezenas de plugins de troca de buffer para você escolher como BufferGator ou SelectBuf . Alternativamente, a maioria deles é compilada em uma boa lista no wiki do Vim .

Como você aludiu na última parte da sua pergunta, esse tipo de sistema não é para todos os gostos.

Eu odeio ter todos esses menus, botões e listas disto ou aquilo aberto o tempo todo: uma lista de buffers abertos é útil apenas quando você realmente precisa pular para outro buffer, deixando A lista aberta parece um desperdício de espaço para mim. O mesmo pode ser aplicado a linhas de status superalimentadas também.

Eu uso o mesmo plugin para alternar entre buffers e explorar o sistema de arquivos ao redor do site. arquivo que estou editando atualmente. Chamada com ,f (arquivos) ou ,b (buffers), a janela desaparece quando eu terminar. Perfeito. Existem outros similar plugins , experimente-os se você gosta dessa ideia.

EDITAR

Eu me sinto obrigado a adicionar um GIF animado de CtrlP em ação, trocando buffers:

ENDEDIT

O nativo :sb <Tab> também é bem legal, mas menos sexy. Ele não suporta correspondências parciais, mas tem algumas grandes vantagens: ele é integrado e funciona como :e <Tab> , :vs <Tab> e assim por diante.

    
por 03.05.2012 / 22:08
5

Eu recomendo o MiniBufExplorer . Veja também uma alternativa ao minibufexplorer?

    
por 03.05.2012 / 21:00
1

Existe uma maneira de fazer exatamente isso usando o plugin winmanager . Neste screenshot eu combino NERDTree e MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, último commit atm 349a9fbb ) plugins na mesma divisão vertical e alterne com F4. Em teoria, esta solução deve funcionar para qualquer outra combinação de plugins.

Exemplo do meu .vimrc

" {{{ MiniBufExpl config
let g:miniBufExplVSplit = 20 " open in vertical
let g:miniBufExplSplitToEdge = 0 " open relative to previous window (NERDTree)
" }}} MiniBufExpl config

" {{{ winmanager config
" register the plugins
let g:NERDTree_title='NERD Tree'
let g:MiniBufExpl_title='MiniBufExpl'

" set the layout
let g:winManagerWindowLayout='NERDTree|MiniBufExpl'

" handler for NERDTree
function! NERDTree_Start()
    exec 'NERDTree'
endfunction

" handler for MiniBufExpl
function! MiniBufExpl_Start()
    exec 'MBEOpen'
endfunction

" mapping to toggle the split to F4
nmap &ltF4&gt :WMToggle
" }}} winmanager config

Problemas:

  • O NERDTree não usa o buffer que o winmanager cria, mas abre em seu próprio ...
  • ... portanto, o buffer winmanager permanece inutilizado
  • O MiniBufExpl não se atualiza adequadamente ao pular entre buffers

O comportamento que consegui está longe de ser perfeito, mas é um bom começo.

    
por 07.08.2013 / 18:49