如何在vim中翻转窗户?

时间:2011-05-20 11:30:09

标签: vim

  

可能重复:
  To switch from vertical split to horizontal split fast in Vim

如果我有2个水平分割窗口,如何旋转它们以获得2个垂直分割窗口?

如何切换缓冲区?

4 个答案:

答案 0 :(得分:222)

如果你将它们垂直分割 C-w J 将一个移到底部

如果你将它们水平分割 C-w L 将一个移到右边

要在拆分窗口的“列”或“行”中旋转, C-w C-r

  

以下命令可用于更改窗口布局。例如,   当有两个垂直分割的窗口时,CTRL-W K将改变它   水平分割窗户。 CTRL-W H反过来。

答案 1 :(得分:81)

Ctrl-w H 或键入:wincmd H以从水平到垂直布局。

Ctrl-w J 或键入:wincmd J以从垂直到水平布局。

Ctrl-w r 或键入:wincmd r交换两个缓冲区,但保持窗口布局相同。

Ctrl-w w 或在{strong>移动光标两个窗口/缓冲区之间输入:wincmd w

您可能希望绑定这些序列中的一个或多个以使其更快地键入。我把它放在我的.vimrc中,以便 l 将光标移动到当前标签中的下一个缓冲区:

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

答案 2 :(得分:11)

CTRL - W SHIFT - H 将旋转方向, CTRL - W H 移动到左侧窗口, CTRL - W L 移动到正确的。参见

:help split

:help ^w

了解更多信息。

答案 3 :(得分:6)

如果您只打开两个窗口,那么当前的答案很有效。如果你有更多,那么移动窗户的逻辑就会变得毛茸茸。

我在我的.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>