aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2024-02-26 23:32:34 +0000
committerJosh Rahm <rahm@google.com>2024-02-26 23:32:34 +0000
commitc8ef92cfb59f28c050b82e90fb813d25392e6664 (patch)
tree199acaaa57a0bc900b6427a97d5bdadfeafa1c0c
parentaba4c0888266472f22f5ca2615346464f0965e36 (diff)
downloadfieldmarshal.vim-c8ef92cfb59f28c050b82e90fb813d25392e6664.tar.gz
fieldmarshal.vim-c8ef92cfb59f28c050b82e90fb813d25392e6664.tar.bz2
fieldmarshal.vim-c8ef92cfb59f28c050b82e90fb813d25392e6664.zip
Added 'last' objects to move.vim.
-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)