Как я могу вернуть свои окна обратно в сетку?

12

Если у меня окна расположены в четыре квадранта, как в следующей последовательности команд:

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

затем, введя подобную команду <C-W>J, они больше не будут квадратными; в этом случае это заставит одно окно плавать внизу.

Как я могу сделать обратное, то есть заставить окна вернуться в квадратную формацию?

Я прочитал, :help window-movingно ничего полезного не увидел.

wchargin
источник
1
Мне немного неясно, что вы пытаетесь достичь, когда вы нажимаете <CW> J, который перемещает «текущее окно в самое нижнее, используя всю ширину экрана», это означает, что окна будут больше не будет в сетке по определению. Что вы на самом деле пытаетесь сделать со своими окнами?
Богатый
3
@Rich Я думаю, что OP просто иллюстрирует ситуацию, после которой он может захотеть сбросить окна для формирования сетки.
Гонсалу Рибейру
@ GonçaloRibeiro Правильно.
wchargin
Though not an answer, if you find yourself hunting for code examples to make your own solution, I recommend checking the fabulous Microviche project.
New Alexandria

Ответы:

4

Насколько я знаю, не существует простого способа организовать открытые разбиения в сетку разбиений. В этом случае самый простой способ вернуться в сетку - это вручную исправить структуру:

  1. закрыть сплит, плавающий на вершине
  2. вернуться к расколу, занимая половину экрана
  3. разделить его с :split <file>

Это вернет вас к сетке. Способ маневрирования разделений без влияния на компоновку окна состоит в использовании [count] Ctrl - W x , который обменивает текущее окно с окном [count].

davidlowryduda
источник
Я знаю, что могу это сделать, но есть пара минусов. (1) Если окно является единственным видом данного буфера, а буфер грязный, вам придется :wqили :q!ни то, ни другое не желательно. (2) Это сбросит любые специфичные для окна настройки, такие как положение курсора. (3) Это прервет все текущие различия. По сути, окна являются гражданами первого класса; уничтожать их и создавать новые просто недостаточно.
wchargin
@WChargin Часть этого исчезнет, ​​если вы установите vim, чтобы разрешить скрытые буферы. Но да ...
Дероберт
2
Вместо того, чтобы закрывать окно и разбивать буфер на нужное место, разбейте новое окно, куда вы хотите его поместить, замените его на окно, которое вы хотите переместить, затем закройте (перемещенное) новое окно.
Tommcdo
4

Вы можете сохранить ваш любимый макет с помощью winsaveviewкоманды. Здесь я отображаю это \svдля удобства:

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

Обязательно запустите это, прежде чем сломать макет! ;-)

Теперь, если вы случайно сломали макет, вы можете восстановить его:

nnoremap <Leader>rv :call winrestview(g:myLayout)<CR>
joeytwiddle
источник
4

Клавиши по умолчанию для перестановки окон работают только в пределах их локальной разделенной группы:

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

Или они разбивают окно на верхнюю группу:

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

Они не подходят, если вы хотите переместить буфер в одну из других разделенных групп.

Но в таких случаях, плагин WindowSwap может помочь . Это позволяет вам менять буферы любых двух произвольных окон.

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

<leader> pw   "Paste window": Swap the current window with the yanked window
joeytwiddle
источник