From c8ef92cfb59f28c050b82e90fb813d25392e6664 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Mon, 26 Feb 2024 23:32:34 +0000 Subject: Added 'last' objects to move.vim. --- plugin/move.vim | 73 +++++++++++++++++++++++++++++++++++++++------------------ 1 file 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 i% /{v%oo " "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 anb call inner_next(v:operator, 'a', '(', ')') -onoremap inb call inner_next(v:operator, 'i', '(', ')') -vnoremap anb call inner_next(v:operator, 'a', '(', ')') -vnoremap inb call inner_next(v:operator, 'i', '(', ')') +onoremap anb call inner(v:operator, 'a', '(', ')', v:false) +onoremap inb call inner(v:operator, 'i', '(', ')', v:false) +vnoremap anb call inner(v:operator, 'a', '(', ')', v:false) +vnoremap inb call inner(v:operator, 'i', '(', ')', v:false) + +onoremap anB call inner(v:operator, 'a', '{', '}', v:false) +onoremap inB call inner(v:operator, 'i', '{', '}', v:false) +vnoremap anB call inner(v:operator, 'a', '{', '}', v:false) +vnoremap inB call inner(v:operator, 'i', '{', '}', v:false) + +onoremap an< call inner(v:operator, 'a', '<', '>', v:false) +onoremap in< call inner(v:operator, 'i', '<', '>', v:false) +vnoremap an< call inner(v:operator, 'a', '<', '>', v:false) +vnoremap in< call inner(v:operator, 'i', '<', '>', v:false) + +onoremap an[ call inner(v:operator, 'a', '\[', '\]', v:false) +onoremap in[ call inner(v:operator, 'i', '\[', '\]', v:false) +vnoremap an[ call inner(v:operator, 'a', '\[', '\]', v:false) +vnoremap in[ call inner(v:operator, 'i', '\[', '\]', v:false) -onoremap anB call inner_next(v:operator, 'a', '{', '}') -onoremap inB call inner_next(v:operator, 'i', '{', '}') -vnoremap anB call inner_next(v:operator, 'a', '{', '}') -vnoremap inB call inner_next(v:operator, 'i', '{', '}') +" Change 'last' objects. +onoremap alb call inner(v:operator, 'a', '(', ')', v:true) +onoremap ilb call inner(v:operator, 'i', '(', ')', v:true) +vnoremap alb call inner(v:operator, 'a', '(', ')', v:true) +vnoremap ilb call inner(v:operator, 'i', '(', ')', v:true) -onoremap an< call inner_next(v:operator, 'a', '<', '>') -onoremap in< call inner_next(v:operator, 'i', '<', '>') -vnoremap an< call inner_next(v:operator, 'a', '<', '>') -vnoremap in< call inner_next(v:operator, 'i', '<', '>') +onoremap alB call inner(v:operator, 'a', '{', '}', v:true) +onoremap ilB call inner(v:operator, 'i', '{', '}', v:true) +vnoremap alB call inner(v:operator, 'a', '{', '}', v:true) +vnoremap ilB call inner(v:operator, 'i', '{', '}', v:true) -onoremap an[ call inner_next(v:operator, 'a', '\[', '\]') -onoremap in[ call inner_next(v:operator, 'i', '\[', '\]') -vnoremap an[ call inner_next(v:operator, 'a', '\[', '\]') -vnoremap in[ call inner_next(v:operator, 'i', '\[', '\]') +onoremap al< call inner(v:operator, 'a', '<', '>', v:true) +onoremap il< call inner(v:operator, 'i', '<', '>', v:true) +vnoremap al< call inner(v:operator, 'a', '<', '>', v:true) +vnoremap il< call inner(v:operator, 'i', '<', '>', v:true) -function! s:inner_next(operator, ai, open, close) abort +onoremap al[ call inner(v:operator, 'a', '\[', '\]', v:true) +onoremap il[ call inner(v:operator, 'i', '\[', '\]', v:true) +vnoremap al[ call inner(v:operator, 'a', '\[', '\]', v:true) +vnoremap il[ call inner(v:operator, 'i', '\[', '\]', v:true) + +" 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) -- cgit