Vim: sair se a lista de buffer estiver vazia

3

Eu gostaria que o :bd e :bw realmente encerrasse minha sessão vim se, depois que o buffer atual fosse removido, a lista de buffer estivesse vazia (ou seja, antes de executar :bd ou :bw , somente tinha o buffer atual na lista de buffers). Como posso fazer isso? Eu diria que deve ser bem fácil, mas googling não produziu nada de útil, e até agora eu não consegui escrever um autocmd para conseguir isso.

    
por Kyle Strand 02.11.2013 / 00:09

2 respostas

7

Para verificar um único buffer, é necessário iterar todos os possíveis buffers e verificar se eles ainda estão listados (por exemplo, em :ls ). A verificação é acionada sempre que um buffer é excluído:

:autocmd BufDelete * if len(filter(range(1, bufnr('$')), '! empty(bufname(v:val)) && buflisted(v:val)')) == 1 | quit | endif
    
por 02.11.2013 / 09:59
1

A solução proposta pode ser problemática em relação a alguns plugins. Este é o atalho que fez isso para mim e parece ser mais seguro, pois não depende de autocmds:

nn q :if ((len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1) && expand('%') == '')<Bar>exe 'q'<Bar>else<Bar>exe 'bd'<Bar>endif<cr>

Ele usa bd , a menos que haja um único buffer sem nome quando ele usa quit .

    
por 22.06.2015 / 08:35

Tags