diff options
author | Josh Rahm <rahm@google.com> | 2024-02-26 23:32:34 +0000 |
---|---|---|
committer | Josh Rahm <rahm@google.com> | 2024-02-26 23:32:34 +0000 |
commit | c8ef92cfb59f28c050b82e90fb813d25392e6664 (patch) | |
tree | 199acaaa57a0bc900b6427a97d5bdadfeafa1c0c | |
parent | aba4c0888266472f22f5ca2615346464f0965e36 (diff) | |
download | fieldmarshal.vim-c8ef92cfb59f28c050b82e90fb813d25392e6664.tar.gz fieldmarshal.vim-c8ef92cfb59f28c050b82e90fb813d25392e6664.tar.bz2 fieldmarshal.vim-c8ef92cfb59f28c050b82e90fb813d25392e6664.zip |
Added 'last' objects to move.vim.
-rw-r--r-- | plugin/move.vim | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/plugin/move.vim b/plugin/move.vim index aa89f40..2e3d3ef 100644 --- a/plugin/move.vim +++ b/plugin/move.vim @@ -10,36 +10,63 @@ vnoremap <silent> i% <esc>/{<cr>v%<bs>o<space>o " "Next" objects. These objects are like ab, aB, a<, a[, etc. but will always go to the next body " regardless of if it is nested or not. " -" If outside an expression, the behavior is the -" -onoremap <silent> anb <cmd>call <sid>inner_next(v:operator, 'a', '(', ')')<cr> -onoremap <silent> inb <cmd>call <sid>inner_next(v:operator, 'i', '(', ')')<cr> -vnoremap <silent> anb <cmd>call <sid>inner_next(v:operator, 'a', '(', ')')<cr> -vnoremap <silent> inb <cmd>call <sid>inner_next(v:operator, 'i', '(', ')')<cr> +onoremap <silent> anb <cmd>call <sid>inner(v:operator, 'a', '(', ')', v:false)<cr> +onoremap <silent> inb <cmd>call <sid>inner(v:operator, 'i', '(', ')', v:false)<cr> +vnoremap <silent> anb <cmd>call <sid>inner(v:operator, 'a', '(', ')', v:false)<cr> +vnoremap <silent> inb <cmd>call <sid>inner(v:operator, 'i', '(', ')', v:false)<cr> + +onoremap <silent> anB <cmd>call <sid>inner(v:operator, 'a', '{', '}', v:false)<cr> +onoremap <silent> inB <cmd>call <sid>inner(v:operator, 'i', '{', '}', v:false)<cr> +vnoremap <silent> anB <cmd>call <sid>inner(v:operator, 'a', '{', '}', v:false)<cr> +vnoremap <silent> inB <cmd>call <sid>inner(v:operator, 'i', '{', '}', v:false)<cr> + +onoremap <silent> an< <cmd>call <sid>inner(v:operator, 'a', '<', '>', v:false)<cr> +onoremap <silent> in< <cmd>call <sid>inner(v:operator, 'i', '<', '>', v:false)<cr> +vnoremap <silent> an< <cmd>call <sid>inner(v:operator, 'a', '<', '>', v:false)<cr> +vnoremap <silent> in< <cmd>call <sid>inner(v:operator, 'i', '<', '>', v:false)<cr> + +onoremap <silent> an[ <cmd>call <sid>inner(v:operator, 'a', '\[', '\]', v:false)<cr> +onoremap <silent> in[ <cmd>call <sid>inner(v:operator, 'i', '\[', '\]', v:false)<cr> +vnoremap <silent> an[ <cmd>call <sid>inner(v:operator, 'a', '\[', '\]', v:false)<cr> +vnoremap <silent> in[ <cmd>call <sid>inner(v:operator, 'i', '\[', '\]', v:false)<cr> -onoremap <silent> anB <cmd>call <sid>inner_next(v:operator, 'a', '{', '}')<cr> -onoremap <silent> inB <cmd>call <sid>inner_next(v:operator, 'i', '{', '}')<cr> -vnoremap <silent> anB <cmd>call <sid>inner_next(v:operator, 'a', '{', '}')<cr> -vnoremap <silent> inB <cmd>call <sid>inner_next(v:operator, 'i', '{', '}')<cr> +" Change 'last' objects. +onoremap <silent> alb <cmd>call <sid>inner(v:operator, 'a', '(', ')', v:true)<cr> +onoremap <silent> ilb <cmd>call <sid>inner(v:operator, 'i', '(', ')', v:true)<cr> +vnoremap <silent> alb <cmd>call <sid>inner(v:operator, 'a', '(', ')', v:true)<cr> +vnoremap <silent> ilb <cmd>call <sid>inner(v:operator, 'i', '(', ')', v:true)<cr> -onoremap <silent> an< <cmd>call <sid>inner_next(v:operator, 'a', '<', '>')<cr> -onoremap <silent> in< <cmd>call <sid>inner_next(v:operator, 'i', '<', '>')<cr> -vnoremap <silent> an< <cmd>call <sid>inner_next(v:operator, 'a', '<', '>')<cr> -vnoremap <silent> in< <cmd>call <sid>inner_next(v:operator, 'i', '<', '>')<cr> +onoremap <silent> alB <cmd>call <sid>inner(v:operator, 'a', '{', '}', v:true)<cr> +onoremap <silent> ilB <cmd>call <sid>inner(v:operator, 'i', '{', '}', v:true)<cr> +vnoremap <silent> alB <cmd>call <sid>inner(v:operator, 'a', '{', '}', v:true)<cr> +vnoremap <silent> ilB <cmd>call <sid>inner(v:operator, 'i', '{', '}', v:true)<cr> -onoremap <silent> an[ <cmd>call <sid>inner_next(v:operator, 'a', '\[', '\]')<cr> -onoremap <silent> in[ <cmd>call <sid>inner_next(v:operator, 'i', '\[', '\]')<cr> -vnoremap <silent> an[ <cmd>call <sid>inner_next(v:operator, 'a', '\[', '\]')<cr> -vnoremap <silent> in[ <cmd>call <sid>inner_next(v:operator, 'i', '\[', '\]')<cr> +onoremap <silent> al< <cmd>call <sid>inner(v:operator, 'a', '<', '>', v:true)<cr> +onoremap <silent> il< <cmd>call <sid>inner(v:operator, 'i', '<', '>', v:true)<cr> +vnoremap <silent> al< <cmd>call <sid>inner(v:operator, 'a', '<', '>', v:true)<cr> +vnoremap <silent> il< <cmd>call <sid>inner(v:operator, 'i', '<', '>', v:true)<cr> -function! s:inner_next(operator, ai, open, close) abort +onoremap <silent> al[ <cmd>call <sid>inner(v:operator, 'a', '\[', '\]', v:true)<cr> +onoremap <silent> il[ <cmd>call <sid>inner(v:operator, 'i', '\[', '\]', v:true)<cr> +vnoremap <silent> al[ <cmd>call <sid>inner(v:operator, 'a', '\[', '\]', v:true)<cr> +vnoremap <silent> il[ <cmd>call <sid>inner(v:operator, 'i', '\[', '\]', v:true)<cr> + +" ThisIsATest +function! s:inner(operator, ai, open, close, back) abort let opos = getpos('.') let i = 0 - while i < v:count + 1 - call search(a:open) - let i += 1 - endwhile + if a:back + while i < v:count + 1 + call search(a:close, 'b') + let i += 1 + endwhile + else + while i < v:count + 1 + call search(a:open) + let i += 1 + endwhile + endif normal! % if (getline('.')[col('.')-1] =~ a:open) |