我正在为 gvim 编写一个小插件,它会根据垂直分割的数量自动增加或减少 gui 的宽度。该插件的工作原理是这样的
if has("gui_running")
augroup resize
autocmd WinEnter * call <SID>ResizeSplits()
autocmd WinLeave * call <SID>ResizeSplits()
autocmd BufLeave * call <SID>ResizeSplits()
augroup END
endif
这ResizeSplits()
是调整 gui 窗口大小的函数:
function! s:ResizeSplits()
let l:count = 0
windo if winwidth(winnr()) < &columns |
\ let l:count += 1 |
\ endif
if l:count > 0
let l:totwidth = l:count - 1 + l:count*80
else
let l:totwidth = 80
endif
if &columns != l:totwidth
execute 'set co=' . l:totwidth
endif
endfunction
该插件几乎可以按我的意愿工作,但并不完全。似乎BufLeave
事件(和类似事件)有时会在窗口关闭之前执行。这是一个问题,例如当我做<c-w>o
或:only
. 问题是该ResizeSplits
功能不起作用,因为它仍然计算旧的窗口数量。
是否有另一个自动命令可用于检测窗口数量何时更改,或者BufLeave
在窗口被销毁/删除后保证执行的类似事件?
让我的插件与映射一起工作是微不足道的,但我无法让它可靠地与 ex 命令(如:only
and )一起工作:close
。