如果我将窗口分成四个象限,请按照以下命令序列进行操作:


:tabnew
:vsplit
:split
<C-W>l
:split

然后输入类似<C-W>J的命令将导致它们不再是正方形;在这种情况下,它将迫使一个窗口在底部浮动。

我该如何做相反的事情-也就是说,将窗口推回正方形结构?

我已经阅读过:help window-moving,但没有发现任何有用的信息。

评论

当您按 J时,我不清楚您要实现什么,该操作将“使用屏幕的整个宽度将当前窗口移到最底部”,这意味着窗口将根据定义,它不再是网格形式。您实际上想在Windows上做什么?

@Rich我认为OP只是在举例说明一种情况,此后他可能想将窗口重置为网格形成。

@GonçaloRibeiro正确。

相关:如何更改当前拆分的宽度和高度?,如何将所有窗口转换为水平,垂直或制表符拆分?

尽管不是答案,但是如果您发现自己在寻找代码示例来制定自己的解决方案,我建议您检查一下神话般的Microviche项目。

#1 楼

据我所知,没有简单的方法将开放式拆分排列为拆分网格。在这种情况下,返回网格的最简单方法是手动校正结构:


关闭顶部浮动的拆分
返回拆分占一半的拆分屏幕
:split <file>重新拆分


这将使您返回到网格。在不影响窗口布局的情况下进行拆分的方法是使用[count] Ctrl -W x,它可以将当前窗口与[count]窗口交换。

评论


我知道我可以做到,但是有一些缺点。 (1)如果窗口是给定缓冲区的唯一视图,并且缓冲区脏了,则必须使用:wq或:q!,这都不是理想的。 (2)这将重置任何特定于窗口的设置,例如光标位置。 (3)这会破坏正在进行的差异。本质上,窗户是一等公民。仅仅摧毁它们并创建新的还不够。

– wchargin
15年2月18日在1:42

@WChargin如果您将vim设置为允许隐藏缓冲区,则其中的某些内容将消失。但是,是的

–德罗伯特
15年2月18日在16:54

与其关闭窗口并将缓冲区拆分到所需位置,不如将新窗口拆分到想要的位置,将其与要移动的窗口交换,然后关闭(已移动的)新窗口。

–tommcdo
2015年2月19日在2:02

#2 楼

您可以使用winsaveview命令保存您喜欢的布局。为了方便起见,这里将其映射到\sv

nnoremap <Leader>sv :let g:myLayout = winsaveview()<CR>


在破坏布局之前,请务必先运行该代码! ;-)

现在,如果您不小心破坏了布局,可以将其还原:

nnoremap <Leader>rv :call winrestview(g:myLayout)<CR>


#3 楼

用于重新排列窗口的默认键仅在其本地拆分组中起作用:

CTRL-W x   Exchange current window with next (in group)
CTRL-W r   Rotate windows down/right (in group)


或将窗口划分为顶部组:

CTRL-W  H | J | K | L   Move window to left/top/bottom/right-most edge


当您要将缓冲区移至其他拆分组之一时,这些方法是不够的。

但是在这种情况下,WindowSwap插件可以提供帮助。它使您可以交换任意两个任意窗口的缓冲区。

<leader> yw   "Yank window": Yank the current window

<leader> pw   "Paste window": Swap the current window with the yanked window