aboutsummaryrefslogtreecommitdiff
path: root/plugin/resize-mode.vim
blob: a28e26c19c9a8d646d06cf9902f7d9141b25058c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
" Using <C-w>+, <C-w>-, <C-w><, <C-w>> without a number will enter a "resize"
" mode where the pane can be resized by repeatedly pressing those keys.

if !exists("g:vim_fieldmarshal_resize_skip")
  let g:vim_fieldmarshal_resize_skip = 3
endif

function! s:enter_resize_mode(chr) abort
  let c = a:chr
  if v:count != 0
    exec "wincmd " . c
    return
  endif

  exec g:vim_fieldmarshal_resize_skip . "wincmd " . c
  redraw

  let c = nr2char(getchar())
  while c == '<' || c == '>' || c == '+' || c == '-'
    exec g:vim_fieldmarshal_resize_skip . "wincmd " . c
    redraw
    let c = nr2char(getchar())
  endwhile
endfunction

noremap <C-w>+ <cmd>call <sid>enter_resize_mode('+')<cr>
noremap <C-w>- <cmd>call <sid>enter_resize_mode('-')<cr>
noremap <C-w>> <cmd>call <sid>enter_resize_mode('>')<cr>
noremap <C-w>< <cmd>call <sid>enter_resize_mode('<')<cr>