vim-patch:9.0.1802: Multiline regex with Visual selection fails with virtual text

Problem:  Multiline regex with Visual selection fails when Visual
          selection contains virtual text after last char.
Solution: Only include virtual text after last char when getting full
          line length.

closes: vim/vim#12908

e3daa06be1
This commit is contained in:
zeertzjq 2023-08-28 06:02:11 +08:00
parent c70aa84b2a
commit 062db5c136

View File

@ -1976,91 +1976,100 @@ describe('decorations: inline virtual text', function()
end) end)
it('text is drawn correctly with a wrapping virtual text', function() it('text is drawn correctly with a wrapping virtual text', function()
screen:try_resize(50, 8) screen:try_resize(60, 8)
feed('o<esc>') exec([[
insert([[aaaaaaa call setline(1, ['', 'aaa', '', 'bbbbbb'])
normal gg0
bbbbbbb]]) ]])
meths.buf_set_extmark(0, ns, 0, 0, { virt_text = { { string.rep('X', 51), 'Special' } }, virt_text_pos = 'inline' }) meths.buf_set_extmark(0, ns, 0, 0, { virt_text = { { string.rep('X', 60), 'Special' } }, virt_text_pos = 'inline' })
meths.buf_set_extmark(0, ns, 2, 0, { virt_text = { { string.rep('X', 50), 'Special' } }, virt_text_pos = 'inline' }) meths.buf_set_extmark(0, ns, 2, 0, { virt_text = { { string.rep('X', 61), 'Special' } }, virt_text_pos = 'inline' })
feed('gg0') feed('$')
screen:expect{grid=[[ screen:expect{grid=[[
{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:X} | aaa |
aaaaaaa | {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:X} |
bbbbbbb | bbbbbb |
{1:~ }| {1:~ }|
{1:~ }| {1:~ }|
| |
]]} ]]}
feed('j') feed('j')
screen:expect{grid=[[ screen:expect{grid=[[
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:X} | aa^a |
^aaaaaaa | {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:X} |
bbbbbbb | bbbbbb |
{1:~ }| {1:~ }|
{1:~ }| {1:~ }|
| |
]]} ]]}
feed('j') feed('j')
screen:expect{grid=[[ screen:expect{grid=[[
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:X} | aaa |
aaaaaaa | {10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:X} |
bbbbbbb | bbbbbb |
{1:~ }| {1:~ }|
{1:~ }| {1:~ }|
| |
]]} ]]}
feed('j') feed('j')
screen:expect{grid=[[ screen:expect{grid=[[
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:X} | aaa |
aaaaaaa | {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:X} |
^bbbbbbb | bbbbb^b |
{1:~ }| {1:~ }|
{1:~ }| {1:~ }|
| |
]]} ]]}
feed('0<C-V>2l2k')
feed('ggic')
screen:expect{grid=[[ screen:expect{grid=[[
c{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:XX} | {7:aa}^a |
aaaaaaa | {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}| {10:X} |
bbbbbbb | {7:bbb}bbb |
{1:~ }| {1:~ }|
{1:~ }| {1:~ }|
{8:-- INSERT --} | {8:-- VISUAL BLOCK --} |
]]} ]]}
end) feed([[<Esc>/aaa\n\%V<CR>]])
it('regexp \\%V does not count trailing virtual text', function()
screen:try_resize(50, 4)
meths.buf_set_lines(0, 0, -1, true, {'foofoo', '', 'foofoo'})
meths.buf_set_extmark(0, ns, 1, 0, { virt_text = {{'barbarbar', 'Special'}}, virt_text_pos = 'inline' })
feed([[<C-V>G5l<Esc>/foo\n\%V<CR>]])
screen:expect{grid=[[ screen:expect{grid=[[
foo{12:^foo } | {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:barbarbar} | {12:^aaa } |
foofoo | {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{16:search hit BOTTOM, continuing at TOP} | {10:X} |
bbbbbb |
{1:~ }|
{1:~ }|
{16:search hit BOTTOM, continuing at TOP} |
]]} ]]}
feed([[jIbaz<Esc>/foo\nbaz\%V<CR>]]) feed('3ggic')
screen:expect{grid=[[ screen:expect{grid=[[
foo{12:^foo } | {10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{12:baz}{10:barbarbar} | {12:aaa } |
foofoo | c{10:^XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{16:search hit BOTTOM, continuing at TOP} | {10:XX} |
bbbbbb |
{1:~ }|
{1:~ }|
{8:-- INSERT --} |
]]}
feed([[<Esc>/aaa\nc\%V<CR>]])
screen:expect{grid=[[
{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{12:^aaa } |
{12:c}{10:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}|
{10:XX} |
bbbbbb |
{1:~ }|
{1:~ }|
{16:search hit BOTTOM, continuing at TOP} |
]]} ]]}
end) end)