
Shell
vnoremap J :call V_mv_line("j")<cr>
vnoremap K :call V_mv_line("k")<cr>
func! V_mv_line(ud) range abort
let l:line_num = a:lastline - a:firstline + 1
execute 'normal! ' . a:firstline . 'G'
execute 'normal! ' . l:line_num . '"add'
execute 'normal! ' . a:ud
execute 'normal! "aP'
execute 'normal! V'
let l:mv_num = l:line_num - 1
if l:mv_num >= 1
execute 'normal! ' . l:mv_num . 'j'
endif
endfunc