diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-02-09 17:37:03 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-02-09 17:37:03 +0100 |
commit | 190b04cdd936f4696c22466b7f077f9371d96580 (patch) | |
tree | 449a487f34d05e886a1515599c600694e659b9b0 | |
parent | a9f8ffb6345f5b246944c73b9861fcc53eaa5228 (diff) | |
download | vim-190b04cdd936f4696c22466b7f077f9371d96580.zip |
patch 8.0.0319: insert mode completion does not respect 'backspace'
Problem: Insert mode completion does not respect "start" in 'backspace'.
Solution: Check whether backspace can go before where insert started.
(Hirohito Higashi)
-rw-r--r-- | src/edit.c | 7 | ||||
-rw-r--r-- | src/testdir/test_popup.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 27 insertions, 2 deletions
diff --git a/src/edit.c b/src/edit.c index 1164e2032..bc8652ba4 100644 --- a/src/edit.c +++ b/src/edit.c @@ -3467,10 +3467,13 @@ ins_compl_bs(void) mb_ptr_back(line, p); /* Stop completion when the whole word was deleted. For Omni completion - * allow the word to be deleted, we won't match everything. */ + * allow the word to be deleted, we won't match everything. + * Respect the 'backspace' option. */ if ((int)(p - line) - (int)compl_col < 0 || ((int)(p - line) - (int)compl_col == 0 - && ctrl_x_mode != CTRL_X_OMNI) || ctrl_x_mode == CTRL_X_EVAL) + && ctrl_x_mode != CTRL_X_OMNI) || ctrl_x_mode == CTRL_X_EVAL + || (!can_bs(BS_START) && (int)(p - line) - (int)compl_col + - compl_length < 0)) return K_BS; /* Deleted more than what was used to find matches or didn't finish diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim index efbb9185d..f4ce064d7 100644 --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -511,4 +511,24 @@ func Test_completion_clear_candidate_list() bw! endfunc +func Test_completion_respect_bs_option() + new + let li = ["aaa", "aaa12345", "aaaabcdef", "aaaABC"] + + set bs=indent,eol + call setline(1, li) + 1 + call feedkeys("A\<C-X>\<C-N>\<C-P>\<BS>\<BS>\<BS>\<Esc>", "tx") + call assert_equal('aaa', getline(1)) + + %d + set bs=indent,eol,start + call setline(1, li) + 1 + call feedkeys("A\<C-X>\<C-N>\<C-P>\<BS>\<BS>\<BS>\<Esc>", "tx") + call assert_equal('', getline(1)) + + bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 1448e981d..09680b9bc 100644 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 319, +/**/ 318, /**/ 317, |