aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugin/move.vim73
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)