forked from aniani/vim
patch 8.1.0648: custom operators can't act upon a forced motion
Problem: Custom operators can't act upon a forced motion. (Christian Wellenbrock) Solution: Add the forced motion to the mode() result. (Christian Brabandt, closes #3490)
This commit is contained in:
@@ -230,3 +230,57 @@ func Test_cabbr_visual_mode()
|
||||
call assert_equal(expected, getreg(':'))
|
||||
cunabbr s
|
||||
endfunc
|
||||
|
||||
func Test_motionforce_omap()
|
||||
func GetCommand()
|
||||
let g:m=mode(1)
|
||||
let [g:lnum1, g:col1] = searchpos('-', 'Wb')
|
||||
if g:lnum1 == 0
|
||||
return "\<Esc>"
|
||||
endif
|
||||
let [g:lnum2, g:col2] = searchpos('-', 'W')
|
||||
if g:lnum2 == 0
|
||||
return "\<Esc>"
|
||||
endif
|
||||
return ":call Select()\<CR>"
|
||||
endfunc
|
||||
func Select()
|
||||
call cursor([g:lnum1, g:col1])
|
||||
exe "normal! 1 ". (strlen(g:m) == 2 ? 'v' : g:m[2])
|
||||
call cursor([g:lnum2, g:col2])
|
||||
execute "normal! \<BS>"
|
||||
endfunc
|
||||
new
|
||||
onoremap <buffer><expr> i- GetCommand()
|
||||
" 1) default omap mapping
|
||||
%d_
|
||||
call setline(1, ['aaa - bbb', 'x', 'ddd - eee'])
|
||||
call cursor(2, 1)
|
||||
norm di-
|
||||
call assert_equal('no', g:m)
|
||||
call assert_equal(['aaa -- eee'], getline(1, '$'))
|
||||
" 2) forced characterwise operation
|
||||
%d_
|
||||
call setline(1, ['aaa - bbb', 'x', 'ddd - eee'])
|
||||
call cursor(2, 1)
|
||||
norm dvi-
|
||||
call assert_equal('nov', g:m)
|
||||
call assert_equal(['aaa -- eee'], getline(1, '$'))
|
||||
" 3) forced linewise operation
|
||||
%d_
|
||||
call setline(1, ['aaa - bbb', 'x', 'ddd - eee'])
|
||||
call cursor(2, 1)
|
||||
norm dVi-
|
||||
call assert_equal('noV', g:m)
|
||||
call assert_equal([''], getline(1, '$'))
|
||||
" 4) forced blockwise operation
|
||||
%d_
|
||||
call setline(1, ['aaa - bbb', 'x', 'ddd - eee'])
|
||||
call cursor(2, 1)
|
||||
exe "norm d\<C-V>i-"
|
||||
call assert_equal("no\<C-V>", g:m)
|
||||
call assert_equal(['aaabbb', 'x', 'dddeee'], getline(1, '$'))
|
||||
bwipe!
|
||||
delfunc Select
|
||||
delfunc GetCommand
|
||||
endfunc
|
||||
|
Reference in New Issue
Block a user