向左/向右移动窗口?

在Vim中,是否可以将窗口向左或向右“移动”?例如,类似于<c-w> r<c-w> x,但左/右而不是上/下?

例如,如果我有这样的布局:

+---+---+---+
|   |   +---+
| A +---+---+
|   |   |   |
+---+---+---+

我想把它变成这样:

+---+---+---+
|   |   +---+
+---+ A +---+
|   |   |   |
+---+---+---+

这对于<c-w> {H,J,K,L}来说很难/讨厌。

112194 次浏览

您是想移动窗口本身,还是只是移动光标的位置?

除了你已经提到的旋转或循环之外,只能将窗口本身移动到的顶部、底部、左侧或右侧,分别使用:

^W K
^W J
^W H
^W L

我不认为有一个默认的内置方式来将窗口向右移动一个位置。

< kbd > Ctrl w提供了“windows命令模式”,允许以下修饰符:

  • Ctrl w + R -将窗口向上/向左旋转。

  • Ctrl w + r -向下/向右旋转窗口。

你也可以使用带有导航键的“windows命令模式”来改变窗口的位置:

  • Ctrl w + L -将当前窗口移动到“最右”

  • Ctrl w + H -将当前窗口移动到“最左侧”

  • Ctrl w + J -将当前窗口移动到“非常底部”

  • Ctrl w + K -将当前窗口移动到“非常顶部”

查看:help window-moving获取更多信息

下面这个对我来说是最有用的(可能是这个问题的正确答案):

  • < kbd > Ctrl W + x OR < kbd > Ctrl W + < kbd > Ctrl x -将当前聚焦的窗口从最近的窗口向右旋转。
  • ctrl + h移动光标到下一个窗口(右)

  • ctrl + l移动光标到上一个窗口(左)

有关更多信息,请参考::help window-moving

似乎vim不能用标准键映射做到这一点。文档中说^W K, J, H和L命令的工作原理是创建分割并在now位置打开缓冲区,所以我写了一个相同的函数:隐藏缓冲区,向左移动,分割,然后打开原始缓冲区:

" Rotate a window horizontally to the left
function! RotateLeft()
let l:curbuf = bufnr('%')
hide
wincmd h
split
exe 'buf' l:curbuf
endfunc


" Rotate a window horizontally to the right
function! RotateRight()
let l:curbuf = bufnr('%')
hide
wincmd l
split
exe 'buf' l:curbuf
endfunc