diff options
-rw-r--r-- | src/nvim/screen.c | 4 | ||||
-rw-r--r-- | src/nvim/testdir/test_vartabs.vim | 25 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index db1c338fe9..2b664cf5b0 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -3441,8 +3441,8 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, // TODO: is passing p for start of the line OK? n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol, NULL) - 1; if (c == TAB && n_extra + col > grid->Columns) { - n_extra = (int)wp->w_buffer->b_p_ts - - vcol % (int)wp->w_buffer->b_p_ts - 1; + n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts, + wp->w_buffer->b_p_vts_array) - 1; } c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' '; c_final = NUL; diff --git a/src/nvim/testdir/test_vartabs.vim b/src/nvim/testdir/test_vartabs.vim index 85914f6bc3..581ff8b9bb 100644 --- a/src/nvim/testdir/test_vartabs.vim +++ b/src/nvim/testdir/test_vartabs.vim @@ -4,6 +4,11 @@ if !has("vartabs") finish endif +source view_util.vim +function! s:compare_lines(expect, actual) + call assert_equal(join(a:expect, "\n"), join(a:actual, "\n")) +endfunction + func! Test_vartabs() new %d @@ -255,3 +260,23 @@ func! Test_vartabs_breakindent() bwipeout! endfunc + +func! Test_vartabs_linebreak() + if winwidth(0) < 80 + return + endif + new + 70vnew + %d + setl linebreak vartabstop=10,15,20,40 + call setline(1, "\tx\tx\tx\tx") + + let lines = ScreenLines([1, 2], winwidth(0)) + let expect = [' x x x ', + \ ' x '] + call s:compare_lines(expect, lines) + + " cleanup + bw! + bw! +endfunc |