我正在使用最新的MacVim。有没有办法让它如此,如果我打开MacVim没有文件或只有一个文件,它将窗口宽度设置为n个字符?那么如果我进行垂直分割,它会将窗口宽度扩展为2n个字符?对于3个垂直分割也是如此,但在窗口为3n个字符后,它将停止增加宽度。然后,如果我关闭那些分裂,它会调整大小?
答案 0 :(得分:4)
这似乎有效。无论是否已完成水平分割,只要创建或删除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
之类的操作,将其设置为使用原始窗口的宽度作为要调整大小的宽度。
如果你有很多vsplits,窗口会在水平方向上最大化,那么事情会有点不稳定。我正在尝试找到一个修复程序,如果我找到它,我会发布它。
答案 1 :(得分:0)
我意识到我的第一个帖子修改了窗口高度,而不是宽度。这就是我的意思:
这是我想出的一个快速解决方案,但它并不完美。该函数计算打开窗口的数量,然后将窗口宽度设置为original_width * num_windows
。当Vim启动时,以及每当打开一个新窗口时,自动命令都会调用该函数。您可以更改默认窗口宽度(80)以满足您的需要。
function! SmartWidth( width )
let num_wins = 0
windo let num_wins+=1
sil exe "set columns=" . num_wins * a:width
sil exe "normal! \<c-w>="
endfunction
autocmd VimEnter * call SmartWidth(80)
autocmd WinEnter * call SmartWidth(80)
这适用于基本情况,但不区分水平和垂直分割。我不知道该怎么做!