aboutsummaryrefslogtreecommitdiff
path: root/plugin/charadd.vim
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2022-09-12 21:56:35 -0600
committerJosh Rahm <joshuarahm@gmail.com>2022-09-12 21:56:35 -0600
commit0514c88053e83ff5d1bf3c6ba3cfa80565df368e (patch)
tree9392e402da08ee2f0916c2d206aa69e9868a703f /plugin/charadd.vim
parent2f99407cd2ce0d0ffbe3f62bc31407033c06d7f7 (diff)
downloadfieldmarshal.vim-0514c88053e83ff5d1bf3c6ba3cfa80565df368e.tar.gz
fieldmarshal.vim-0514c88053e83ff5d1bf3c6ba3cfa80565df368e.tar.bz2
fieldmarshal.vim-0514c88053e83ff5d1bf3c6ba3cfa80565df368e.zip
fieldmarshal.vim: Add utility function for modifying motions
Diffstat (limited to 'plugin/charadd.vim')
-rw-r--r--plugin/charadd.vim43
1 files changed, 14 insertions, 29 deletions
diff --git a/plugin/charadd.vim b/plugin/charadd.vim
index b1d0912..02bd626 100644
--- a/plugin/charadd.vim
+++ b/plugin/charadd.vim
@@ -46,35 +46,20 @@ function! s:set_dir(d, i) abort
endfunction
function! s:charadd(arg, ...) abort
- let save_a = getreg('a')
- let save_a_type = getregtype('a')
+ let cb = {'as_chars': 1}
- if a:0
- echo a:1
- let vis = '`<' . a:arg . '`>'
- elseif a:arg == 'line'
- let vis = "'[V']"
- elseif a:arg == 'block'
- let vis = "`[\<C-v>`]"
- else
- let vis = "`[v`]"
- endif
+ function cb.operate(l, ...)
+ let nl = ""
+ for c in a:l
+ if s:incl || ! (c =~ '\_s')
+ let n = char2nr(c)
+ let nl .= nr2char(n + s:dir)
+ else
+ let nl .= c
+ endif
+ endfor
+ return nl
+ endfunction
- silent! exec printf("norm! %s\"ay", vis)
- let r = getreg('a', 1)
- let rtyp = getregtype('a')
-
- let nl = ""
- for c in r
- if s:incl || ! (c =~ '\_s')
- let n = char2nr(c)
- let nl .= nr2char(n + s:dir)
- else
- let nl .= c
- endif
- endfor
-
- call setreg('a', nl, rtyp)
- silent! exec printf("norm! gv\"ap`[")
- call setreg('a', save_a, save_a_type)
+ call fieldmarshal#modifytext(a:arg, cb)
endfunction