【问题标题】:How to resize split windows in Vim proportionally?如何按比例调整 Vim 中拆分窗口的大小?
【发布时间】:2013-02-01 15:33:58
【问题描述】:

好的,首先,这不是我正在寻找的答案:

autocmd VimResized * :wincmd =

让我解释一下:假设我有 2 个垂直分割的窗口,一个大小为 30%,一个大小为 70%。当我调整窗口大小时,我希望该百分比保持不变。如果没有这个命令,右边的分割会慢慢塌陷,最终你在窗口中什么也看不到。使用上面的命令,一旦你开始调整窗口大小,窗口大小立即变为 50%/50%。

我使用很多分割(垂直和水平),我不希望上面的命令只是让一切都相等,但同时我确实希望它们调整大小,只是按比例调整到窗口...我希望窗口中所有拆分的百分比高度/宽度在调整窗口大小时保持不变。想法?

【问题讨论】:

    标签: vim macvim


    【解决方案1】:

    我尝试在我的ProportionalResize plugin 中实现这一点,基本上遵循 romainl 的回答中概述的方法。您可以将调整大小命令包装在 :ProportionalResize 包装器中;该插件还挂钩各种事件,以允许在调整 Vim 窗口大小时自动适应,例如用鼠标。

    【讨论】:

    • 你应该在插件文档的某处提到它依赖于inkarkat/vim-ingo-library (for ingo#msg#errormsg)
    • @Von: 确实如此 - 就在插件页面和帮助文件中:- 需要 ingo-library.vim 插件 (vimscript #4433),版本 1.000 或更高版本。
    • 啊,我的错。对不起。
    【解决方案2】:

    如果你问的是“vim - 官方”的方式来做到这一点,答案是 NO。 (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中,可以看到前导减号"-"表示Priority classification:

    -   unclassified
    

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

    【讨论】:

    • 不,我不是要求官方的方式来做到这一点。只是一种方法。而且我自己写函数还不够好。
    【解决方案3】:

    您可以创建一个记录窗口大小的函数,并将它们绑定到一组事件,例如WinEnter/WinLeave,另一个绑定到VimResized,使用这些值调整窗口大小。

    这听起来不像是一项微不足道的任务。

    或者甚至是一个好主意。

    【讨论】:

    • upvote - 尽管就我个人而言,这听起来不是一个坏主意。如果要这样做,则需要存储窗口宽度/高度,例如 line('w$') - line('w0')winwidth(...)
    • 嗯......存储什么是相当明显的。如何存储它以及何时对我来说不是那么明显。整个事情听起来有点脆弱IMO。编写一个添加 VimResizedPre 事件的补丁可能会更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2020-07-24
    • 2010-10-03
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多