diff --git a/autoload/textobj/user.vim b/autoload/textobj/user.vim index bf21064..7b616db 100644 --- a/autoload/textobj/user.vim +++ b/autoload/textobj/user.vim @@ -442,34 +442,39 @@ endfunction function! s:plugin.define_interface_key_mappings() "{{{3 - let RHS_PATTERN = - \ ':call g:__textobj_' . self.name . '.do_by_pattern(' - \ . '"%s",' - \ . '"%s",' - \ . '""' - \ . ')' - let RHS_FUNCTION = - \ ':call g:__textobj_' . self.name . '.do_by_function(' + let RHS_FORMAT = + \ '%s' + \ . ':call g:__textobj_' . self.name . '.%s(' \ . '"%s",' \ . '"%s",' \ . '""' \ . ')' + \ . '%s' for [obj_name, specs] in items(self.obj_specs) for spec_name in filter(keys(specs), 's:is_ui_property_name(v:val)') + if spec_name =~# '^move' + let save = '' + let restore = '' + else " spec_name =~# '^select' + let save = '(save-marks)' + let restore = '(restore-marks)' + endif + " lhs - let lhs = ' ' . self.interface_mapping_name(obj_name, spec_name) + let lhs = self.interface_mapping_name(obj_name, spec_name) " rhs let _ = spec_name . '-function' if has_key(specs, _) - let rhs = printf(RHS_FUNCTION, spec_name, obj_name) + let do = 'do_by_function' elseif has_key(specs, 'pattern') - let rhs = printf(RHS_PATTERN, spec_name, obj_name) + let do = 'do_by_pattern' else " skip to allow to define user's own {rhs} of the interface mapping. continue endif + let rhs = printf(RHS_FORMAT, save, do, spec_name, obj_name, restore) " map if spec_name =~# '^move' @@ -477,7 +482,7 @@ function! s:plugin.define_interface_key_mappings() "{{{3 else " spec_name =~# '^select' let MapFunction = function('s:objnoremap') endif - call MapFunction(1, lhs, rhs) + call MapFunction(1, '