É possível saber se uma janela está na parte inferior ou superior, esquerda ou direita?


13

Não sei se há alguma função para verificar a posição de uma janela, quero dizer, ela está atualmente na parte inferior ou superior, esquerda ou direita?

__________________________
|           |            |
|           |            |
|  left     |   right    |
|           |            |
|           |            |
|___________|____________|

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |

O que você está tentando fazer? (XY Problem)
mMontu

Estou tentando escrever uma função para girar as divisões das janelas para a vertical, se o layout atual for horizontal e vice-versa, quando houver apenas duas janelas. Então eu preciso saber o que é o layout splits atual e onde está a minha janela atual
Aaron Shen

3
Por que não usar simplesmente ctrl-W_L? (ou ctrl-W_R)
Vitor

Quero que seja uma função de alternância conveniente, ele detectará automaticamente o layout atual e fará a rotação correta para mim, em vez de precisar pensar no meu cérebro e escolher o comando certo a ser usado. Tudo o que preciso fazer é sempre pressionar o mesmo mapeamento de teclas.
Aaron Shen

@AaronShen Dê uma olhada na janela que restaura comandos .
Muru

Respostas:


4

Resumindo os comentários da pergunta:

- Estou tentando escrever uma função para girar as divisões das janelas para a vertical, se o layout atual for horizontal e vice-versa, quando houver apenas duas janelas.

- Por que não simplesmente usar ctrl-W_L? (ou ctrl-W_R)

- Quero que seja conveniente alternar a função, ele detectará automaticamente o layout atual e fará a rotação correta para mim, em vez de precisar pensar no meu cérebro e escolher o comando certo a ser usado. Tudo o que eu preciso fazer é sempre pressionar o mesmo mapeamento de teclas.

Para os layouts que contêm apenas duas janelas, a seguinte função deve funcionar:

function! Rotate()
   " save the original position, jump to the first window
   let initial = winnr()
   exe 1 . "wincmd w"

   wincmd l
   if winnr() != 1
      " succeeded moving to the right window
      wincmd J " make it the bot window
   else
      " cannot move to the right, so we are at the top
      wincmd H " make it the left window
   endif

   " restore cursor to the initial window
   exe initial . "wincmd w"
endfunction

nnoremap <F3> :call Rotate()<CR>

função incrível, apesar de eu não conhecer todos os scripts do vim, mas obrigado, funciona perfeitamente !! btw, eu adiciono apenas uma verificação adicional, pois ela só funciona quando há apenas duas janelas.
Aaron Shen

6

Eu não acho que exista alguma maneira de verificar isso, infelizmente.

Pode haver uma maneira de criar uma função personalizada que verifique isso: Os números das janelas são sempre numerados de 1 no canto superior esquerdo a n no canto inferior direito. Talvez seja possível utilizar esta combinada com os dados de geometria a partir de winwidth(), winheight()e os valores de &linese &columnspara criar o mapa desejado?

Observe que, para ser geral, isso deve oferecer suporte a layouts mais complexos. Qual deve ser a saída se, por exemplo, o lado esquerdo estiver dividido em dois? Talvez seja por isso que a função não exista em primeiro lugar ...

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.