" 24 simple pseudo-text objects " ----------------------------- " i_ i. i: i, i; i| i/ i\ i* i+ i- i# " a_ a. a: a, a; a| a/ a\ a* a+ a- a# for char in [ '_', '.', ':', ',', ';', '', '/', '', '*', '+', '-', '#' ] execute 'xnoremap i' . char . ' :normal! T' . char . 'vt' . char . '' execute 'onoremap i' . char . ' :normal vi' . char . '' execute 'xnoremap a' . char . ' :normal! F' . char . 'vf' . char . '' execute 'onoremap a' . char . ' :normal va' . char . '' endfor " line pseudo-text objects " ------------------------ " il al xnoremap il g_o^ onoremap il :normal vil xnoremap al $o0 onoremap al :normal val " number pseudo-text object (integer and float) " --------------------------------------------- " in function! VisualNumber() call search('\d\([^0-9\.]\|$\)', 'cW') normal v call search('\(^\|[^0-9\.]\d\)', 'becW') endfunction xnoremap in :call VisualNumber() onoremap in :normal vin " buffer pseudo-text objects " -------------------------- " i% a% xnoremap i% :let z = @/\|1;/^./kzG??:let @/ = zV'z onoremap i% :normal vi% xnoremap a% GoggV onoremap a% :normal va% " square brackets pseudo-text objects " ----------------------------------- " ir ar xnoremap ir i[ xnoremap ar a[ onoremap ir :normal vi[ onoremap ar :normal va[ " block comment pseudo-text objects " --------------------------------- " i? a? xnoremap a? [*o]* onoremap a? :normal va?V xnoremap i? [*jo]*k onoremap i? :normal vi?V " last change pseudo-text objects " ------------------------------- " ik ak xnoremap ik `]o`[ onoremap ik :normal vik onoremap ak :normal vikV