Como mover uma janela existente para uma nova guia?

151

Existe uma maneira de pegar uma janela existente (dividir) e colocá-la em uma nova guia?

Drew Stephens
fonte
Se você voltar a esta pergunta, altere a resposta aceita, a da DrAI é muito mais correta do que a de Mykola.
Gbr3

Respostas:

261

Assim como a :tabeditabordagem sugerida anteriormente , uma maneira mais rápida de fazer isso (no modo normal) é pressionar Ctrl- W Shift- T. Ctrl-W é o prefixo geral para uma ampla variedade de comandos de manipulação de janelas.

Vejo:

:help Ctrl-W_T
:help Ctrl-W
DrAl
fonte
3
Observe que o help Ctrl-W_Tleva para a entrada de ajuda de Ctrl-W_t(minúscula), no entanto, mais abaixo na página está a Ctrl-W_Tentrada (com T maiúsculo), dizendo "Mova a janela atual para uma nova página de guia ...."
Rabarberski,
1
@DrAl e como movemos uma nova janela da guia para dividir a janela?
Ramiz Uddin
@RamizUddin Não há uma maneira simples de fazer isso (pois não é óbvio em qual janela você deseja abrir). No entanto, você pode descobrir o número do buffer da página da guia atual :echo bufnr("")e, usando esse número, pode dividir uma janela com :sp #3ou :sb 3(supondo que o número seja 3). Você pode criar alguns mapeamentos ou funções para simplificar isso.
DrAl
1
Como você move o buffer para uma nova guia, mantendo seu estado de desfazer / refazer. Em outras palavras, não quero abrir o mesmo arquivo em uma nova guia, quero literalmente mover o buffer para uma nova guia, para que o histórico de edição possa ser usado na nova guia. Se não houver uma maneira padrão de fazer isso, aposto que pode ser feito um plug-in que adiciona um novo atalho para isso, que grava o histórico de desfazer no arquivo de troca do novo buffer.
trusktr
2
@trusktr Eu imagino que abrir o buffer em uma nova guia :sbfuncionaria, mas com versões recentes do Vim (> = 7.3) você também pode usar desfazer persistente definindo set undodir=/path/to/dironde / path / to / dir é um diretório que você criado para a finalidade e depois set undofile. Isso permitirá que você saia do vim, reinicie e mantenha o estado de desfazer / refazer.
DrAl 25/03
103

Experimentar

:tabedit %<CR>
Mykola Golubyev
fonte
3
Apenas curioso por que você incluiu o <CR> nisso.
Swiss
17
Pela mesma razão, incluí ":". Esta é a combinação de teclas vim completa no modo normal e você pode usar isso em 'nnoremap' e em 'nmap'
Mykola Golubyev
6
Isso também funciona, exceto que clona / duplica a janela para uma nova guia, em vez de fechá-la primeiro e depois abri-la em uma nova guia. Não é grande coisa. Apenas algo para estar ciente.
A-Dubb
6
Esta não move o buffer para uma nova guia, ele só abre o mesmo arquivo em uma nova guia, mas você não vai ter de desfazer / refazer a história, etc.
trusktr
5
C-w Té a maneira mais rápida de fazer o mesmo
Dylanthepiguy
3

Isso move o buffer mais recente em uma nova guia e restaura o buffer anterior na guia atual. Eu uso isso depois de arrastar um novo arquivo para o meu Gvim

:sbp |wincmd p| wincmd T

Você pode mapeá-lo dessa maneira para Ctrl-Backspace

:nnoremap <C-BS> :sbp<bar>wincmd p<bar>wincmd T<CR>

ele executa especialmente bem com

:set switchbuf=usetab

fonte
0

Eu tenho usado isso, que fornece duas funções que podem ser vinculadas a um par de teclas de atalho ou comandos, e que funciona de maneira bastante intuitiva. Tenho certeza de que oferece um comportamento ainda mais amigável do que por exemplo Ctrl-W_T.

Por exemplo, quando várias janelas são abertas em várias guias, o uso dessa função permite mover especificamente a janela atual para a próxima ou a anterior e, se você mover algo para antes da primeira ou depois da última, será exibido em uma guia totalmente nova.

Isso significa que, se você tiver 2 guias, cada uma com uma única janela, mover a janela da primeira guia para a direita combinará com a segunda guia para resultar em uma única guia com duas janelas. Não sei o quão complicada essa operação é conseguir usando comandos tradicionais.

O que isso significa é que um único par de comandos de movimento permite mudar as janelas em torno das guias, dividir as janelas em guias (empurrando uma janela para o final) e unir guias separadas nas janelas dentro de uma única guia, praticamente tudo você poderia desejar, com falta de arranjo posicional (que é um tópico separado e para o qual os comandos Ctrl-W+ Shift-HJKLinternos funcionam bem).

Steven Lu
fonte