Как пропорционально изменить размер разделенных окон в Vim?

Итак, во-первых, это не ответ, который я ищу:

autocmd VimResized * :wincmd =

позвольте мне объяснить: предположим, у меня есть 2 вертикально разделенных окна, одно размером 30% и одно размером 70%. Когда я изменяю размер окна, я хочу, чтобы этот процент оставался прежним. Без этой команды раскол справа медленно разрушается, так что вы в конечном итоге ничего не видите в окне. С помощью приведенной выше команды, как только вы начнете изменять размер окна, размеры окна немедленно изменятся на 50%/50%.

Я работаю с большим количеством расколов (вертикальных и горизонтальных), и я не хочу, чтобы команда выше просто делала все равным, но в то же время я хочу, чтобы они изменялись пропорционально окну... Я хочу, чтобы процентная высота / ширина всех расколов в окне оставалась неизменной при изменении размера окна. Идеи?

3 ответов


Я попытался реализовать это в моем плагин ProportionalResize, следуя в основном подходу, изложенному в ответе роменля. Вы можете обернуть свои команды изменения размера в :ProportionalResize wrapper; плагин также подключается к различным событиям, чтобы обеспечить автоматическую адаптацию при изменении размера окна Vim, например, с помощью мыши.


если вы спрашиваете" 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, вы можете увидеть ведущий минус "-" означает Priority classification:

-   unclassified

если вы хотите это сделать, вы можете написать функцию самостоятельно, на VimResized событие, размера всех окон на основе ваших логика.


вы можете создать функцию, которая регистрирует размеры окон и связывает их с кучей событий, таких как WinEnter/WinLeave и еще один привязанный к VimResized который использует эти значения для изменения размера окон.

Это не похоже на тривиальную задачу.

или даже как хорошая идея.