Как перевернуть окна в vim?

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

Если у меня есть 2 горизонтально разделенных окна, как их повернуть, чтобы получить 2 окна с вертикальным разделением?

А как переключать буферы?

Ответ 1

Если вы разделите их по вертикали C-w J, чтобы переместить один снизу

Если вы разделите их по горизонтали C-w L, чтобы переместить один вправо

Чтобы повернуть в "столбце" или "строке" разделенных окон, C-w C-r

Для изменения макета окна можно использовать следующие команды. Например, когда есть два вертикально разделенных окна, CTRL-W K изменит это значение в горизонтально разделенные окна. CTRL-W H делает это наоборот.

Ответ 2

Ctrl-w H или введите :wincmd H, чтобы перейти от макета по горизонтали к вертикали.

Ctrl-w J или введите :wincmd J, чтобы перейти от макета по вертикали к горизонтали.

Ctrl-w r или введите :wincmd r в , заменив два буфера, но сохраните макет окна тем же самым.

Ctrl-w w или введите :wincmd w в переместите курсор между двумя окнами/буферами.

Возможно, вы захотите связать одну или несколько из этих последовательностей, чтобы сделать ее более быстрой для ввода. Я поместил это в свой .vimrc, чтобы , l переместил курсор в следующий буфер на текущей вкладке:

let mapleader = ","
nmap <Leader>l <C-w>w

Ответ 3

CTRL - W SHIFT - H будет вращать ориентацию, CTRL - W H перемещается в левое окно, CTRL - W L переходит в право. См

:help split

и

:help ^w

для получения дополнительной информации.

Ответ 4

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

У меня есть это в моем .vimrc, чтобы я мог "выдернуть" и "удалить" буфер, а затем вставить его в окно поверх текущего буфера или как [v].

fu! PasteWindow(direction) "{{{
    if exists("g:yanked_buffer")
        if a:direction == 'edit'
            let temp_buffer = bufnr('%')
        endif

        exec a:direction . " +buffer" . g:yanked_buffer

        if a:direction == 'edit'
            let g:yanked_buffer = temp_buffer
        endif
    endif
endf "}}}

"yank/paste buffers
:nmap <silent> <leader>wy  :let g:yanked_buffer=bufnr('%')<cr>
:nmap <silent> <leader>wd  :let g:yanked_buffer=bufnr('%')<cr>:q<cr>
:nmap <silent> <leader>wp :call PasteWindow('edit')<cr>
:nmap <silent> <leader>ws :call PasteWindow('split')<cr>
:nmap <silent> <leader>wv :call PasteWindow('vsplit')<cr>
:nmap <silent> <leader>wt :call PasteWindow('tabnew')<cr>