diff options
-rw-r--r-- | src/nvim/edit.c | 6 | ||||
-rw-r--r-- | src/nvim/testdir/test_tab.vim | 11 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 31bb00a746..90b5cfd8aa 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -8189,6 +8189,7 @@ static bool ins_bs(int c, int mode, int *inserted_space_p) && (*(get_cursor_pos_ptr() - 1) == TAB || (*(get_cursor_pos_ptr() - 1) == ' ' && (!*inserted_space_p || arrow_used)))))) { + int ts; colnr_T vcol; colnr_T want_vcol; colnr_T start_vcol; @@ -8203,7 +8204,8 @@ static bool ins_bs(int c, int mode, int *inserted_space_p) getvcol(curwin, &curwin->w_cursor, NULL, NULL, &want_vcol); inc_cursor(); if (p_sta && in_indent) { - want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw; + ts = (int)get_sw_value(curbuf); + want_vcol = (want_vcol / ts) * ts; } else { want_vcol = tabstop_start(want_vcol, get_sts_value(), @@ -8700,7 +8702,7 @@ static bool ins_tab(void) AppendToRedobuff("\t"); if (p_sta && ind) { // insert tab in indent, use 'shiftwidth' - temp = (int)curbuf->b_p_sw; + temp = (int)get_sw_value(curbuf); temp -= get_nolist_virtcol() % temp; } else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0) { diff --git a/src/nvim/testdir/test_tab.vim b/src/nvim/testdir/test_tab.vim index 3be30245b9..b8e8dfe062 100644 --- a/src/nvim/testdir/test_tab.vim +++ b/src/nvim/testdir/test_tab.vim @@ -76,6 +76,15 @@ func Test_softtabstop() exe "normal A\<BS>x\<Esc>" call assert_equal("x x", getline(1)) - set sts=0 sw=0 backspace& + call setline(1, 'x') + set sts=-1 sw=0 smarttab + exe "normal I\<Tab>\<Esc>" + call assert_equal("\tx", getline(1)) + + call setline(1, 'x') + exe "normal I\<Tab>\<BS>\<Esc>" + call assert_equal("x", getline(1)) + + set sts=0 sw=0 backspace& nosmarttab bwipe! endfunc |