ВИМ автоматического изменения размера окна

Я медленно изучаю vim и его мощные возможности. У меня есть вопрос в отношении разделения окон (в основном горизонтальных расколов). Есть ли способ автоматически изменить размер выбранного (сфокусированного) окна? Допустим, например, настройка так, чтобы сфокусированное окно всегда занимало 70% экрана.

используя Ctrl-w (число) +/- каждый раз не очень эффективно, особенно когда я прыгаю между несколькими файлы постоянно.

также было бы здорово, если бы был способ ограничить его только горизонтально разбитыми окнами.

3 ответов


на 'winheight' параметр определяет минимальное количество строк для текущего окна. Некоторые пользователи установили значение 999 для "Rolodex mode". Следующие наборы это 70%:

:let &winheight = &lines * 7 / 10

для чего-нибудь более причудливого, вы можете подключиться к WinEnter событие через :autocmd, а затем установите высоту окна в N через :Nwincmd _. Глупый пример:

:autocmd WinEnter * execute winnr() * 2 . 'wincmd _'

звучит так, как будто вы хотите золотой-коэффициент: автоматическое изменение размера окон с помощью Золотой Пропорции.

Как только я узнал, что вы можете отключить "автоматическую" часть золотого сечения, я начал использовать ее сам с этими настройками:

" Don't resize automatically.
let g:golden_ratio_autocommand = 0

" Mnemonic: - is next to =, but instead of resizing equally, all windows are
" resized to focus on the current.
nmap <C-w>- <Plug>(golden_ratio_resize)
" Fill screen with current window.
nnoremap <C-w>+ <C-w><Bar><C-w>_

Я использую эти сопоставления для полиэкранов:

nnoremap <C-j>  <C-w>j
nnoremap <C-k>  <C-w>k
nnoremap <C-h>  <C-w>h
nnoremap <C-l>  <C-w>l
nnoremap c<C-j> :bel sp new<cr>
nnoremap c<C-k> :abo sp new<cr>
nnoremap c<C-h> :lefta vsp new<cr>
nnoremap c<C-l> :rightb vsp new<cr>
nnoremap g<C-j> <C-w>j<C-w>_
nnoremap g<C-k> <C-w>k<C-w>_
nnoremap g<C-h> <C-w>h<C-w>_
nnoremap g<C-l> <C-w>l<C-w>_
nnoremap d<C-j> <C-w>j<C-w>c
nnoremap d<C-k> <C-w>k<C-w>c
nnoremap d<C-h> <C-w>h<C-w>c
nnoremap d<C-l> <C-w>l<C-w>c

таким образом, если вы хотите прыгать между шпагатами, вы можете использовать C-hjkl. Если вы хотите "создать" сплит вы можете использовать cC-hjkl. Если вы хотите максимизировать разделение, вы можете использовать gC-hjkl. И если вы хотите удалить сплит, вы можете использовать dC-hjkl.

Если вы хотите конкретно 70% вместо максимального, что вы могли бы использовать

nnoremap g<C-j> <C-w>j:let &winheight = &lines * 7 / 10<cr>

например.