Vim:向左/向右移动窗口?


215

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

例如,如果我有以下布局:

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

我想把它变成这样:

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

与难/讨厌<c-w> {H,J,K,L}

Answers:


424

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更多信息


2
<c-w> r仅垂直旋转。
David Wolever 2010年

10
@David Wolever,在这种情况下,您需要使用大写字母,例如:Ctrl-W + Shift-L。我认为这可能是您想要的。
里卡多·瓦莱里亚诺

@David-刚刚进行了测试,并且<cw> r对我来说是水平的。
ostler.c 2013年

3
@ ostler.c创建垂直拆分,然后在其中一列中创建水平拆分。现在使用<cw> r,它仅在一个垂直分割内循环两个窗口。
Chev

1
@ nn0p不,它们会移动窗口。<cw> h将光标移到左侧的下一个窗口,而<cw> H将当前窗口移至最左侧(与光标一起)。
MarSoft

58

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

  • Ctrl W+ xCtrl W+ Ctrl x-旋转当前焦点对准的窗口,最右边的窗口。

当您位于窗格的中间并希望与右侧的窗格互换时,此功能非常有用。谢谢这个!
Daniel AndreiMincă18年

8

您要移动窗口本身还是仅移动光标位置?

除了您已经提到的旋转或循环,只能分别通过以下方式将窗口自身移动到最远的顶部,底部,左侧或右侧:

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

我认为没有默认的内置方法可以将窗口向右移动一个位置。


1
我要移动窗口,而不是光标。
大卫·沃尔沃

1
然后,请尽可能使用vim window命令,如果对您有用,请将其标记为解决方案:-)
Bitterzoet 2011年

2
如果可以的话,我会拒绝@Bitterzoet的评论。查看以上答案
内森(Nathan)

1

似乎vim不能使用标准键映射来做到这一点。该文档说,^ WK,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

-6
  • ctrl + h 将光标移到下一个窗口(右)

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

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


3
不正确。Ctrl+h/l不是用于窗口导航的标准绑定(尽管它们当然可以配置,并且由某些插件提供)。无论如何,这并不能回答最初的问题。
MarSoft
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.