2011-10-31 33 views
4

我正在使用最新的MacVim。有沒有辦法讓它如此,如果我打開MacVim沒有文件或只有一個文件,它將窗口寬度設置爲n個字符?那麼如果我做一個垂直分割它會擴大窗口寬度爲2n個字符? 3個垂直分割相同,但在窗口爲3n個字符後停止增加寬度。那麼如果我關閉這些分割,它會調整大小?智能窗口在MacVim中拆分時調整大小

回答

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以使窗口水平最大化,事情會變得有點過分。我試圖找到一個修復程序,我會發布它,如果我找到一個。

+0

我的[question](http://stackoverflow.com/questions/18102928/自動-resize-vim-gui-根據垂直分割數/ 18106180#18106180)似乎非常相關,我認爲它解決了與此解決方案相關的一些問題。 –

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

相關問題