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


22

Eu investiguei 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 parecido com o que eu quero exista, e não custa nada perguntar.

Estou usando o NERDTree no GVim e gosto da ideia de colocar as informações em uma janela delgada do lado esquerdo. Reunimos um diagrama útil de como eu gostaria que meu ambiente fosse:

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

Portanto, minha pergunta é: Existe uma maneira nativa do vim ou habilitada por plug-in para manter uma lista de buffers atualmente abertos e selecionar / editar / fechar a partir dessa lista, dentro de uma janela semelhante ao NERDTree?

Entendo que essa abordagem pode ser incongruente com a maneira de fazer as coisas no Vim , e se você sentir falta de algo sobre como gerenciar vários arquivos em uma sessão do Vim, deixe um comentário com sugestões!


Também estou procurando ter uma lista de buffers abaixo (ou acima) do painel nerdtree. Vou tentar lembrar de atualizar este post se eu encontrar uma solução boa (mas obrigado por perguntar de qualquer maneira)
Eric Drechsel

Respostas:


7

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


Como você mencionou na última parte da sua pergunta, esse tipo de sistema não é do agrado de todos.

Eu odeio ter todos esses menus, botões e listas disso ou daquelas sempre abertos: uma lista de buffers abertos só é útil quando você realmente precisa pular para outro buffer, deixar essa lista aberta parece um desperdício de espaço para mim. . O mesmo pode ser aplicado às linhas de status sobrecarregadas também.

Eu uso o mesmo plugin para alternar rapidamente entre buffers e explorar rapidamente o sistema de arquivos em torno do arquivo que estou editando no momento. Invocada com ,f(arquivos) ou ,b(buffers), a janela desaparece quando eu terminar. Perfeito. Existem outros plugins semelhantes , experimente todos se gostar dessa ideia.

EDITAR

Sinto-me compelido a adicionar um GIF animado de CtrlP em ação, alternando buffers:

Alternando buffers com CtrlP

ENDEDIT

O nativo :sb <Tab>também é muito elegante, mas menos sexy. Ele não suporta correspondência difusa, mas tem algumas grandes vantagens: é construído em e funciona como :e <Tab>, :vs <Tab>e assim por diante.


Obrigado por suas sugestões. Parece que o BufferGator e o SelectBuf estão pelo menos próximos da funcionalidade que procuro, embora possam precisar de alguns ajustes para fazer as coisas funcionarem. Eu definitivamente aprecio a preocupação com o desperdício de espaço, mas com o meu caso de uso atual, tenho uma instância do GVim aberta por horas por vez, com muitos arquivos abertos ao mesmo tempo, alternando entre eles conforme necessário. Nessas circunstâncias, uma lista de buffers persistentes é extremamente útil. No entanto, levarei algum tempo para aprender sobre as abordagens mais comuns do Vim para gerenciamento de buffer.
asfallows

Eu imagino que você trabalha em um grande monitor. Qualquer que seja o sistema escolhido, você ainda precisará 1. alternar para a lista de buffers, 2. selecionar um buffer, 3. pressionar uma tecla para pular para ele, independentemente de a lista de buffers já estar visível ou não. O uso de um comutador de buffer "sob demanda" é tão eficaz quanto manter uma lista de buffers aberta e economizar espaço.
Romainl

Eu definitivamente aprecio esse raciocínio, e é por isso que não estou muito apreensivo com a possibilidade de que a configuração exata que estou descrevendo aqui não seja possível. A única grande vantagem de uma lista persistente de buffers é que são necessários 0 pressionamentos de tecla para verificar quais buffers estão abertos, uma informação que eu acho valiosa e também me acho muito ruim em manter a memória de curto prazo. (E sim, eu trabalho em uma bastante grande monitor.)
asfallows

@romainl, qual comando vimrc você usou para mapear ,bpara pesquisar buffers com ctrlp?
snowbound

1
@snowbound, FWIW Eu parei de usar CtrlP ou qualquer outro plug-in semelhante há algum tempo. Enfim, meu comando foi nnoremap ,b :CtrlPBuffer<CR>.
Romainl

5

Obrigado pela resposta - eu encontrei o MiniBufExplorer e parece que ele é extremamente bom no que faz, mas não atende às condições que descrevi para como gostaria de gerenciar buffers. Se não houver uma boa maneira de fazer o que estou tentando fazer, ou se eu decidir que não é a maneira certa de fazer, o MBE está no topo da minha lista de coisas a serem tentadas a seguir.
Asfallows

1
A única condição que não é atendida é que a lista esteja à esquerda. Concordo, MiniBufExplorerestá no topo (onde não desperdiça tanto espaço quanto à esquerda). Ou talvez eu tenha entendido mal suas necessidades.
Marco

Com a minha configuração atual, ter a lista de buffers à esquerda, como representada, é na verdade uma melhoria no uso do espaço, porque o NERDTree fica aberto o tempo todo, mas nem sempre a vertical completa. Compartilhar esse espaço com uma lista de buffers seria bom. Vale a pena notar que é assim que eu uso o GVim, e eu não gostaria de uma coluna esquerda persistente se estivesse usando o Vim no console. A maioria do meu uso do console do Vim é "arquivo aberto, fazer edição rápida, perto vim"
asfallows

1

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

Exemplo do meu .vimrc

"{{{MiniBufExpl config
deixe g: miniBufExplVSplit = 20 "abrir na vertical
deixe g: miniBufExplSplitToEdge = 0 "aberto em relação à janela anterior (NERDTree)
"}}} Configuração MiniBufExpl

"{{{configuração do winmanager
"registrar os plugins
deixe g: NERDTree_title = 'Árvore NERD'
deixe g: MiniBufExpl_title = 'MiniBufExpl'

"definir o layout
deixe g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"manipulador para NERDTree
função! NERDTree_Start ()
    exec 'NERDTree'
função final

"manipulador para MiniBufExpl
função! MiniBufExpl_Start ()
    exec 'MBEOpen'
função final

"mapeamento para alternar a divisão para F4
nmap <F4>: WMToggle
"}}} configuração do winmanager

Problemas:

  • O NERDTree não usa o buffer que o winmanager cria, mas abre por conta própria ...
  • ... portanto, o buffer do winmanager permanece sem uso
  • MiniBufExpl não se atualiza corretamente ao saltar entre buffers

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.