aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/vertical_region.vim15
-rw-r--r--plugin/vertical_region.vim24
2 files changed, 23 insertions, 16 deletions
diff --git a/autoload/vertical_region.vim b/autoload/vertical_region.vim
index 6f2cf8d..a872ad6 100644
--- a/autoload/vertical_region.vim
+++ b/autoload/vertical_region.vim
@@ -1,6 +1,11 @@
-" Function for expression maps returning navigaton keys to press
+" Autoloaded function for vertical_region.vim maps
function! vertical_region#Map(count, up, mode) abort
+ " Reselect any selection
+ if a:mode ==# 'x'
+ normal! gv
+ endif
+
" Get line and column number
let l:num = line('.')
let l:col = col('.')
@@ -27,11 +32,13 @@ function! vertical_region#Map(count, up, mode) abort
" If not moving linewise for operator mode and not in first column, move to
" same column after line jump; is there a way to do this in one jump?
let l:keys = l:num . 'G'
- if a:mode !=# 'o' && l:col > 1
+ if a:mode ==# 'o'
+ let l:keys = 'V' . l:keys
+ elseif l:col > 1
let l:keys .= l:col - 1 . 'l'
endif
- " Return normal mode commands
- return l:keys
+ " Run normal mode commands
+ execute 'normal! ' . l:keys
endfunction
diff --git a/plugin/vertical_region.vim b/plugin/vertical_region.vim
index 43b30b8..e54bbb0 100644
--- a/plugin/vertical_region.vim
+++ b/plugin/vertical_region.vim
@@ -16,15 +16,15 @@ endif
let g:loaded_vertical_region = 1
" Define plugin maps
-nnoremap <expr> <Plug>(VerticalRegionUpNormal)
- \ vertical_region#Map(v:count1, 1, 'n')
-nnoremap <expr> <Plug>(VerticalRegionDownNormal)
- \ vertical_region#Map(v:count1, 0, 'n')
-onoremap <expr> <Plug>(VerticalRegionUpOperator)
- \ vertical_region#Map(v:count1, 1, 'o')
-onoremap <expr> <Plug>(VerticalRegionDownOperator)
- \ vertical_region#Map(v:count1, 0, 'o')
-xnoremap <expr> <Plug>(VerticalRegionUpVisual)
- \ vertical_region#Map(v:count1, 1, 'x')
-xnoremap <expr> <Plug>(VerticalRegionDownVisual)
- \ vertical_region#Map(v:count1, 0, 'x')
+nnoremap <silent> <Plug>(VerticalRegionUpNormal)
+ \ :<C-U>call vertical_region#Map(v:count1, 1, 'n')<CR>
+nnoremap <silent> <Plug>(VerticalRegionDownNormal)
+ \ :<C-U>call vertical_region#Map(v:count1, 0, 'n')<CR>
+onoremap <silent> <Plug>(VerticalRegionUpOperator)
+ \ :<C-U>call vertical_region#Map(v:count1, 1, 'o')<CR>
+onoremap <silent> <Plug>(VerticalRegionDownOperator)
+ \ :<C-U>call vertical_region#Map(v:count1, 0, 'o')<CR>
+xnoremap <silent> <Plug>(VerticalRegionUpVisual)
+ \ :<C-U>call vertical_region#Map(v:count1, 1, 'x')<CR>
+xnoremap <silent> <Plug>(VerticalRegionDownVisual)
+ \ :<C-U>call vertical_region#Map(v:count1, 0, 'x')<CR>