Test for Visual mode and operators Tests for the two kinds of operations: Those executed with Visual mode followed by an operator and those executed via Operator-pending mode. Also part of the test are mappings, counts, and repetition with the . command. Test cases: - Visual modes (v V CTRL-V) followed by an operator; count; repeating - Visual mode maps; count; repeating - Simple - With an Ex command (custom text object) - Operator-pending mode maps - Simple - With Ex command moving the cursor - With Ex command and Visual selection (custom text object) - Patch 7.3.879: Properly abort Ex command in Operator-pending mode STARTTEST :so small.vim :set belloff=all :set enc=utf-8 nocp viminfo+=nviminfo : :" User functions :function MoveToCap() : call search('\u', 'W') :endfunction :function SelectInCaps() : let [line1, col1] = searchpos('\u', 'bcnW') : let [line2, col2] = searchpos('.\u', 'nW') : call setpos("'<", [0, line1, col1, 0]) : call setpos("'>", [0, line2, col2, 0]) : normal! gv :endfunction : :" Visual modes followed by operator /^apple lvld.l3vd.: /^line 1 Vcnewlinej.j2Vd.: /^xxxx jlc l.l2c----l.: : :" Visual mode maps (movement and text object) :vnoremap W /\u/s-1 :vnoremap iW :call SelectInCaps() /^Kiwi vWcNol.fD2vd.: /^Jambu llviWc-l.l2vdl.: : :" Operator-pending mode maps (movement and text object) :onoremap W /\u/ :onoremap W :call MoveToCap() :onoremap iW :call SelectInCaps() /^Pineapple cW-l.l2.l.: /^Juniper g?\WfD.: /^Lemon yiWPlciWNewfr.: : :" Patch 7.3.879: Properly abort Operator-pending mode for "dv:" etc. /^zzzz dV: dv: :set noma | let v:errmsg = '' d: :set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed' dv:dV::set noma | let v:errmsg = '' d::set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok' : :$put ='' :$put ='characterwise visual mode: replace last line' :$put ='a' :let @" = 'x' :let v:errmsg = '' v$p :$put ='---' :$put ='v:errmsg='.v:errmsg : :$put ='' :$put ='characterwise visual mode: delete middle line' :$put ='a' :$put ='b' :$put ='c' kkv$d :$put ='---' : :$put ='' :$put ='characterwise visual mode: delete middle two line' :$put ='a' :$put ='b' :$put ='c' kkvj$d :$put ='---' : :$put ='' :$put ='characterwise visual mode: delete last line' :$put ='a' :$put ='b' :$put ='c' v$d :$put ='---' : :$put ='' :$put ='characterwise visual mode: delete last two line' :$put ='a' :$put ='b' :$put ='c' kvj$d :$put ='---' : :" Select mode maps :snoremap End> :snoremap Down> :snoremap Del> : :$put ='' :$put ='characterwise select mode: delete middle line' :$put ='a' :$put ='b' :$put ='c' kkgh :$put ='---' : :$put ='' :$put ='characterwise select mode: delete middle two line' :$put ='a' :$put ='b' :$put ='c' kkgh :$put ='---' : :$put ='' :$put ='characterwise select mode: delete last line' :$put ='a' :$put ='b' :$put ='c' gh :$put ='---' : :$put ='' :$put ='characterwise select mode: delete last two line' :$put ='a' :$put ='b' :$put ='c' kgh :$put ='---' : :$put ='' :$put ='linewise select mode: delete middle line' :$put ='a' :$put ='b' :$put ='c' kkgH :$put ='---' : :$put ='' :$put ='linewise select mode: delete middle two line' :$put ='a' :$put ='b' :$put ='c' kkgH :$put ='---' : :$put ='' :$put ='linewise select mode: delete last line' :$put ='a' :$put ='b' :$put ='c' gH :$put ='---' : :$put ='' :$put ='linewise select mode: delete last two line' :$put ='a' :$put ='b' :$put ='c' kgH :$put ='---' : :$put ='' :$put ='v_p: replace last character with line register at middle line' :$put ='aaa' :$put ='bbb' :$put ='ccc' :-2yank k$vp :$put ='---' : :$put ='' :$put ='v_p: replace last character with line register at middle line selecting newline' :$put ='aaa' :$put ='bbb' :$put ='ccc' :-2yank k$v$p :$put ='---' : :$put ='' :$put ='v_p: replace last character with line register at last line' :$put ='aaa' :$put ='bbb' :$put ='ccc' :-2yank $vp :$put ='---' : :$put ='' :$put ='v_p: replace last character with line register at last line selecting newline' :$put ='aaa' :$put ='bbb' :$put ='ccc' :-2yank $v$p :$put ='---' : :$put ='' :$put ='gv in exclusive select mode after operation' :$put ='zzz ' :$put ='äà ' :set selection=exclusive kv3lyjv3lpgvcxxx :$put ='---' : :$put ='' :$put ='gv in exclusive select mode without operation' :$put ='zzz ' :set selection=exclusive 0v3lgvcxxx :$put ='---' :/^start:/+2,$w! test.out :q! ENDTEST start: apple banana cherry line 1 line 1 line 2 line 2 line 3 line 3 line 4 line 4 line 5 line 5 line 6 line 6 xxxxxxxxxxxxx xxxxxxxxxxxxx xxxxxxxxxxxxx xxxxxxxxxxxxx KiwiRaspberryDateWatermelonPeach JambuRambutanBananaTangerineMango PineappleQuinceLoganberryOrangeGrapefruitKiwiZ JuniperDurianZ LemonNectarineZ zzzz zzzz