Интеллектуальное изменение размеров окна с разделением в MacVim - PullRequest
4 голосов
/ 31 октября 2011

Я использую последнюю версию MacVim.Есть ли способ получить его, чтобы, если я открою MacVim без файла или только с одним файлом, он установит ширину окна в n символов?Тогда, если я сделаю вертикальное разделение, он увеличит ширину окна до 2n символов?То же самое для 3 вертикальных разбиений, но оно прекратит увеличивать ширину после того, как окно будет 3n символов.Тогда, если я закрою эти сплиты, он уменьшится в размерах?

Ответы [ 2 ]

4 голосов
/ 06 ноября 2011

Это похоже на работу.Независимо от того, было ли выполнено горизонтальное разделение, при каждом создании или удалении 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, чтобы установить ширину исходного окна в качестве ширины для изменения размера.

Все становится немного шатко, если у вас так много всплитов, что окно становится максимальнымпо горизонтали.Я пытаюсь найти исправление и выложу его, если найду.

0 голосов
/ 02 ноября 2011

Я понял, что мой первый пост изменил высоту окна, а не ширину. Вот что я имел в виду:

Вот быстрое решение, которое я придумал, но оно не идеально. Функция подсчитывает количество открытых окон и затем устанавливает ширину окна на 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)

Это работает в основном случае, но не различает горизонтальное и вертикальное разбиение. Я не знаю, как это сделать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...