Идея состоит в том, чтобы сделать нечто похожее на то, что делает Golden Ratio (плагин vim). Но вместо определения размера «золотого сечения» я хочу установить указанный c размер невыбранным windows.
Пример:
# Window 1 selected
----------------------
| | | | |
| | | | |
| 1 | 2 | 3 | 4 |
| | | | |
| | | | |
----------------------
# Window 3 selected
----------------------
| | | | |
| | | | |
| 1 | 2 | 3 | 4 |
| | | | |
| | | | |
----------------------
Вот что я написано до сих пор (это просто WIP):
function g:ResizeWindow()
let tabs = gettabinfo()
let current_tabnr = tabpagenr()
let current_window = win_getid()
let tab = filter(tabs, 'v:val.tabnr == current_tabnr')[0]
for window in tab.windows
if window != current_window
call win_gotoid(window)
exe 'vertical resize' 20
endif
endfor
call win_gotoid(current_window)
let current_window_size = &columns - ((len(tab.windows) - 1) * 20)
exe 'vertical resize' current_window_size
endfunction
autocmd WinNew,WinEnter * :call g:ResizeWindow()
Чтобы проверить, вы можете открыть один буфер и просто :vsp
несколько раз. Затем, когда вы перемещаетесь по windows, кажется, что он работает в большинстве случаев, но иногда один из windows падает непоследовательным образом. Это намного меньше, чем остальные. Обычно это происходит, когда я перемещаюсь слева направо ... и сзади справа налево.
Есть идеи, что с этим не так и как это исправить?