vim-patch:8.1.0859: handle multibyte "%v" in 'errorformat' #11285

Problem:    "%v" in 'errorformat' does handle multi-byte characters.
Solution:   Handle multi-byte characters. (Yegappan Lakshmanan, closes vim/vim#3700)
c45eb770a5
This commit is contained in:
Jan Edmund Lazo
2019-10-26 01:17:21 -04:00
committed by Justin M. Keyes
parent 99aa166cb1
commit 0b771cd9aa
2 changed files with 59 additions and 21 deletions

View File

@@ -3643,3 +3643,59 @@ func Test_curswant()
call assert_equal(getcurpos()[4], virtcol('.'))
cclose | helpclose
endfunc
" Test for parsing entries using visual screen column
func Test_viscol()
enew
call writefile(["Col1\tCol2\tCol3"], 'Xfile1')
edit Xfile1
" Use byte offset for column number
set efm&
cexpr "Xfile1:1:5:XX\nXfile1:1:9:YY\nXfile1:1:20:ZZ"
call assert_equal([5, 8], [col('.'), virtcol('.')])
cnext
call assert_equal([9, 12], [col('.'), virtcol('.')])
cnext
call assert_equal([14, 20], [col('.'), virtcol('.')])
" Use screen column offset for column number
set efm=%f:%l:%v:%m
cexpr "Xfile1:1:8:XX\nXfile1:1:12:YY\nXfile1:1:20:ZZ"
call assert_equal([5, 8], [col('.'), virtcol('.')])
cnext
call assert_equal([9, 12], [col('.'), virtcol('.')])
cnext
call assert_equal([14, 20], [col('.'), virtcol('.')])
cexpr "Xfile1:1:6:XX\nXfile1:1:15:YY\nXfile1:1:24:ZZ"
call assert_equal([5, 8], [col('.'), virtcol('.')])
cnext
call assert_equal([10, 16], [col('.'), virtcol('.')])
cnext
call assert_equal([14, 20], [col('.'), virtcol('.')])
enew
call writefile(["Col1\täü\töß\tCol4"], 'Xfile1')
" Use byte offset for column number
set efm&
cexpr "Xfile1:1:8:XX\nXfile1:1:11:YY\nXfile1:1:16:ZZ"
call assert_equal([8, 10], [col('.'), virtcol('.')])
cnext
call assert_equal([11, 17], [col('.'), virtcol('.')])
cnext
call assert_equal([16, 25], [col('.'), virtcol('.')])
" Use screen column offset for column number
set efm=%f:%l:%v:%m
cexpr "Xfile1:1:10:XX\nXfile1:1:17:YY\nXfile1:1:25:ZZ"
call assert_equal([8, 10], [col('.'), virtcol('.')])
cnext
call assert_equal([11, 17], [col('.'), virtcol('.')])
cnext
call assert_equal([16, 25], [col('.'), virtcol('.')])
enew | only
set efm&
call delete('Xfile1')
endfunc