Vim: Переместить окно влево / вправо?

В Vim можно ли "переместить" окно влево или вправо? Например, похоже на <c-w> r или же <c-w> x, но влево / вправо вместо вверх / вниз?

Например, если у меня есть этот макет:

+---+---+---+
|   |   +---+
| A +---+---+
|   |   |   |
+---+---+---+

Я хотел бы превратить это в это:

+---+---+---+
|   |   +---+
+---+ A +---+
|   |   |   |
+---+---+---+

Что трудно / раздражает делать с <c-w> {H,J,K,L},

5 ответов

Решение

Ctrl W предоставляет вам "режим команд Windows", позволяющий использовать следующие модификаторы:

  • Ctrl W + R - вращать окна вверх / влево.

  • Ctrl W + r - вращать окна вниз / вправо.

Вы также можете использовать "режим команд Windows" с клавишами навигации для изменения положения окна:

  • Ctrl W + L - переместить текущее окно в крайнее правое положение

  • Ctrl W + H - переместить текущее окно в "крайнее левое положение"

  • Ctrl W + J - переместить текущее окно в "самое нижнее"

  • Ctrl W + K - переместить текущее окно в "самый верх"

Проверять, выписываться :help window-moving для дополнительной информации

Это самый полезный для меня (и, вероятно, правильный ответ на вопрос):

  • Ctrl W + x ИЛИ Ctrl W + Ctrl x - Поворот текущего сфокусированного окна с ближайшим окном вправо.

Вы хотите переместить само окно или только вашу позицию курсора?

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

^W K
^W J
^W H
^W L

Я не думаю, что есть встроенный способ перемещения окна на одно место вправо.

Похоже, что vim не может сделать это с помощью стандартных карт ключей. Документация гласит, что команды ^W K, J, H и L работают, создавая разбиение и открывая буфер в текущей позиции, поэтому я написал функцию для того же: скрыть буфер, переместиться влево, разделить, а затем откройте исходный буфер:

" Rotate a window horizontally to the left
function! RotateLeft()
    let l:curbuf = bufnr('%')
    hide
    wincmd h
    split
    exe 'buf' l:curbuf
endfunc

" Rotate a window horizontally to the right
function! RotateRight()
    let l:curbuf = bufnr('%')
    hide
    wincmd l
    split
    exe 'buf' l:curbuf
endfunc
  • ctrl + h переместить курсор в следующее окно (справа)

  • ctrl + l переместить курсор в предыдущее окно (слева)

Для получения дополнительной информации, пожалуйста, обратитесь: :help window-moving

Другие вопросы по тегам