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

时间:2009-08-13 01:38:57

标签: vim split

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

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

8 个答案:

答案 0 :(得分:831)

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

  

要更改两个垂直拆分   窗户到地平线分裂

     

Ctrl - w t Ctrl - w K < / KBD>

     

水平到垂直:

     

Ctrl - w t Ctrl - w H < / KBD>

     

说明:

     

Ctrl - w t 使第一个(topleft)窗口成为当前窗口    Ctrl - w K 将当前窗口移动到最高位置    Ctrl - w H 将当前窗口移动到最左边的全高

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

另外,只有两个窗口,似乎你可以放弃 Ctrl - w t 部分,因为如果你已经在只有两个窗口中的一个,有什么意义才能使它成为现实?

答案 1 :(得分:285)

Ctrl - w 后跟 H J K 或< kbd> L (大写)会将当前窗口分别移动到远leftbottomtopright,就像正常的光标导航一样。

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

答案 2 :(得分:40)

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

(切换到水平)

:windo wincmd K

(切换到垂直)

:windo wincmd H

它有效地单独使用 ^ W K ^ W H

答案 3 :(得分:29)

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

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

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

答案 4 :(得分:27)

在VIM中,请查看以下内容,了解您可能采用的不同替代方案:

:help open-window

例如:

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

答案 5 :(得分:5)

按照Mark 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 - w r 交换两个窗口,如果它们的顺序不正确

答案 6 :(得分:4)

  

水平到垂直拆分

     

Ctrl + W 用于窗口命令,后跟 Shift + H Shift + L


  

垂直到水平分割

     

Ctrl + W 用于窗口命令,后跟 Shift + K Shift + J

只有两个窗口存在时,两种解决方案均适用。

答案 7 :(得分:2)

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

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>