2009-08-13 3 views
498

Как вы можете переключать текущие окна с горизонтального разделения на вертикальное и наоборот в Vim?Чтобы переключиться с вертикального сплита на горизонтальное сглаживание быстро в Vim

Я сделал это минуту назад случайно, но я не могу найти ключ снова.

+1

возможно [dwm.vim] (https://github.com/spolu/dwm.vim) плагин будет своего рода полезным –

ответ

746

Vim mailing list говорит (повторно отформатирован для лучшей читаемости):

Чтобы изменить два вертикально расколоть окна, чтобы horizonally разделить

Ctrl - жтCtrl - wК

Горизонтально вертикально:

Ctrl - штCtrl - шH

Пояснения:

Ctrl - шт делает первое окно (TopLeft) текущий Ctrl - шK перемещает текущее окно на полную ширину на самом верху Ctrl - шH перемещает текущее окно на полную высоту в крайнем левом углу

Обратите внимание, что t строчный регистр , а K и H - в верхнем регистре.

Кроме того, только два окна, кажется, что вы можете уронить Ctrl - жт часть, потому что, если вы уже в одном из только два окна, в чем смысл сделать его текущим?

+18

Так что если у вас есть два окна разделена по горизонтали, и вы находитесь в нижней части окна, вы просто используете^WL. –

+6

.... Власть ... Мой vim-фу удвоился сегодня, спасибо. Есть тонна интересных команд^w (b, w и т. Д.) –

+4

как-то не работает для меня .. =/ – holms

26

В VIM, посмотрите на следующий, чтобы увидеть различные варианты для того, что вы могли бы сделать:

: помощь Открытие окна

Например:

Ctrl - Wсек
Ctrl - Wо
Ctrl - Wпротив
Ctrl - Wо
Ctrl - Ws
...

237

^w следует капиталом H, J, K или L будет переместить текущее окно в дальнем left, bottom, top или right соответственно как обычный курсор навигация.

Эквиваленты в нижнем регистре перемещают фокус, а не перемещают окно.

+2

это много лучше, поскольку пользователи используют hjkl для перемещения между буферами. –

+15

Принятый ответ хороший, но для меня этот ответ легче запомнить. Благодаря! –

+0

Работает лучше с nerdtree. – arcseldon

27

Следующие бывшие команды будут (перо) разделить любое количество окон:

  • Для того, чтобы разделить вертикально (например, сделать вертикальные разделители между окнами), типа :vertical ball
  • Для того, чтобы разделить по горизонтали, тип :ball

Если есть скрытые буферы, выдача этих команд также сделает видимыми скрытые буферы.

+0

Это должен быть принятый ответ, так как текущий принятый ответ будет работать только для двух файлов. Этот ответ более полный. – DrStrangepork

+0

': vert [ical] ball' в документе так': vert ball' тоже нормально и короче. – Titou

+0

': ball' уменьшает 3 вертикальных окна до 2 горизонтальных окон, а': vert ball' правильно отображает 3 горизонтальных окна до 3 вертикальных. – Titou

32

Когда у вас есть два или более открытых окон по горизонтали или по вертикали и хотите переключить их все в другую ориентацию, вы можете использовать следующее:

(переключатель в горизонтальный)

:windo wincmd K 

(переход к вертикали)

:windo wincmd H 

Это effectiv Ely собирается каждое окно индивидуально и с помощью ^WK или ^WH.

4

После кончика Марки Rushakoff в above, вот мое отображение:

" vertical to horizontal (| -> --) 
noremap <c-w>- <c-w>t<c-w>K 
" horizontal to vertical (-- -> |) 
noremap <c-w>\| <c-w>t<c-w>H 
noremap <c-w>\ <c-w>t<c-w>H 
noremap <c-w>/ <c-w>t<c-w>H 

Edit: использования Ctrl - жг поменять два окна, если они не находятся в хорошем состоянии.

2

Вдохновленный Стив отвечает, я написал простую функцию, которая переключает между вертикальным и горизонтальным разбиениями для всех окон текущей вкладки. Вы можете привязать его к сопоставлению, как в последней строке ниже.

function! ToggleWindowHorizontalVerticalSplit() 
    if !exists('t:splitType') 
    let t:splitType = 'vertical' 
    endif 

    if t:splitType == 'vertical' " is vertical switch to horizontal 
    windo wincmd K 
    let t:splitType = 'horizontal' 

    else " is horizontal switch to vertical 
    windo wincmd H 
    let t:splitType = 'vertical' 
    endif 
endfunction 

nnoremap <silent> <leader>wt :call ToggleWindowHorizontalVerticalSplit()<cr>