call textobj#user#plugin('line', { \ '-': { \ 'select-a': 'al', \ 'select-a-function': 'SelectA', \ 'select': 'il', \ 'pattern': '^\s*\zs.\{-}\ze\s*$', \ }, \ }) function! SelectA() if empty(getline('.')) return 0 endif normal! 0 let head_pos = getpos('.') normal! $ let tail_pos = getpos('.') return ['v', head_pos, tail_pos] endfunction describe 'Custom text object' before new silent 1 put! =[ \ 'if (!foo) {', \ ' bar = ''baz''', \ ' qux()', \ '}', \ ] silent $ delete _ let @" = '*nothing changed*' execute 'normal!' "1G2|vj\" end after close! end context 'defined by a function' it 'keeps ''< and ''> marks' TODO Expect @0 ==# '*nothing changed*' Expect [line("'<"), col("'<")] == [1, 2] Expect [line("'>"), col("'>")] == [2, 2] normal 3Gyal Expect @0 ==# ' qux()' Expect [line("'<"), col("'<")] == [1, 2] Expect [line("'>"), col("'>")] == [2, 2] end end context 'defined by a pattern' it 'keeps ''< and ''> marks' TODO Expect @0 ==# '*nothing changed*' Expect [line("'<"), col("'<")] == [1, 2] Expect [line("'>"), col("'>")] == [2, 2] normal 3Gyil Expect @0 ==# 'qux()' Expect [line("'<"), col("'<")] == [1, 2] Expect [line("'>"), col("'>")] == [2, 2] end end context 'combined with operator c' it 'also works fine' TODO Expect @" ==# '*nothing changed*' Expect [line("'<"), col("'<")] == [1, 2] Expect [line("'>"), col("'>")] == [2, 2] normal 3Gcilxyzzy Expect @" ==# 'qux()' Expect getline(1, '$') ==# [ \ 'if (!foo) {', \ ' bar = ''baz''', \ ' xyzzy', \ '}', \ ] Expect [line("'<"), col("'<")] == [1, 2] Expect [line("'>"), col("'>")] == [2, 2] end end end " __END__ "{{{1 " vim: foldmethod=marker