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

To switch from vertical split to horizontal split fast in Vim

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

我偶然做到了,但我再也找不到钥匙了。


Vim邮件列表说(重新格式化以获得更好的可读性):

To change two vertically split
windows to horizonally split

Ctrl-w t Ctrl-w K

Horizontally to vertically:

Ctrl-w t Ctrl-w H

Explanations:

Ctrl-w t makes the first (topleft) window current

Ctrl-w K moves the current window to full-width at the very top

Ctrl-w H moves the current window to full-height at far left

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

此外,只有两个窗口,似乎你可以删除Ctrl-w t部分,因为如果你已经只在两个窗口中的一个窗口,那么它是什么意思呢?


Ctrl-w后跟HJKL(capital)将分别将当前窗口移动到远leftbottomtopright,就像正常的光标导航一样。

小写等效项移动焦点而不是移动窗口。


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

(切换到水平)

1
:windo wincmd K

(切换到垂直)

1
:windo wincmd H

它有效地使用 ^ WK ^ WH单独进入每个窗口。


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

  • 要垂直分割(例如在窗口之间制作垂直分隔线),请键入:vertical ball
  • 要水平拆分,请键入:ball

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


在VIM中,请查看以下内容,了解您可能已做的不同选择:

:帮助打开窗口

例如:

Ctrl-W s
Ctrl-W o
Ctrl-W v
Ctrl-W o
Ctrl-W s
...


Horizontal to vertical split

Ctrl+W for window command, followed by Shift+H or Shift+L

Vertical to horizontal split

Ctrl+W for window command, followed by Shift+K or Shift+J

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


受史蒂夫回答的启发,我编写了一个简单的函数,可以在当前选项卡中的所有窗口的垂直和水平拆分之间切换。您可以将其绑定到映射,如下面的最后一行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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>


按照Mark Rushakoff的提示,这是我的映射:

1
2
3
4
5
6
" 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-w r来交换两个窗口,如果它们不是正常的顺序。