vim-patch:8.2.3980: if 'operatorfunc' invokes an operator Visual mode is changed

Problem:    If 'operatorfunc' invokes an operator the remembered Visual mode
            may be changed. (Naohiro Ono)
Solution:   Save and restore the information for redoing the Visual area.
            (closes vim/vim#9455)
b3bd1d39e6
This commit is contained in:
zeertzjq
2022-07-05 16:56:26 +08:00
parent dd5fce2f5d
commit 5fcf701ba1
2 changed files with 50 additions and 23 deletions

View File

@@ -406,6 +406,10 @@ func OperatorfuncRedo(_)
let g:opfunc_count = v:count
endfunc
func Underscorize(_)
normal! '[V']r_
endfunc
func Test_normal09c_operatorfunc()
" Test redoing operatorfunc
new
@@ -419,6 +423,16 @@ func Test_normal09c_operatorfunc()
bw!
unlet g:opfunc_count
" Test redoing Visual mode
set operatorfunc=Underscorize
new
call setline(1, ['first', 'first', 'third', 'third', 'second'])
normal! 1GVjr_
normal! 5G.
normal! 3G.
call assert_equal(['_____', '_____', '_____', '_____', '______'], getline(1, '$'))
bwipe!
set operatorfunc=
endfunc