Jak mogę przywrócić moje okna do postaci siatki?

12

Jeśli mam okna ułożone w cztery ćwiartki, zgodnie z następującą sekwencją poleceń:

  • :tabnew
  • :vsplit
  • :split
  • <C-W>l
  • :split

następnie wpisanie polecenia <C-W>Jspowoduje, że nie będą one już kwadratowe; w takim przypadku zmusi jedno okno do unoszenia się na dole.

Jak mogę zrobić coś przeciwnego - to znaczy zmusić okna z powrotem do kwadratowej formacji?

Przeczytałem, :help window-movingale nic nie widziałem.

wchargin
źródło
1
Nie jestem pewien, co próbujesz osiągnąć, naciskając klawisz <CW> J, który przesuwa „bieżące okno na sam dół, używając pełnej szerokości ekranu”, co oznacza, że ​​okna będą z definicji nie powinien już być w siatce. Co naprawdę próbujesz zrobić ze swoimi oknami?
Bogaty
3
@Rich Myślę, że OP jest tylko przykładem sytuacji, po której może chcieć zresetować okna do tworzenia siatki.
Gonçalo Ribeiro
@ GonçaloRibeiro Correct.
wchargin
Chociaż nie jest to odpowiedź, jeśli szukasz przykładów kodu, aby stworzyć własne rozwiązanie, zalecamy sprawdzenie fantastycznego projektu Microviche .
Nowa Aleksandria

Odpowiedzi:

4

O ile mi wiadomo, nie ma łatwego sposobu na rozmieszczenie otwartych podziałów w siatkę podziałów. W takim przypadku najprostszym sposobem na powrót do siatki jest ręczne skorygowanie struktury:

  1. zamknij podział unoszący się u góry
  2. wróć do podziału zajmując połowę ekranu
  3. ponownie podziel go za pomocą :split <file>

Spowoduje to powrót do siatki. Sposobem na manewrowanie podziałów bez wpływu na układ okna jest użycie [liczba] Ctrl - W x , która zamienia bieżące okno z oknem [liczba].

davidlowryduda
źródło
Wiem, że mogę to zrobić, ale jest kilka wad. (1) Jeśli okno jest jedynym widokiem danego bufora, a bufor jest brudny, będziesz musiał :wqlub :q!żaden z nich nie jest pożądany. (2) Spowoduje to zresetowanie wszelkich ustawień specyficznych dla okna, takich jak pozycja kursora. (3) Spowoduje to zerwanie wszelkich trwających różnic. Zasadniczo okna są pierwszorzędnymi obywatelami; niszczenie ich i tworzenie nowych po prostu nie wystarczy.
wchargin
@WChargin Niektóre z nich znikną, jeśli ustawisz vim, aby zezwalał na ukryte bufory. Ale tak ...
derobert
2
Zamiast zamykać okno i dzielić bufor na żądaną lokalizację, podziel nowe okno tam, gdzie chcesz, przejdź do okna, które chcesz przenieść, a następnie zamknij (przeniesione) nowe okno.
tommcdo
4

Możesz zapisać swój ulubiony układ za pomocą winsaveviewpolecenia. Tutaj mapuję to \svdla wygody:

nnoremap <Leader>sv :let g:myLayout = winsaveview()<CR>

Uruchom go, zanim złamiesz układ! ;-)

Teraz, jeśli przypadkowo złamiesz układ, możesz go przywrócić:

nnoremap <Leader>rv :call winrestview(g:myLayout)<CR>
joeytwiddle
źródło
4

Domyślne klucze do zmiany aranżacji okien działają tylko w obrębie lokalnej grupy podziału:

CTRL-W x   Exchange current window with next (in group)
CTRL-W r   Rotate windows down/right (in group)

Lub wybijają okno do najwyższej grupy:

CTRL-W  H | J | K | L   Move window to left/top/bottom/right-most edge

Są one nieodpowiednie, gdy chcesz przenieść bufor do jednej z pozostałych podzielonych grup.

Ale przy takich okazjach, wtyczki WindowSwap może pomóc . Pozwala zamienić bufory dowolnych dwóch dowolnych okien.

<leader> yw   "Yank window": Yank the current window

<leader> pw   "Paste window": Swap the current window with the yanked window
joeytwiddle
źródło