n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
NULL) - 1;
if (c == TAB && n_extra + col > wp->w_width)
-#ifdef FEAT_VARTABS
+# ifdef FEAT_VARTABS
n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts,
- wp->w_buffer->b_p_vts_array) - 1;
-#else
+ wp->w_buffer->b_p_vts_array) - 1;
+# else
n_extra = (int)wp->w_buffer->b_p_ts
- vcol % (int)wp->w_buffer->b_p_ts - 1;
- #endif
+# endif
# ifdef FEAT_MBYTE
c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' ';
p_extra_free = p;
for (i = 0; i < tab_len; i++)
{
+ if (*p == NUL)
+ {
+ tab_len = i;
+ break;
+ }
#ifdef FEAT_MBYTE
mb_char2bytes(lcs_tab2, p);
p += mb_char2len(lcs_tab2);
endfunc
func! Test_vartabs_linebreak()
- if winwidth(0) < 80
+ if winwidth(0) < 40
return
endif
new
- 70vnew
+ 40vnew
%d
- setl linebreak vartabstop=10,15,20,40
+ setl linebreak vartabstop=10,20,30,40
call setline(1, "\tx\tx\tx\tx")
- let lines = ScreenLines([1, 2], winwidth(0))
- let expect = [' x x x ',
- \ ' x ']
+ let expect = [' x ',
+ \ 'x x ',
+ \ 'x ']
+ let lines = ScreenLines([1, 3], winwidth(0))
+ call s:compare_lines(expect, lines)
+ setl list listchars=tab:>-
+ let expect = ['>---------x>------------------ ',
+ \ 'x>------------------x>------------------',
+ \ 'x ']
+ let lines = ScreenLines([1, 3], winwidth(0))
+ call s:compare_lines(expect, lines)
+ setl linebreak vartabstop=40
+ let expect = ['>---------------------------------------',
+ \ 'x>--------------------------------------',
+ \ 'x>--------------------------------------',
+ \ 'x>--------------------------------------',
+ \ 'x ']
+ let lines = ScreenLines([1, 5], winwidth(0))
call s:compare_lines(expect, lines)
" cleanup
bw!
bw!
+ set nolist listchars&vim
endfunc