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

我刚才不小心打开了,但现在找不到钥匙了。


当前回答

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

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>

其他回答

Vim邮件列表显示(为了更好的可读性重新格式化):

要改变两个垂直分开 将窗口水平拆分 Ctrl-w t Ctrl-w K 水平到垂直: Ctrl-w t Ctrl-w H 解释: ctrl - wt使第一个(topleft)窗口成为当前窗口 Ctrl-w K将当前窗口移动到顶部的全宽位置 Ctrl-w H将当前窗口移动到最左侧的全高位置

注意t是小写的,K和H是大写的。

此外,在只有两个窗口的情况下,似乎可以删除ctrl - wt部分,因为如果您已经在只有两个窗口中的一个中,那么使它成为当前的意义何在?

Ctrl-w后跟H, J, K或L(大写)将把当前窗口分别移动到最左,最下,最上或最右,就像正常的光标导航一样。

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

水平到垂直分割 Ctrl+W为窗口命令, 然后是Shift+H或Shift+L


垂直到水平分割 Ctrl+W为窗口命令, 然后是Shift+K或Shift+J

当只有两个窗口时,这两种解决方案都适用。

在发出窗口命令Ctrl+W之后,基本上就是将窗口按Shift+方向字母指示的方向移动。


默认情况下,在垂直分割中打开帮助

将这两行添加到.vimrc:

cabbrev help vert help
cabbrev h vert h

Cabbrev是命令的缩写。

:vert[ical] {cmd}总是在垂直分割窗口中执行cmd。

按照上面Mark Rushakoff的建议,下面是我的地图:

" 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 - wr切换两个窗口,如果他们不是在良好的顺序。

当您有两个或多个窗口水平或垂直打开,并希望将它们全部切换到其他方向时,您可以使用以下方法:

(切换到水平)

:windo wincmd K

(切换到垂直方向)

:windo wincmd H

它有效地分别到每个窗口使用^WK或^WH。