智能窗口在MacVim中使用拆分调整大小

时间:2011-10-31 14:58:16

标签: vim

我正在使用最新的MacVim。有没有办法让它如此,如果我打开MacVim没有文件或只有一个文件,它将窗口宽度设置为n个字符?那么如果我进行垂直分割,它会将窗口宽度扩展为2n个字符?对于3个垂直分割也是如此,但在窗口为3n个字符后,它将停止增加宽度。然后,如果我关闭那些分裂,它会调整大小?

2 个答案:

答案 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)

这适用于基本情况,但不区分水平和垂直分割。我不知道该怎么做!