1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-23 22:30:04 +08:00
SpaceVim/bundle/vim-textobj-user/t/selection.vim
2020-06-13 14:06:35 +08:00

110 lines
2.4 KiB
VimL

function! CharacterwiseSelectA()
if empty(getline('.'))
return 0
endif
normal! 0
let head_pos = getpos('.')
normal! $
let tail_pos = getpos('.')
return ['v', head_pos, tail_pos]
endfunction
function! CharacterwiseSelectI()
if empty(getline('.'))
return 0
endif
normal! ^
let head_pos = getpos('.')
normal! g_
let tail_pos = getpos('.')
let non_blank_char_exists_p = getline('.')[head_pos[2] - 1] !~# '\s'
return
\ non_blank_char_exists_p
\ ? ['v', head_pos, tail_pos]
\ : 0
endfunction
function! LinewiseSelectA()
let head_pos = getpos('.')
normal! j
let tail_pos = getpos('.')
return ['V', head_pos, tail_pos]
endfunction
call textobj#user#plugin('custom', {
\ 'characterwise': {
\ 'select-a': 'ac', '*select-a-function*': 'CharacterwiseSelectA',
\ 'select': 'iC', 'pattern': '^\s*\zs.*\S\ze\s*$',
\ },
\ 'linewise': {
\ 'select-a': 'al', '*select-a-function*': 'LinewiseSelectA',
\ },
\ 'pair': {
\ 'pattern': ['\V(*', '\V*)'],
\ 'select-a': 'ap',
\ 'select-i': 'ip',
\ },
\ })
" Note that pattern-based text objects are always characterwsise.
describe 'Custom text object'
before
new
put ='abc def ghi'
put =' jkl mno pqr '
put ='foo \'
put =' bar'
put =' baz \'
put =' qux \'
put ='xyz'
put ='aaa (* bbb ccc *) ddd'
put ='eee (* fff'
put ='ggg *) hhh'
1 delete _
function! b:.test(selection)
let &selection = a:selection
let cases = [
\ [1, 1, 'ac', 'abc def ghi'],
\ [2, 1, 'ac', ' jkl mno pqr '],
\ [1, 1, 'iC', 'abc def ghi'],
\ [2, 1, 'iC', 'jkl mno pqr'],
\ [3, 1, 'al', "foo \\\n bar\n"],
\ [4, 1, 'al', " bar\n baz \\\n"],
\ [5, 1, 'al', " baz \\\n qux \\\n"],
\ [8, 5, 'ap', "(* bbb ccc *)"],
\ [9, 5, 'ap', "(* fff\nggg *)"],
\ [8, 5, 'ip', " bbb ccc "],
\ [9, 5, 'ip', " fff\nggg "],
\ ]
for c in cases
let [ln, cn, object, result] = c
call cursor(ln, cn)
execute 'normal' 'y' . object
Expect [ln, object, strtrans(@0)] ==# [ln, object, strtrans(result)]
endfor
endfunction
end
after
close!
set selection&
end
it 'works if &selection is inclusive'
call b:.test('inclusive')
end
it 'works if &selection is exclusive'
call b:.test('exclusive')
end
end