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

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

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

166899 次浏览

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

更改两个垂直分割 窗口水平分割

# eyz0 -# eyz1 # eyz2 # eyz0 -# eyz1 # eyz5

水平到垂直:

# eyz0 -# eyz1 # eyz2 # eyz0 -# eyz1 # eyz5

解释:

Ctrl-w t使第一个(topleft)窗口当前

Ctrl-w K将当前窗口移动到顶部的全宽位置

Ctrl-w H将当前窗口移动到最左侧的全高位置

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

此外,由于只有两个窗口,您似乎可以删除Ctrl-w t部分,因为如果您已经处于只有两个窗口之一,那么使它成为当前的意义何在?

在VIM中,看一下下面的内容,看看你可能已经做了什么:

:帮助形成通信

例如:

< p > # EYZ0 - # EYZ1 # EYZ2 < br > # EYZ0 - # EYZ1 # EYZ2 < br > # EYZ0 - # EYZ1 # EYZ2 < br > # EYZ0 - # EYZ1 # EYZ2 < br > # EYZ0 - # EYZ1 # EYZ2 < br > …< / p >

Ctrl-w接着是HJKl(大写)将把当前窗口分别移动到远leftbottomtopright,就像正常的光标导航一样。

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

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

  • 要垂直分割(例如在窗口之间设置垂直分隔线),输入:vertical ball
  • 要水平分割,输入:ball

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

当你有两个水平或垂直打开的或更多的窗口,并想要将它们所有切换到其他方向时,你可以使用以下方法:

(切换到水平)

:windo wincmd K

(切换到垂直方向)

:windo wincmd H

它有效地分别进入每个窗口,并使用W ^KW ^H

遵循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-w r来交换。

受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>

水平到垂直分割

Ctrl+W为窗口命令,

然后是转变+H转变+l


垂直到水平分割

Ctrl+W为窗口命令,

然后是转变+K转变+J

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

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


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

将这两行添加到.vimrc:

cabbrev help vert help
cabbrev h vert h

cabbrev是命令的缩写。

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