我正在使用最新的MacVim。有没有办法让它在打开没有文件或只有一个文件的情况下,将窗口宽度设置为n个字符?然后如果我进行垂直分割,它会将窗口宽度扩展到2n个字符?3个垂直分割也是一样,但在窗口达到3n个字符后就停止增加宽度。然后如果我关闭这些分割,它会自动调整大小?
我正在使用最新的MacVim。有没有办法让它在打开没有文件或只有一个文件的情况下,将窗口宽度设置为n个字符?然后如果我进行垂直分割,它会将窗口宽度扩展到2n个字符?3个垂直分割也是一样,但在窗口达到3n个字符后就停止增加宽度。然后如果我关闭这些分割,它会自动调整大小?
这似乎有效。无论是否已进行水平拆分,每当创建或删除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
的操作,将其设置为使用原始窗口的宽度作为要调整大小的宽度。
如果您拥有太多的垂直分屏,使窗口水平最大化,则可能会出现一些问题。我正在寻找解决方法,如果找到了,我将发布它。
我意识到我的第一篇帖子修改了窗口的高度,而不是宽度。这就是我的意思:
这是我想出的一个快速解决方案,但并不完美。该函数计算打开窗口的数量,然后将窗口宽度设置为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)
这在基本情况下是有效的,但不能区分水平和垂直拆分。我不知道该怎么做!
Vsp
而不是vsp
),它将执行:vsp
并调用SmartWidth()。 - mkomitee