Mover a janela existente para a guia existente


13

Às vezes, preciso mover o Windows para uma guia já existente e fiquei imaginando se havia um atalho de comando / teclado que poderia fazer isso. Sei que posso fechar a janela, alternar para a guia e abri-la em uma nova divisão, mas fiquei pensando se havia uma maneira mais curta de fazer isso. Observe que eu quero movê-lo para uma guia existente , não para uma nova guia, como <C-w>Tfaz.


Não é possível mover janelas entre guias.
Lcd047 25/05

Hmm, isso é muito ruim. Provavelmente eu poderia criar algum mapeamento ou comando que poderia realizá-lo.
EvergreenTree

Acho que o melhor que você pode fazer é salvar todas as configurações da janela e, em seguida, recriá-la na guia existente.
Tommcdo 25/05

Respostas:


10

Embora existam comandos para mover janelas existentes na página da guia atual (isto é, afetem o layout da janela girando, redimensionando e movendo), não há comandos para mover uma janela para outra guia.

Como uma janela é apenas uma viewport para um buffer carregado, você deve:

  1. Observe o número do buffer exibido na janela atual.
  2. :close! a janela.
  3. Alterne para a página da guia de destino existente.
  4. :sbuffer o número do buffer para reabri-lo.

Você perderá todas as opções específicas da janela com isso. Você também pode salvar e restaurar aqueles em um script.


Imaginei que esse fosse o caso. Eu provavelmente poderia fazer um pequeno script que faça exatamente isso.
EvergreenTree

2
  1. vá para a guia de destino existente
  2. dividi-lo como quiser
  3. :b ab(complete o restante da guia)

absão apenas letras aleatórias, substitua pelo início do nome do arquivo desejado. :bO preenchimento de guias teve um desempenho muito bom para mim; geralmente, ele pode encontrar o buffer de origem correto com base em apenas uma letra e Tabpressionamentos de tecla 1-2 .

O benefício dessa abordagem sobre o de Ingo é a falta de notar ou lembrar de nada, o que significa menos carga cognitiva. Nome de arquivo que você já conhece de qualquer maneira.


2

Os dois comandos definidos abaixo movem todos os buffers da guia à direita para a guia atual e feche a guia à direita. Mtabspmove-os dividindo horizontalmente e Mtabvspdivididos verticalmente. Você precisa mover a guia mesclada antes de usar os comandos. Use +tabm, -tabmou <n>tabm.

Configuração

Adicione o script vim abaixo ao seu vimrc:

function! Mtab(vert)
    if tabpagenr() == tabpagenr("$")
        return 0
    endif
    +tabnext
    let s:killed_tab = tabpagenr()
    let s:buf_list = tabpagebuflist()
    -tabnext
    for item in s:buf_list
        if a:vert
            vsp
        else
            sp
        endif
        execute "buf " . item
    endfor
    execute "tabclose " . s:killed_tab
endfunction

command! Mtabsp call Mtab(0)
command! Mtabvsp call Mtab(1)

Detalhes técnicos

A função Mtab recebe um parâmetro vert. Determina se a guia atual é dividida horizontal ou verticalmente.

O resultado desejado é alcançado com as seguintes etapas:

  1. Passamos para a próxima guia temporariamente
  2. Use duas variáveis ​​para referenciar seu número de guia e buffers
  3. Retornar para a guia atual
  4. Dividimos a guia e abrimos cada buffer
  5. Por fim, fechamos a guia à direita

Se nossa guia atual for a última, os comandos serão ignorados.


1

Se for um buffer de arquivo (não funcionará para buffers de rascunho, etc.), você pode:

  1. :let @f=@%ENTER - na janela de origem;
    • Isso substitui o conteúdo do registro regular f pelo conteúdo do registro especial % , que contém o nome do arquivo atual.
    • Nota: Eu escolhi o registro f como no arquivo , mas você pode usar qualquer outro registro que desejar.
    • Você pode verificar se o registro contém o caminho correto com: :echo @f
  2. Opcionalmente: Ctrl-WCtrl-Q- para fechar a janela antiga;
  3. gt/ gT- navegue até a guia de destino (e janela);
  4. Ctrl-Ws - divida a guia da maneira que quiser, para abrir uma nova janela;
  5. :e␣Ctrl-RfENTER
    • na janela recém-aberta, carrega um arquivo do caminho armazenado no registro f ;
    • Nota: o caractere here marca aqui um espaço regular.

Nota importante: a etapa final não funcionará corretamente se o caminho contiver espaços ou alguns caracteres especiais! :-( Como solução alternativa, o comando a seguir, um pouco mais longo, deve funcionar para caminhos com espaços (embora ainda possa falhar em alguns outros caracteres especiais):

  • :e␣"Ctrl-Rf"ENTER

(ou seja, citando o resultado de Ctrl-R, f )

Inspirado nas respostas de lkraav e ingo-karkat .


Isso é fantástico, eu preciso configurar um mapeamento para "recortar e colar" do Windows em Guias.
dragon788
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.