如何使窗户恢复为网格状?


12

如果我将窗口划分为四个象限,则从以下命令序列开始:

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

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

我该如何做相反的工作-即迫使窗户重新成正方形?

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


1
当您按<CW> J时,我不清楚您要实现什么,该操作将“使用屏幕的整个宽度将当前窗口移至最底部”,这意味着窗口将根据定义,它不再处于网格形式。您实际上打算如何使用Windows?
丰富

3
@Rich我认为OP只是在举例说明一种情况,在此之后他可能想将窗口重置为网格形式。
贡萨洛·里贝罗

@GonçaloRibeiro正确。
wchargin


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

Answers:


4

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

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

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


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

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

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

4

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

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

在破坏布局之前,请确保运行该命令!;-)

现在,如果您不小心破坏了布局,则可以恢复它:

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

4

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

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