Подтвердить что ты не робот

Окно с автоматическим изменением размера VIM

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

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

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

4b9b3361

Ответ 1

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

:let &winheight = &lines * 7 / 10

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

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

Ответ 2

Похоже, что вы хотите золотой коэффициент: автоматически изменить размер окон, используя Золотое соотношение.

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

" 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>_

Ответ 3

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

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. Если вы хотите "создать" раскол, вы можете использовать c C-hjkl. Если вы хотите максимизировать раскол, вы можете использовать g C-hjkl. И если вы хотите удалить раскол, вы можете использовать d C-hjkl.

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

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

например.