Abra um buffer como uma divisão vertical no VIM

176

Se você estiver editando um arquivo no VIM e precisar abrir um buffer existente (por exemplo, na sua lista de buffers:), :bufferscomo você pode abri-lo em uma divisão vertical?

Eu sei que você já pode abri-lo com uma divisão normal como:

:sbuffer N

Onde Nestá o número do buffer que você deseja, no entanto, o item acima abre esse Nbuffer horizontalmente, não verticalmente.

Também estou ciente de que você pode alterar o posicionamento da janela após a abertura e ter uma divisão vertical da seguinte forma:

Ctrl-W H
Ctrl-W L

O que dividirá verticalmente a janela para a direita ou esquerda.

Parece-me que, se houver sbuffer, deve haver um, vsbuffermas isso não existe (não que eu saiba)

Além disso, observe que não estou procurando um plugin para resolver esta questão. Eu sei sobre vários plugins que permitirão que você faça isso.

Tenho certeza de que posso estar perdendo algo que já está lá.

EDIT: No melhor espírito de colaboração, criei uma função simples com um mapeamento se outra pessoa se deparar com esse problema e não quiser instalar um plug-in:

Função:

" Vertical Split Buffer Function
function VerticalSplitBuffer(buffer)
    execute "vert belowright sb" a:buffer 
endfunction

Mapeamento:

" Vertical Split Buffer Mapping
command -nargs=1 Vbuffer call VerticalSplitBuffer(<f-args>)

Isso realiza a tarefa de abrir um buffer em uma divisão correta, portanto, para o buffer 1, você chamaria assim:

:Vbuffer 1
alfredodeza
fonte

Respostas:

206

Experimentar:

:vert sb N

que abrirá uma divisão vertical esquerda (por padrão, a menos que você tenha modificado algumas opções).

Para abrir uma divisão à direita, por outro lado:

:vert belowright sb N
Jeet
fonte
5
não parece estranho não ter vsbuffer N? Irritante. Sua resposta é perfeita. Obrigado!
Alfredodeza
13
Eu sempre sinto que deveria haver vsbuffertambém, e também esqueço muitas vezes Ctrl-w Tde abrir um buffer em uma nova guia (ou quero fazer isso com um buffer que não esteja ativo ou visível no momento). Portanto, como alternativa, você pode usar uma barra para qualquer um desses casos, o que acho mais fácil de lembrar do que a resposta válida de @ Jeet: :vsp | b Ne :tabe | b N.
ches
Eu gosto que este comando permita Nser preenchido automaticamente (o que não parece possível com o comando na outra resposta). Ambos votados, no entanto.
David Rivers
124

:vsp | b1

1 sendo algum número de buffer. Use bufferspara listar todos os buffers.

Aqui estão algumas informações adicionais sobre divisões, se você estiver interessado. Ligação

Jerinaw
fonte
9
Você também pode usar :ls, o que parece ser um atalho para :buffers.
dskecse
3
você também pode fazer:vsp | b <buffer name>
Kenny Bambridge
4
@KennyBambridge ainda melhor - você só precisa digitar parte do nome do buffer (com
distinção
Lembre-se de que, embora o Link fornecido por @Jerinaw seja bom, a terminologia dessa página é seriamente enganosa; portanto, você também precisará ler os comentários nessa página para esclarecer.
NeilG 31/12/19
5

Você pode aliviar sua dor adicionando o seguinte ao seu arquivo .vimrc

cabbrev vb vert sb

Agora você pode usá-lo da seguinte maneira.

:vb <buffer>
Vamshi Kadaru
fonte
isso é legal, a versão estendida também oferece preenchimento automático de nomes de buffers! Também não conhecia cabbrev, obrigado.
Kidpixo 27/08/19
2

Você também pode combinar :lsque lista seus buffers atuais e os comandos para abrir o buffer desejado em qualquer

  1. janela atual: :b <N/bufname>
  2. divisão vertical: :vsp | b <N/bufname>
  3. divisão horizontal: :sp | b <N/bufname>

Para isso, adicionei os seguintes mapeamentos ao meu ~/.vimrc(ordem dos mapeamentos representa a lista acima de janelas desejadas)

 nnoremap <leader>b :ls<cr>:b<space>
 nnoremap <leader>v :ls<cr>:vsp<space>\|<space>b<space>
 nnoremap <leader>s :ls<cr>:sp<space>\|<space>b<space>

Com base nisso, você pode ver a lista de buffers assim que clicar em

  1. <leader>b
  2. <leader>v
  3. <leader>s

e, em seguida, basta digitar o número do buffer desejado N. Isso abrirá o buffer na janela desejada. É claro que você ainda pode usar uma parte do nome do buffer bufnametambém.

Mapeei o <leader>para com ,base em

let mapleader = ","

Para algumas pessoas (por exemplo, eu), isso pode até substituir plugins como o MiniBufExpl e, assim, economizar espaço na tela.

Wolfson
fonte
0

você pode usar o Neovim, assim:

autocmd FileType python nmap <F5> :rightbelow vertical split <bar> :term python %<cr>
Arobt
fonte