如何在Vim中按比例调整分割窗口大小?

7

首先声明,以下不是我要寻找的答案:

autocmd VimResized * :wincmd =

让我解释一下:假设我有两个垂直分割的窗口,一个大小为30%,另一个大小为70%。当我调整窗口大小时,我希望这个百分比保持不变。如果没有这个命令,右边的分割会慢慢坍塌,最终你在窗口里什么都看不到了。使用上面的命令后,一旦开始调整窗口大小,窗口大小立即更改为50%/50%。
我使用很多分割(垂直和水平),我不希望上面的命令只是使所有内容相等,但同时我确实希望它们可以按比例调整大小以适应窗口...当窗口调整大小时,我希望所有分割的百分比高度/宽度保持不变。有什么好的想法吗?
3个回答

3

如果您正在寻求“vim - 官方”方法来完成此操作,答案是不可以。(Vim 7.3)

为了证明这一点:

打开vim,输入:h todo<Enter>,然后输入/proportionally[Enter],您会看到:

-   When resizing the whole Vim window, the windows inside should be resized
    proportionally (Webb).

所以这个功能已经在vim的待办事项列表中了。在这个窗口中输入gg,你会看到前面带有减号"-",它代表优先级分类:

-   unclassified

如果你想要这样做,你可以自己编写一个函数,在 VimResized 事件中,根据你的逻辑调整所有窗口的大小。


不,我不是在问官方的方法。只是想知道一种方法。而且我自己写函数的能力不够好。 - Rey

3

我尝试在我的ProportionalResize插件中实现了这个,基本上遵循了romainl答案中概述的方法。您可以将调整大小命令包装在:ProportionalResize包装器中;该插件还钩入各种事件,以便在使用鼠标调整Vim窗口大小时进行自动适应。


你应该在插件文档中的某个地方提到它依赖于inkarkat/vim-ingo-library(用于ingo#msg#errormsg)。 - Von
1
@Von:它确实需要 - 就在插件页面上,以及帮助文件中:_- 需要ingo-library.vim插件(vimscript#4433),版本1.000或更高版本。_ - Ingo Karkat
啊,我的错。抱歉。 - Von

2
您可以创建一个函数,记录窗口大小并将其绑定到一些事件,如WinEnter/WinLeave,另一个绑定到VimResized的事件使用这些值来调整窗口大小。这听起来并不是一个简单的任务,甚至不像一个好主意。

点赞 - 虽然就我个人而言,这听起来并不像是一个坏主意。如果要这样做,则需要像 line('w$')-line('w0')winwidth(...) 一样存储窗口的宽度/高度。 - dsummersl
嗯...要存储什么是相当明显的。如何存储和何时存储对我来说并不那么明显。整个事情在我看来有点脆弱。编写一个添加VimResizedPre事件的补丁可能会更快。 - romainl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接