mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-23 22:30:04 +08:00
110 lines
2.4 KiB
VimL
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
|