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

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

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

我想把它变成这样:

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

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


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

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

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

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


Ctrl w给你“windows命令模式”,允许以下修饰符:

Ctrl w + R -将窗口向上/向左旋转。 Ctrl w + r -向下/向右旋转窗口。

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

Ctrl w + L -移动当前窗口到“最右” Ctrl w + H -移动当前窗口到“最左边” Ctrl w + J -移动当前窗口到“非常底部” Ctrl w + K -移动当前窗口到“非常顶部”

查看:帮助窗口移动以获取更多信息


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

Ctrl W + x OR Ctrl W + Ctrl x -将当前聚焦的窗口向右旋转。


CTRL + h移动光标到下一个窗口(右) CTRL + l移动光标到上一个窗口(左)

有关更多信息,请参考::help窗口移动


似乎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