Это похоже на работу.Независимо от того, было ли выполнено горизонтальное разделение, при каждом создании или удалении vsplit размер окна изменяется.
let g:auto_resize_width = 40
function! s:AutoResize()
let win_width = winwidth(winnr())
if win_width < g:auto_resize_width
let &columns += g:auto_resize_width + 1
elseif win_width > g:auto_resize_width
let &columns -= g:auto_resize_width + 1
endif
wincmd =
endfunction
augroup AutoResize
autocmd!
autocmd WinEnter * call <sid>AutoResize()
augroup END
Настройте ширину окна, изменив переменную вверху.Возможно, вы захотите сделать что-то вроде let g:auto_resize_width = &columns
, чтобы установить ширину исходного окна в качестве ширины для изменения размера.
Все становится немного шатко, если у вас так много всплитов, что окно становится максимальнымпо горизонтали.Я пытаюсь найти исправление и выложу его, если найду.