使用分割功能实现MacVim智能窗口调整大小

4

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

2个回答

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的操作,将其设置为使用原始窗口的宽度作为要调整大小的宽度。

如果您拥有太多的垂直分屏,使窗口水平最大化,则可能会出现一些问题。我正在寻找解决方法,如果找到了,我将发布它。


我的问题似乎非常相关,我认为它涉及一些与这个解决方案有关的问题。 - Karl Yngve Lervåg

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)

这在基本情况下是有效的,但不能区分水平和垂直拆分。我不知道该怎么做!


1
你也可以定义一个新的命令(Vsp而不是vsp),它将执行:vsp并调用SmartWidth()。 - mkomitee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接