Vim で textobj の範囲を取得する

vim-textobj-multitextobj で textobj の範囲を取得したかったんですが、以下の様な実装に。


function! s:pos_less_equal(a, b)
    return a:a[0] == a:b[0] ? a:a[1] <= a:b[1] : a:a[0] <= a:b[0]
endfunction


let s:region = []
let s:type = ""
function! OperatorTextobjRegion(type)
    let s:type = a:type
    let s:region = [getpos("'[")[1:], getpos("']")[1:]]
endfunction

nnoremap <silent> <Plug>(textobj-region-operator)
\   :<C-u>set operatorfunc=OperatorTextobjRegion<CR>g@

function! TextobjRegion(textobj)
    let pos = getpos(".")
    let s:region = []

    let tmp = &operatorfunc
    silent execute "normal \<Plug>(textobj-region-operator)" . a:textobj
    let &operatorfunc = tmp

    if !empty(s:region) && !s:pos_less_equal(s:region[0], s:region[1])
        return ["", []]
    endif
    call setpos(".", pos)
    return deepcopy([s:type, s:region])
endfunction

echo TextobjRegion("iw")
" => ['char', [[6, 1, 0], [6, 8, 0]]]

echo TextobjRegion("\<Plug>(textobj-multiblock-i)")
" => ['char', [[38, 29, 0], [38, 48, 0]]]


範囲を取得する用の operator を用意して、それを介して範囲を取得しています。
他にも手段はあるだろうか。