Renumerando a lista de buffer

29

Depois de trabalhar em um projeto há algum tempo, começo a ver grandes lacunas entre os números consecutivos de buffer. Isso ocorre porque os buffers entre eles foram eliminados por vários motivos. Infelizmente, isso pode dificultar o acesso a um buffer específico ou selecionar um intervalo de buffers após a digitação :ls. Existe alguma maneira de renumerar todos os buffers abertos, iniciando em um, sem abrir todos os arquivos novamente?

ponteiro vazio
fonte

Respostas:

21

Não (não sem excluir buffers).

O Vim não suporta a atribuição manual de números de buffer ou a reordenação de buffers depois que você os abre. Sua filosofia é que cada buffer obtenha um identificador que seja corrigido durante toda a vida útil desse buffer (na ajuda de :ls, ele observa que "cada buffer possui um número único. Esse número não muda ...").

Você pode usar a lista de argumentos, no entanto. Coloque todos os buffers abertos na lista de argumentos, exclua todos os buffers pendentes e abra tudo na lista de argumentos. Os seguintes comandos farão isso:

  • :argdel * (exclua a lista de argumentos existente)
  • :bufdo argadd % (para cada buffer, adicione o caminho do buffer à lista)
  • :1,1000bd (exclua os buffers de 1 a 1000; provavelmente existe uma maneira melhor de fazer isso)
  • :argdo e (para cada argumento, edite esse argumento)

Isso deixará um buffer extra vazio que o vim abre quando você exclui todos os buffers anteriores, mas é uma aproximação razoável da funcionalidade que você deseja. Você pode apenas :bdesse buffer extra.


fonte
11
Sua resposta diz não, mas parece que funciona muito bem!
precisa saber é o seguinte
(Eu quis dizer "não" no sentido de que você não pode fazê-lo sem reabrir arquivos). Na verdade, ele renumerou 1 para você? Eu pensei que fiz quando tentei pela primeira vez, mas agora estou vendo que não é renumerado para mim?
Sim, renumera para mim.
precisa saber é o seguinte
Sim, sou burro, encontrei meu erro.
"cada buffer obtém um identificador que é corrigido durante a vida útil desse buffer" na verdade, sessão!
14

"os números do buffer ficam loucos" Conte-me! Até o final do dia, eu tenho mais de 100 buffers. Mas, felizmente, como você pode ver nesta animação, você tem a tabconclusão de nomes de buffer.

Hit: b se <Tab>

Portanto, mesmo que você não possa renumerar os buffers, ainda poderá pular facilmente.

Não sei se está claro na animação, mas a "conclusão da guia" é diferente da conclusão da guia da linha de comando. É mais como um "substituto de guia de resolução de ambiguidade". Significando que na linha de comando eu teria que digitar sctabentão, setabmas aqui o vim faz uma pesquisa 'se' e a substitui pela primeira (e única) correspondência. Se eu tivesse digitado, testtabele corresponderia a 'generate_test_data.py' e, tabnovamente, corresponderia a 'scripts / setup_test_data.sh' e, em seguida tab, teria retornado, etc.

O ponto é que você pode adquirir o hábito de digitar apenas :b <minimum amount of unambiguous characters>tabpara pular para o documento que deseja. Eu acho que isso é ainda melhor do que lembrar "Meus buffers são 1: foo 2: bar 3: etc", que é como eu costumava fazer quando era novato.

Bruno Bronosky
fonte
7

Você pode usar vim-airlines. Este plug-in tem um comportamento que talvez possa resolver seu problema:

Veja a linha 470-479 em airlines.txt

Isso não altera os números do buffer, mas você pode selecionar um buffer da esquerda para a direita pelo número da linha na linha de tabulação. Esta é a minha configuração para companhia aérea em .vimrc:

"set airline 
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2

let mapleader=","

let g:airline#extensions#tabline#buffer_idx_mode = 1

nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

Minha linha de tabulação: Minha linha de tabulação

HJIahu
fonte
surpreendente! Eu amo isso :)
Blasco
Não é a resposta para a pergunta, mas corrige o problema com os números de buffer malucos. Apenas uma recomendação para mostrar apenas buffer_numbers: switch_buffers_and_tabs=1ebuffer_idx_mode=0
caligari
6

De acordo com a documentação, os números de buffer nunca mudam

    Each buffer has a unique number.  That number will not change,
    so you can always go to a specific buffer with ":buffer N" or
    "N CTRL-^", where N is the buffer number.

A única maneira de pensar em renumerar os buffers é reiniciar o vim.

aharris88
fonte
0

Pergunta antiga, mas como isso aparece no topo da pesquisa do Google, deixarei isso aqui para pesquisas futuras. Como Bruno sugeriu, um localizador nebuloso que suporta listas de buffers é o caminho a percorrer. Eu pessoalmente uso e recomendo o fzf-vim . Ele fornece o comando :FZFBuffers, que se parece com isso:

insira a descrição da imagem aqui

Os números de buffer são exibidos à esquerda, caso você precise deles, mas com um localizador nebuloso, talvez você nunca precise usá-los novamente. Lembre-se de parte do nome do arquivo e, geralmente, são pressionadas 2 a 5 teclas. Pessoalmente, mapeei esse comando com um pressionamento de tecla, e alternar entre buffers é quase instantâneo para mim!

verboze
fonte