Як я можу повернути свої вікна до формування сітки?


12

Якщо у мене вікна, розташовані в чотири квадранти, з наступної послідовності команд:

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

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

Як я можу зробити навпаки - тобто змусити вікна повернутися в квадратне утворення?

Я читав, :help window-movingале нічого корисного не бачив.


1
Мені трохи незрозуміло, що ви намагаєтеся досягти, натискаючи кнопку <CW> J, яка переміщує "поточне вікно в самому низу, використовуючи повну ширину екрана", Це означає, що вікна будуть за визначенням більше не знаходитись у формуванні сітки. Що ви насправді намагаєтеся робити зі своїми вікнами?
Багатий

3
@Rich Я думаю, що ОП просто ілюструє ситуацію, після якої він може захотіти скинути вікна на формування сітки.
Гонсало Рібейро

@ GonçaloRibeiro Правильно.
wchargin


Хоча це не відповідь, якщо ви виявляєте, що шукаєте приклади коду, щоб зробити власне рішення, рекомендую перевірити казковий проект Microviche .
Нова Олександрія

Відповіді:


4

Наскільки я знаю, немає простого способу влаштувати відкриті розколи в сітку розколи. У цьому випадку найпростіший спосіб повернутися в сітку - це вручну виправити структуру:

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

Це поверне вас до сітки. Способом маневрування розщепленнями, не впливаючи на макет вікна, є використання [count] Ctrl - W x , який обмінює поточне вікно з вікном [count].


Я знаю, що можу це зробити, але є кілька мінусів. (1) Якщо вікно - єдиний вигляд даного буфера, а буфер забруднений, вам доведеться робити :wqабо :q!, жодне з яких не бажано. (2) Це скине будь-які настройки для вікна, наприклад положення курсору. (3) Це призведе до порушення будь-якого розробленого потоку. По суті, вікна - це першокласні громадяни; їх знищення та створення нових просто недостатньо.
wchargin

@WChargin Дещо з цього проходить, якщо встановити vim для дозволу прихованих буферів. Але так ...
derobert

2
Замість того, щоб закрити вікно і розділити буфер на потрібне місце, розділіть нове вікно, куди ви хочете, щоб воно перейшло, обміняйте його з вікном, яке ви хочете перемістити, а потім закрийте (переміщене) нове вікно.
tommcdo

4

Ви можете зберегти улюблений макет за допомогою winsaveviewкоманди. Ось я це відображу \svдля зручності:

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

Не забудьте запустити це, перш ніж зламати макет! ;-)

Тепер, якщо ви коли-небудь випадково зламали ваш макет, ви можете відновити його:

nnoremap <Leader>rv :call winrestview(g:myLayout)<CR>

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.