在Vim中从垂直分割切换到水平分割

问题描述:

如何在Vim中将当前窗口从水平分割切换到垂直分割,反之亦然?在Vim中从垂直分割切换到水平分割

刚才我偶然发现了这个问题,但我找不到密钥。

+1

也许[dwm.vim(https://github.com/spolu/dwm.vim)插件将还挺有用 – 2013-01-12 12:43:49

Vim mailing list说(重新格式化为更好的可读性):

要更改垂直分割 窗口horizo​​nally分裂

按Ctrl - 瓦特吨Ctrl键 - wķ

水平地垂直地:

Ctrl键 - 瓦特吨Ctrl键 - 瓦特ħ

说明:

Ctrl键 - 瓦特吨使第一(左上)窗口当前 Ctrl键 - 瓦特ķ移动当前窗口以全宽在最高层 Ctrl键 - 瓦特H将当前窗口移动到最左端的全高位

请注意,t是小写,K和H是大写字母。

而且,只有两个窗口,好像你可以删除按Ctrl - 因为如果你只在两个窗口之一是已经,什么使得它目前的点瓦特吨一部分?

+18

所以,如果你有两个窗口水平分割,和你在下面的窗口,你只需使用^ WL。 – 2009-08-13 02:17:42

+6

....电源...今天我的vim-fu翻了一倍,谢谢。有很多有趣的^ W命令(b,w等) – 2012-12-07 14:10:22

+4

莫名其妙地不适合我.. =/ – holms 2013-02-28 09:07:24

在VIM,看看下面看到你可能会做什么不同的选择:

:帮助开放窗口

例如:

按Ctrl - w^s
Ctrl - WØ
按Ctrl - W¯¯v
按Ctrl - W¯¯Ø
按Ctrl - W¯¯小号
...

^w其次是资本HJKL将当前窗口移动到远leftbottomtopright分别像正常光标导航。

小写等价物移动焦点而不是移动窗口。

+2

这是多少因为用户使用hjkl在缓冲区之间移动。 – 2014-08-22 06:07:50

+15

接受的答案是一个很好的答案,但对我而言,这个答案更容易记住。谢谢! – 2015-11-23 22:14:21

+0

也可以使用nerdtree更好地工作。 – arcseldon 2017-11-07 16:04:17

以下ex命令将(重新)拆分任何数量的窗口:

  • 要垂直拆分(例如使窗之间的垂直分隔),类型:vertical ball
  • 要水平拆分,类型:ball

如果存在隐藏缓冲区,则发出这些命令也会使隐藏缓冲区可见。

+0

这应该是被接受的答案,因为目前接受的答案只适用于两个文件。这个答案更完整。 – DrStrangepork 2015-08-13 17:53:19

+0

':vert [ical] ball'在文档中如此:'vert ball'也可以,并且更短。 – Titou 2017-05-03 09:18:45

+0

':ball'将3个垂直窗口缩小到2个水平窗口,而':vert ball'正确地将3个水平窗口映射到3个垂直窗口。 – Titou 2017-05-03 09:21:28

当你有两个以上打开窗户水平或垂直方向,并希望所有切换他们到其他方向,你可以使用以下命令:

(切换到水平)

:windo wincmd K 

(切换到垂直)

:windo wincmd H 

这是有效实现了ely每个窗口单独使用和使用^WK^WH

继马克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 

编辑:使用按Ctrl - 瓦特[R交换两个窗口,如果他们不是在良好的秩序。

受Steve答复的启发,我写了一个简单的函数,在当前选项卡中的所有窗口的垂直和水平分割之间切换。你可以像下面最后一行那样将它绑定到映射。

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>