19aa15691SBram Moolenaar" Tests for 'virtualedit'. 29aa15691SBram Moolenaar 39aa15691SBram Moolenaarfunc Test_yank_move_change() 4d41babefSBram Moolenaar new 59aa15691SBram Moolenaar call setline(1, [ 69aa15691SBram Moolenaar \ "func foo() error {", 79aa15691SBram Moolenaar \ "\tif n, err := bar();", 89aa15691SBram Moolenaar \ "\terr != nil {", 99aa15691SBram Moolenaar \ "\t\treturn err", 109aa15691SBram Moolenaar \ "\t}", 119aa15691SBram Moolenaar \ "\tn = n * n", 129aa15691SBram Moolenaar \ ]) 139aa15691SBram Moolenaar set virtualedit=all 149aa15691SBram Moolenaar set ts=4 159aa15691SBram Moolenaar function! MoveSelectionDown(count) abort 169aa15691SBram Moolenaar normal! m` 179aa15691SBram Moolenaar silent! exe "'<,'>move'>+".a:count 189aa15691SBram Moolenaar norm! `` 199aa15691SBram Moolenaar endfunction 209aa15691SBram Moolenaar 219aa15691SBram Moolenaar xmap ]e :<C-U>call MoveSelectionDown(v:count1)<CR> 229aa15691SBram Moolenaar 2 239aa15691SBram Moolenaar normal 2gg 249aa15691SBram Moolenaar normal J 259aa15691SBram Moolenaar normal jVj 269aa15691SBram Moolenaar normal ]e 279aa15691SBram Moolenaar normal ce 289aa15691SBram Moolenaar bwipe! 299aa15691SBram Moolenaar set virtualedit= 309aa15691SBram Moolenaar set ts=8 319aa15691SBram Moolenaarendfunc 32d41babefSBram Moolenaar 33d41babefSBram Moolenaarfunc Test_paste_end_of_line() 34d41babefSBram Moolenaar new 35d41babefSBram Moolenaar set virtualedit=all 36d41babefSBram Moolenaar call setline(1, ['456', '123']) 37d41babefSBram Moolenaar normal! gg0"ay$ 38d41babefSBram Moolenaar exe "normal! 2G$lllA\<C-O>:normal! \"agP\r" 39d41babefSBram Moolenaar call assert_equal('123456', getline(2)) 40d41babefSBram Moolenaar 41d41babefSBram Moolenaar bwipe! 42d41babefSBram Moolenaar set virtualedit= 43d41babefSBram Moolenaarendfunc 44db0eedecSBram Moolenaar 45630afe88SBram Moolenaarfunc Test_replace_end_of_line() 46630afe88SBram Moolenaar new 47630afe88SBram Moolenaar set virtualedit=all 48630afe88SBram Moolenaar call setline(1, range(20)) 49630afe88SBram Moolenaar exe "normal! gg2jv10lr-" 50630afe88SBram Moolenaar call assert_equal(["1", "-----------", "3"], getline(2,4)) 51630afe88SBram Moolenaar call setline(1, range(20)) 52630afe88SBram Moolenaar exe "normal! gg2jv10lr\<c-k>hh" 53630afe88SBram Moolenaar call assert_equal(["1", "───────────", "3"], getline(2,4)) 54630afe88SBram Moolenaar 55630afe88SBram Moolenaar bwipe! 56630afe88SBram Moolenaar set virtualedit= 57630afe88SBram Moolenaarendfunc 58630afe88SBram Moolenaar 59db0eedecSBram Moolenaarfunc Test_edit_CTRL_G() 60db0eedecSBram Moolenaar new 61db0eedecSBram Moolenaar set virtualedit=insert 62db0eedecSBram Moolenaar call setline(1, ['123', '1', '12']) 63db0eedecSBram Moolenaar exe "normal! ggA\<c-g>jx\<c-g>jx" 64db0eedecSBram Moolenaar call assert_equal(['123', '1 x', '12 x'], getline(1,'$')) 65db0eedecSBram Moolenaar 66db0eedecSBram Moolenaar set virtualedit=all 67db0eedecSBram Moolenaar %d_ 68db0eedecSBram Moolenaar call setline(1, ['1', '12']) 69db0eedecSBram Moolenaar exe "normal! ggllix\<c-g>jx" 70db0eedecSBram Moolenaar call assert_equal(['1 x', '12x'], getline(1,'$')) 71db0eedecSBram Moolenaar 72db0eedecSBram Moolenaar 73db0eedecSBram Moolenaar bwipe! 74db0eedecSBram Moolenaar set virtualedit= 75db0eedecSBram Moolenaarendfunc 7677ccc003SBram Moolenaar 7777ccc003SBram Moolenaarfunc Test_edit_change() 7877ccc003SBram Moolenaar new 7977ccc003SBram Moolenaar set virtualedit=all 8077ccc003SBram Moolenaar call setline(1, "\t⒌") 8177ccc003SBram Moolenaar normal Cx 8277ccc003SBram Moolenaar call assert_equal('x', getline(1)) 833e72dcadSBram Moolenaar " Do a visual block change 843e72dcadSBram Moolenaar call setline(1, ['a', 'b', 'c']) 853e72dcadSBram Moolenaar exe "normal gg3l\<C-V>2jcx" 863e72dcadSBram Moolenaar call assert_equal(['a x', 'b x', 'c x'], getline(1, '$')) 8777ccc003SBram Moolenaar bwipe! 886f1f0ca3SBram Moolenaar set virtualedit= 896f1f0ca3SBram Moolenaarendfunc 906f1f0ca3SBram Moolenaar 9154c8d229SBram Moolenaar" Tests for pasting at the beginning, end and middle of a tab character 9254c8d229SBram Moolenaar" in virtual edit mode. 936f1f0ca3SBram Moolenaarfunc Test_paste_in_tab() 946f1f0ca3SBram Moolenaar new 9554c8d229SBram Moolenaar call append(0, '') 966f1f0ca3SBram Moolenaar set virtualedit=all 9754c8d229SBram Moolenaar 9854c8d229SBram Moolenaar " Tests for pasting a register with characterwise mode type 9954c8d229SBram Moolenaar call setreg('"', 'xyz', 'c') 10054c8d229SBram Moolenaar 10154c8d229SBram Moolenaar " paste (p) unnamed register at the beginning of a tab 1026f1f0ca3SBram Moolenaar call setline(1, "a\tb") 10354c8d229SBram Moolenaar call cursor(1, 2, 0) 10454c8d229SBram Moolenaar normal p 10554c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 10654c8d229SBram Moolenaar 10754c8d229SBram Moolenaar " paste (P) unnamed register at the beginning of a tab 10854c8d229SBram Moolenaar call setline(1, "a\tb") 10954c8d229SBram Moolenaar call cursor(1, 2, 0) 1106f1f0ca3SBram Moolenaar normal P 1116f1f0ca3SBram Moolenaar call assert_equal("axyz\tb", getline(1)) 1126f1f0ca3SBram Moolenaar 11354c8d229SBram Moolenaar " paste (p) unnamed register at the end of a tab 1146f1f0ca3SBram Moolenaar call setline(1, "a\tb") 1156f1f0ca3SBram Moolenaar call cursor(1, 2, 6) 1166f1f0ca3SBram Moolenaar normal p 1176f1f0ca3SBram Moolenaar call assert_equal("a\txyzb", getline(1)) 11854c8d229SBram Moolenaar 11954c8d229SBram Moolenaar " paste (P) unnamed register at the end of a tab 1206f1f0ca3SBram Moolenaar call setline(1, "a\tb") 1216f1f0ca3SBram Moolenaar call cursor(1, 2, 6) 1226f1f0ca3SBram Moolenaar normal P 12354c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 1246f1f0ca3SBram Moolenaar 12554c8d229SBram Moolenaar " Tests for pasting a register with blockwise mode type 12654c8d229SBram Moolenaar call setreg('"', 'xyz', 'b') 12754c8d229SBram Moolenaar 12854c8d229SBram Moolenaar " paste (p) unnamed register at the beginning of a tab 12954c8d229SBram Moolenaar call setline(1, "a\tb") 13054c8d229SBram Moolenaar call cursor(1, 2, 0) 13154c8d229SBram Moolenaar normal p 13254c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 13354c8d229SBram Moolenaar 13454c8d229SBram Moolenaar " paste (P) unnamed register at the beginning of a tab 13554c8d229SBram Moolenaar call setline(1, "a\tb") 13654c8d229SBram Moolenaar call cursor(1, 2, 0) 13754c8d229SBram Moolenaar normal P 13854c8d229SBram Moolenaar call assert_equal("axyz\tb", getline(1)) 13954c8d229SBram Moolenaar 14054c8d229SBram Moolenaar " paste (p) unnamed register at the end of a tab 14154c8d229SBram Moolenaar call setline(1, "a\tb") 14254c8d229SBram Moolenaar call cursor(1, 2, 6) 14354c8d229SBram Moolenaar normal p 14454c8d229SBram Moolenaar call assert_equal("a\txyzb", getline(1)) 14554c8d229SBram Moolenaar 14654c8d229SBram Moolenaar " paste (P) unnamed register at the end of a tab 14754c8d229SBram Moolenaar call setline(1, "a\tb") 14854c8d229SBram Moolenaar call cursor(1, 2, 6) 14954c8d229SBram Moolenaar normal P 15054c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 15154c8d229SBram Moolenaar 15254c8d229SBram Moolenaar " Tests for pasting with gp and gP in virtual edit mode 15354c8d229SBram Moolenaar 15454c8d229SBram Moolenaar " paste (gp) unnamed register at the beginning of a tab 15554c8d229SBram Moolenaar call setline(1, "a\tb") 15654c8d229SBram Moolenaar call cursor(1, 2, 0) 15754c8d229SBram Moolenaar normal gp 15854c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 15954c8d229SBram Moolenaar call assert_equal([0, 1, 12, 0, 12], getcurpos()) 16054c8d229SBram Moolenaar 16154c8d229SBram Moolenaar " paste (gP) unnamed register at the beginning of a tab 16254c8d229SBram Moolenaar call setline(1, "a\tb") 16354c8d229SBram Moolenaar call cursor(1, 2, 0) 16454c8d229SBram Moolenaar normal gP 16554c8d229SBram Moolenaar call assert_equal("axyz\tb", getline(1)) 16654c8d229SBram Moolenaar call assert_equal([0, 1, 5, 0, 5], getcurpos()) 16754c8d229SBram Moolenaar 16854c8d229SBram Moolenaar " paste (gp) unnamed register at the end of a tab 1696f1f0ca3SBram Moolenaar call setline(1, "a\tb") 1706f1f0ca3SBram Moolenaar call cursor(1, 2, 6) 1716f1f0ca3SBram Moolenaar normal gp 1726f1f0ca3SBram Moolenaar call assert_equal("a\txyzb", getline(1)) 1736f1f0ca3SBram Moolenaar call assert_equal([0, 1, 6, 0, 12], getcurpos()) 17454c8d229SBram Moolenaar 17554c8d229SBram Moolenaar " paste (gP) unnamed register at the end of a tab 1766f1f0ca3SBram Moolenaar call setline(1, "a\tb") 1776f1f0ca3SBram Moolenaar call cursor(1, 2, 6) 1786f1f0ca3SBram Moolenaar normal gP 17954c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 1806f1f0ca3SBram Moolenaar call assert_equal([0, 1, 12, 0, 12], getcurpos()) 1816f1f0ca3SBram Moolenaar 18254c8d229SBram Moolenaar " Tests for pasting a named register 18354c8d229SBram Moolenaar let @r = 'xyz' 18454c8d229SBram Moolenaar 18554c8d229SBram Moolenaar " paste (gp) named register in the middle of a tab 18654c8d229SBram Moolenaar call setline(1, "a\tb") 18754c8d229SBram Moolenaar call cursor(1, 2, 2) 18854c8d229SBram Moolenaar normal "rgp 18954c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 19054c8d229SBram Moolenaar call assert_equal([0, 1, 8, 0, 8], getcurpos()) 19154c8d229SBram Moolenaar 19254c8d229SBram Moolenaar " paste (gP) named register in the middle of a tab 19354c8d229SBram Moolenaar call setline(1, "a\tb") 19454c8d229SBram Moolenaar call cursor(1, 2, 2) 19554c8d229SBram Moolenaar normal "rgP 19654c8d229SBram Moolenaar call assert_equal('a xyz b', getline(1)) 19754c8d229SBram Moolenaar call assert_equal([0, 1, 7, 0, 7], getcurpos()) 19854c8d229SBram Moolenaar 1996f1f0ca3SBram Moolenaar bwipe! 2006f1f0ca3SBram Moolenaar set virtualedit= 20177ccc003SBram Moolenaarendfunc 20254c8d229SBram Moolenaar 20354c8d229SBram Moolenaar" Test for yanking a few spaces within a tab to a register 20454c8d229SBram Moolenaarfunc Test_yank_in_tab() 20554c8d229SBram Moolenaar new 20654c8d229SBram Moolenaar let @r = '' 20754c8d229SBram Moolenaar call setline(1, "a\tb") 20854c8d229SBram Moolenaar set virtualedit=all 20954c8d229SBram Moolenaar call cursor(1, 2, 2) 21054c8d229SBram Moolenaar normal "ry5l 21154c8d229SBram Moolenaar call assert_equal(' ', @r) 21254c8d229SBram Moolenaar 21354c8d229SBram Moolenaar bwipe! 21454c8d229SBram Moolenaar set virtualedit= 21554c8d229SBram Moolenaarendfunc 21654c8d229SBram Moolenaar 217079119baSBram Moolenaar" Insert "keyword keyw", ESC, C CTRL-N, shows "keyword ykeyword". 218079119baSBram Moolenaar" Repeating CTRL-N fixes it. (Mary Ellen Foster) 219079119baSBram Moolenaarfunc Test_ve_completion() 220079119baSBram Moolenaar new 221079119baSBram Moolenaar set completeopt&vim 222079119baSBram Moolenaar set virtualedit=all 223079119baSBram Moolenaar exe "normal ikeyword keyw\<Esc>C\<C-N>" 224079119baSBram Moolenaar call assert_equal('keyword keyword', getline(1)) 225079119baSBram Moolenaar bwipe! 226079119baSBram Moolenaar set virtualedit= 227079119baSBram Moolenaarendfunc 228079119baSBram Moolenaar 229079119baSBram Moolenaar" Using "C" then then <CR> moves the last remaining character to the next 230079119baSBram Moolenaar" line. (Mary Ellen Foster) 231079119baSBram Moolenaarfunc Test_ve_del_to_eol() 232079119baSBram Moolenaar new 233079119baSBram Moolenaar set virtualedit=all 234079119baSBram Moolenaar call append(0, 'all your base are belong to us') 235079119baSBram Moolenaar call search('are', 'w') 236079119baSBram Moolenaar exe "normal C\<CR>are belong to vim" 237079119baSBram Moolenaar call assert_equal(['all your base ', 'are belong to vim'], getline(1, 2)) 238079119baSBram Moolenaar bwipe! 239079119baSBram Moolenaar set virtualedit= 240079119baSBram Moolenaarendfunc 241079119baSBram Moolenaar 242079119baSBram Moolenaar" When past the end of a line that ends in a single character "b" skips 243079119baSBram Moolenaar" that word. 244079119baSBram Moolenaarfunc Test_ve_b_past_eol() 245079119baSBram Moolenaar new 246079119baSBram Moolenaar set virtualedit=all 247079119baSBram Moolenaar call append(0, '1 2 3 4 5 6') 248079119baSBram Moolenaar normal gg^$15lbC7 249079119baSBram Moolenaar call assert_equal('1 2 3 4 5 7', getline(1)) 250079119baSBram Moolenaar bwipe! 251079119baSBram Moolenaar set virtualedit= 252079119baSBram Moolenaarendfunc 253079119baSBram Moolenaar 254079119baSBram Moolenaar" Make sure 'i', 'C', 'a', 'A' and 'D' works 255079119baSBram Moolenaarfunc Test_ve_ins_del() 256079119baSBram Moolenaar new 257079119baSBram Moolenaar set virtualedit=all 258079119baSBram Moolenaar call append(0, ["'i'", "'C'", "'a'", "'A'", "'D'"]) 259079119baSBram Moolenaar call cursor(1, 1) 260079119baSBram Moolenaar normal $4lix 261079119baSBram Moolenaar call assert_equal("'i' x", getline(1)) 262079119baSBram Moolenaar call cursor(2, 1) 263079119baSBram Moolenaar normal $4lCx 264079119baSBram Moolenaar call assert_equal("'C' x", getline(2)) 265079119baSBram Moolenaar call cursor(3, 1) 266079119baSBram Moolenaar normal $4lax 267079119baSBram Moolenaar call assert_equal("'a' x", getline(3)) 268079119baSBram Moolenaar call cursor(4, 1) 269079119baSBram Moolenaar normal $4lAx 270079119baSBram Moolenaar call assert_equal("'A'x", getline(4)) 271079119baSBram Moolenaar call cursor(5, 1) 272079119baSBram Moolenaar normal $4lDix 273079119baSBram Moolenaar call assert_equal("'D' x", getline(5)) 274079119baSBram Moolenaar bwipe! 275079119baSBram Moolenaar set virtualedit= 276079119baSBram Moolenaarendfunc 277079119baSBram Moolenaar 278079119baSBram Moolenaar" Test for yank bug reported by Mark Waggoner. 279079119baSBram Moolenaarfunc Test_yank_block() 280079119baSBram Moolenaar new 281079119baSBram Moolenaar set virtualedit=block 282079119baSBram Moolenaar call append(0, repeat(['this is a test'], 3)) 283079119baSBram Moolenaar exe "normal gg^2w\<C-V>3jy" 284079119baSBram Moolenaar call assert_equal("a\na\na\n ", @") 285079119baSBram Moolenaar bwipe! 286079119baSBram Moolenaar set virtualedit= 287079119baSBram Moolenaarendfunc 288079119baSBram Moolenaar 289079119baSBram Moolenaar" Test "r" beyond the end of the line 290079119baSBram Moolenaarfunc Test_replace_after_eol() 291079119baSBram Moolenaar new 292079119baSBram Moolenaar set virtualedit=all 293079119baSBram Moolenaar call append(0, '"r"') 294079119baSBram Moolenaar normal gg$5lrxa 295079119baSBram Moolenaar call assert_equal('"r" x', getline(1)) 2963e72dcadSBram Moolenaar " visual block replace 2973e72dcadSBram Moolenaar %d _ 2983e72dcadSBram Moolenaar call setline(1, ['a', '', 'b']) 2993e72dcadSBram Moolenaar exe "normal 2l\<C-V>2jrx" 3003e72dcadSBram Moolenaar call assert_equal(['a x', ' x', 'b x'], getline(1, '$')) 3013e72dcadSBram Moolenaar " visual characterwise selection replace after eol 3023e72dcadSBram Moolenaar %d _ 3033e72dcadSBram Moolenaar call setline(1, 'a') 3043e72dcadSBram Moolenaar normal 4lv2lrx 3053e72dcadSBram Moolenaar call assert_equal('a xxx', getline(1)) 306079119baSBram Moolenaar bwipe! 307079119baSBram Moolenaar set virtualedit= 308079119baSBram Moolenaarendfunc 309079119baSBram Moolenaar 310079119baSBram Moolenaar" Test "r" on a tab 311079119baSBram Moolenaar" Note that for this test, 'ts' must be 8 (the default). 312079119baSBram Moolenaarfunc Test_replace_on_tab() 313079119baSBram Moolenaar new 314079119baSBram Moolenaar set virtualedit=all 315079119baSBram Moolenaar call append(0, "'r'\t") 316079119baSBram Moolenaar normal gg^5lrxAy 317079119baSBram Moolenaar call assert_equal("'r' x y", getline(1)) 318f5f1e10dSBram Moolenaar call setline(1, 'aaaaaaaaaaaa') 319f5f1e10dSBram Moolenaar exe "normal! gg2lgR\<Tab>" 320f5f1e10dSBram Moolenaar call assert_equal("aa\taaaa", getline(1)) 321079119baSBram Moolenaar bwipe! 322079119baSBram Moolenaar set virtualedit= 323079119baSBram Moolenaarendfunc 324079119baSBram Moolenaar 325079119baSBram Moolenaar" Test to make sure 'x' can delete control characters 326079119baSBram Moolenaarfunc Test_ve_del_ctrl_chars() 327079119baSBram Moolenaar new 328079119baSBram Moolenaar set virtualedit=all 329079119baSBram Moolenaar call append(0, "a\<C-V>b\<CR>sd") 330079119baSBram Moolenaar set display=uhex 331079119baSBram Moolenaar normal gg^xxxxxxi[text] 332079119baSBram Moolenaar set display= 333079119baSBram Moolenaar call assert_equal('[text]', getline(1)) 334079119baSBram Moolenaar bwipe! 335079119baSBram Moolenaar set virtualedit= 336079119baSBram Moolenaarendfunc 337079119baSBram Moolenaar 338079119baSBram Moolenaar" Test for ^Y/^E due to bad w_virtcol value, reported by 339079119baSBram Moolenaar" Roy <[email protected]>. 340079119baSBram Moolenaarfunc Test_ins_copy_char() 341079119baSBram Moolenaar new 342079119baSBram Moolenaar set virtualedit=all 343079119baSBram Moolenaar call append(0, 'abcv8efi.him2kl') 344079119baSBram Moolenaar exe "normal gg^O\<Esc>3li\<C-E>\<Esc>4li\<C-E>\<Esc>4li\<C-E> <--" 345079119baSBram Moolenaar exe "normal j^o\<Esc>4li\<C-Y>\<Esc>4li\<C-Y>\<Esc>4li\<C-Y> <--" 346079119baSBram Moolenaar call assert_equal(' v i m <--', getline(1)) 347079119baSBram Moolenaar call assert_equal(' 8 . 2 <--', getline(3)) 348079119baSBram Moolenaar bwipe! 349079119baSBram Moolenaar set virtualedit= 350079119baSBram Moolenaarendfunc 351079119baSBram Moolenaar 352079119baSBram Moolenaar" Test for yanking and pasting using the small delete register 353079119baSBram Moolenaarfunc Test_yank_paste_small_del_reg() 354079119baSBram Moolenaar new 355079119baSBram Moolenaar set virtualedit=all 356079119baSBram Moolenaar call append(0, "foo, bar") 357079119baSBram Moolenaar normal ggdewve"-p 358079119baSBram Moolenaar call assert_equal(', foo', getline(1)) 359079119baSBram Moolenaar bwipe! 360079119baSBram Moolenaar set virtualedit= 361079119baSBram Moolenaarendfunc 362079119baSBram Moolenaar 363004a6781SBram Moolenaar" Test for delete that breaks a tab into spaces 364004a6781SBram Moolenaarfunc Test_delete_break_tab() 365004a6781SBram Moolenaar new 366004a6781SBram Moolenaar call setline(1, "one\ttwo") 367004a6781SBram Moolenaar set virtualedit=all 368004a6781SBram Moolenaar normal v3ld 369004a6781SBram Moolenaar call assert_equal(' two', getline(1)) 370004a6781SBram Moolenaar set virtualedit& 371004a6781SBram Moolenaar close! 372004a6781SBram Moolenaarendfunc 373004a6781SBram Moolenaar 374845e0ee5SBram Moolenaar" Test for using <BS>, <C-W> and <C-U> in virtual edit mode 375845e0ee5SBram Moolenaar" to erase character, word and line. 376845e0ee5SBram Moolenaarfunc Test_ve_backspace() 377845e0ee5SBram Moolenaar new 378845e0ee5SBram Moolenaar call setline(1, 'sample') 379845e0ee5SBram Moolenaar set virtualedit=all 380845e0ee5SBram Moolenaar set backspace=indent,eol,start 381845e0ee5SBram Moolenaar exe "normal 15|i\<BS>\<BS>" 382845e0ee5SBram Moolenaar call assert_equal([0, 1, 7, 5], getpos('.')) 383845e0ee5SBram Moolenaar exe "normal 15|i\<C-W>" 384845e0ee5SBram Moolenaar call assert_equal([0, 1, 6, 0], getpos('.')) 385845e0ee5SBram Moolenaar exe "normal 15|i\<C-U>" 386845e0ee5SBram Moolenaar call assert_equal([0, 1, 1, 0], getpos('.')) 387845e0ee5SBram Moolenaar set backspace& 388845e0ee5SBram Moolenaar set virtualedit& 389845e0ee5SBram Moolenaar close! 390845e0ee5SBram Moolenaarendfunc 391845e0ee5SBram Moolenaar 3923e72dcadSBram Moolenaar" Test for delete (x) on EOL character and after EOL 3933e72dcadSBram Moolenaarfunc Test_delete_past_eol() 3943e72dcadSBram Moolenaar new 3953e72dcadSBram Moolenaar call setline(1, "ab") 3963e72dcadSBram Moolenaar set virtualedit=all 3973e72dcadSBram Moolenaar exe "normal 2lx" 3983e72dcadSBram Moolenaar call assert_equal('ab', getline(1)) 3993e72dcadSBram Moolenaar exe "normal 10lx" 4003e72dcadSBram Moolenaar call assert_equal('ab', getline(1)) 4013e72dcadSBram Moolenaar set virtualedit& 4023e72dcadSBram Moolenaar bw! 4033e72dcadSBram Moolenaarendfunc 4043e72dcadSBram Moolenaar 40553ba05b0SGary Johnson" After calling s:TryVirtualeditReplace(), line 1 will contain one of these 40653ba05b0SGary Johnson" two strings, depending on whether virtual editing is on or off. 40753ba05b0SGary Johnsonlet s:result_ve_on = 'a x' 40853ba05b0SGary Johnsonlet s:result_ve_off = 'x' 40953ba05b0SGary Johnson 410*51ad850fSGary Johnson" Utility function for Test_global_local_virtualedit() 41153ba05b0SGary Johnsonfunc s:TryVirtualeditReplace() 41253ba05b0SGary Johnson call setline(1, 'a') 41353ba05b0SGary Johnson normal gg7l 41453ba05b0SGary Johnson normal rx 41553ba05b0SGary Johnsonendfunc 41653ba05b0SGary Johnson 41753ba05b0SGary Johnson" Test for :set and :setlocal 418*51ad850fSGary Johnsonfunc Test_global_local_virtualedit() 41953ba05b0SGary Johnson new 42053ba05b0SGary Johnson 42153ba05b0SGary Johnson " Verify that 'virtualedit' is initialized to empty, can be set globally to 42253ba05b0SGary Johnson " all and to empty, and can be set locally to all and to empty. 42353ba05b0SGary Johnson call s:TryVirtualeditReplace() 42453ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 42553ba05b0SGary Johnson set ve=all 42653ba05b0SGary Johnson call s:TryVirtualeditReplace() 42753ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 42853ba05b0SGary Johnson set ve= 42953ba05b0SGary Johnson call s:TryVirtualeditReplace() 43053ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 43153ba05b0SGary Johnson setlocal ve=all 43253ba05b0SGary Johnson call s:TryVirtualeditReplace() 43353ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 43453ba05b0SGary Johnson setlocal ve= 43553ba05b0SGary Johnson call s:TryVirtualeditReplace() 43653ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 43753ba05b0SGary Johnson 438*51ad850fSGary Johnson " Verify that :set affects multiple windows. 439*51ad850fSGary Johnson split 44053ba05b0SGary Johnson set ve=all 44153ba05b0SGary Johnson call s:TryVirtualeditReplace() 44253ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 44353ba05b0SGary Johnson wincmd p 44453ba05b0SGary Johnson call s:TryVirtualeditReplace() 44553ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 44653ba05b0SGary Johnson set ve= 44753ba05b0SGary Johnson wincmd p 44853ba05b0SGary Johnson call s:TryVirtualeditReplace() 44953ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 45053ba05b0SGary Johnson bwipe! 45153ba05b0SGary Johnson 452*51ad850fSGary Johnson " Verify that :setlocal affects only the current window. 45353ba05b0SGary Johnson new 454*51ad850fSGary Johnson split 45553ba05b0SGary Johnson setlocal ve=all 45653ba05b0SGary Johnson call s:TryVirtualeditReplace() 45753ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 458*51ad850fSGary Johnson wincmd p 459*51ad850fSGary Johnson call s:TryVirtualeditReplace() 460*51ad850fSGary Johnson call assert_equal(s:result_ve_off, getline(1)) 46153ba05b0SGary Johnson bwipe! 46253ba05b0SGary Johnson call s:TryVirtualeditReplace() 46353ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 46453ba05b0SGary Johnson 46553ba05b0SGary Johnson " Verify that the buffer 'virtualedit' state follows the global value only 46653ba05b0SGary Johnson " when empty and that "none" works as expected. 46753ba05b0SGary Johnson " 46853ba05b0SGary Johnson " 'virtualedit' State 46953ba05b0SGary Johnson " +--------+--------------------------+ 47053ba05b0SGary Johnson " | Local | Global | 47153ba05b0SGary Johnson " | | | 47253ba05b0SGary Johnson " +--------+--------+--------+--------+ 47353ba05b0SGary Johnson " | | "" | "all" | "none" | 47453ba05b0SGary Johnson " +--------+--------+--------+--------+ 47553ba05b0SGary Johnson " | "" | off | on | off | 47653ba05b0SGary Johnson " | "all" | on | on | on | 47753ba05b0SGary Johnson " | "none" | off | off | off | 47853ba05b0SGary Johnson " +--------+--------+--------+--------+ 47953ba05b0SGary Johnson new 48053ba05b0SGary Johnson 48153ba05b0SGary Johnson setglobal ve= 48253ba05b0SGary Johnson setlocal ve= 48353ba05b0SGary Johnson call s:TryVirtualeditReplace() 48453ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 48553ba05b0SGary Johnson setlocal ve=all 48653ba05b0SGary Johnson call s:TryVirtualeditReplace() 48753ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 48853ba05b0SGary Johnson setlocal ve=none 48953ba05b0SGary Johnson call s:TryVirtualeditReplace() 49053ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 49153ba05b0SGary Johnson 49253ba05b0SGary Johnson setglobal ve=all 49353ba05b0SGary Johnson setlocal ve= 49453ba05b0SGary Johnson call s:TryVirtualeditReplace() 49553ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 49653ba05b0SGary Johnson setlocal ve=all 49753ba05b0SGary Johnson call s:TryVirtualeditReplace() 49853ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 49953ba05b0SGary Johnson setlocal ve=none 50053ba05b0SGary Johnson call s:TryVirtualeditReplace() 50153ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 50253ba05b0SGary Johnson setlocal ve=NONE 50353ba05b0SGary Johnson call s:TryVirtualeditReplace() 50453ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 50553ba05b0SGary Johnson 50653ba05b0SGary Johnson setglobal ve=none 50753ba05b0SGary Johnson setlocal ve= 50853ba05b0SGary Johnson call s:TryVirtualeditReplace() 50953ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 51053ba05b0SGary Johnson setlocal ve=all 51153ba05b0SGary Johnson call s:TryVirtualeditReplace() 51253ba05b0SGary Johnson call assert_equal(s:result_ve_on, getline(1)) 51353ba05b0SGary Johnson setlocal ve=none 51453ba05b0SGary Johnson call s:TryVirtualeditReplace() 51553ba05b0SGary Johnson call assert_equal(s:result_ve_off, getline(1)) 51653ba05b0SGary Johnson 51753ba05b0SGary Johnson bwipe! 51853ba05b0SGary Johnson 519*51ad850fSGary Johnson " Verify that the 'virtualedit' state is copied to new windows. 520*51ad850fSGary Johnson new 521*51ad850fSGary Johnson call s:TryVirtualeditReplace() 522*51ad850fSGary Johnson call assert_equal(s:result_ve_off, getline(1)) 523*51ad850fSGary Johnson split 524*51ad850fSGary Johnson setlocal ve=all 525*51ad850fSGary Johnson call s:TryVirtualeditReplace() 526*51ad850fSGary Johnson call assert_equal(s:result_ve_on, getline(1)) 527*51ad850fSGary Johnson split 528*51ad850fSGary Johnson call s:TryVirtualeditReplace() 529*51ad850fSGary Johnson call assert_equal(s:result_ve_on, getline(1)) 530*51ad850fSGary Johnson setlocal ve= 531*51ad850fSGary Johnson split 532*51ad850fSGary Johnson call s:TryVirtualeditReplace() 533*51ad850fSGary Johnson call assert_equal(s:result_ve_off, getline(1)) 534*51ad850fSGary Johnson bwipe! 535*51ad850fSGary Johnson 53653ba05b0SGary Johnson setlocal virtualedit& 53753ba05b0SGary Johnson set virtualedit& 53853ba05b0SGary Johnsonendfunc 53953ba05b0SGary Johnson 54054c8d229SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 541