function! Target() let start_position = getpos('.') normal! e let end_position = getpos('.') return ['v', start_position, end_position] endfunction function! s:target() let start_position = getpos('.') normal! w let end_position = getpos('.') return ['v', start_position, end_position] endfunction call textobj#user#plugin('newstyle', { \ 'select-pattern': { \ 'pattern': 'pat*ern', \ 'select': ['ansp', 'insp'], \ }, \ 'select-function-global': { \ 'select-function': 'Target', \ 'select': ['ansfg', 'insfg'], \ }, \ 'select-function-local': { \ 'sfile': expand(':p'), \ 'select-function': 's:target', \ 'select': ['ansfs', 'insfs'], \ }, \ }) call textobj#user#plugin('oldstyle', { \ 'select-pattern': { \ '*pattern*': 'pat*ern', \ 'select': ['aosp', 'iosp'], \ }, \ 'select-function-global': { \ '*select-function*': 'Target', \ 'select': ['aosfg', 'iosfg'], \ }, \ 'select-function-local': { \ '*sfile*': expand(':p'), \ '*select-function*': 's:target', \ 'select': ['aosfs', 'iosfs'], \ }, \ }) describe '"*pattern*"' before new call setline(1, 'pat patttttern put') end after close! end it 'is treated as same as "pattern"' let @0 = '' normal! gg0 normal yaosp let old_result = @0 let @0 = '' normal! gg0 normal yansp let new_result = @0 Expect old_result ==# new_result Expect old_result ==# 'patttttern' end end describe '"*{property}-function*"' before new call setline(1, 'pat patttttern put') end after close! end it 'is treated as same as "{property}-function"' let @0 = '' normal! gg0 normal yaosfg let old_result = @0 let @0 = '' normal! gg0 normal yansfg let new_result = @0 Expect old_result ==# new_result Expect old_result ==# 'pat' end end describe '"*sfile*"' before new call setline(1, 'pat patttttern put') end after close! end it 'is treated as same as "sfile"' let @0 = '' normal! gg0 normal yaosfs let old_result = @0 let @0 = '' normal! gg0 normal yansfs let new_result = @0 Expect old_result ==# new_result Expect old_result ==# 'pat p' end end