Skip to content

Instantly share code, notes, and snippets.

@Raimondi
Last active August 29, 2015 14:11
Show Gist options
  • Save Raimondi/804eb11e13a169731fb3 to your computer and use it in GitHub Desktop.
Save Raimondi/804eb11e13a169731fb3 to your computer and use it in GitHub Desktop.
Do stuff to visual blocks.
function! OperateOnVisualBlock(expr)
let save_reg = getreg('x')
let save_reg_type = getregtype('x')
normal! gv"xy
let list = split(@x, '\n')
let list = eval(printf(a:expr, 'list'))
let @x = join(list, "\n")
call setreg('X', '', 'b')
normal! gv"xp
call setreg('x', save_reg, save_reg_type)
endfun
function! MapVisualBlock(expr)
let map = 'map(%s, ' . string(a:expr) . ')'
call OperateOnVisualBlock(map)
endfunction
function! Add2VisualBlock(number)
let expr = 'v:val + ' . a:number
call MapVisualBlock(expr)
endfunction
xnoremap <leader>r :<C-U>call OperateOnVisualBlock('reverse(%s)')<CR>gv
xnoremap <leader>s :<C-U>call OperateOnVisualBlock('sort(%s)')<CR>gv
xnoremap <leader>m :<C-U>call MapVisualBlock('v:val + 1')<CR>gv
command! -nargs=+ OpVB call OperateOnVisualBlock(<q-args>)
command! -nargs=+ MapVB call MapVisualBlock(<q-args>)
command! -nargs=1 Add2VB call MapVisualBlock('v:val + <args>')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment