From 4303399c10b7106ccf350e8a419fe3c15b81c8e0 Mon Sep 17 00:00:00 2001 From: Shougo Matsushita Date: Sat, 4 Mar 2017 12:24:49 +0900 Subject: [PATCH 1/2] vim-patch:8.0.0319 Problem: Insert mode completion does not respect "start" in 'backspace'. Solution: Check whether backspace can go before where insert started. (Hirohito Higashi) https://github.com/vim/vim/commit/190b04cdd936f4696c22466b7f077f9371d96580 --- src/nvim/edit.c | 9 ++++++--- src/nvim/testdir/test_popup.vim | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/nvim/edit.c b/src/nvim/edit.c index edfd7e7460..ccb4455d03 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -2914,11 +2914,14 @@ static int ins_compl_bs(void) p = line + curwin->w_cursor.col; 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. */ + // Stop completion when the whole word was deleted. For Omni completion + // 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; } diff --git a/src/nvim/testdir/test_popup.vim b/src/nvim/testdir/test_popup.vim index edc6336aa7..259e0149af 100644 --- a/src/nvim/testdir/test_popup.vim +++ b/src/nvim/testdir/test_popup.vim @@ -482,6 +482,26 @@ func Test_completion_ctrl_e_without_autowrap() q! 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\\\\\\\", "tx") + call assert_equal('aaa', getline(1)) + + %d + set bs=indent,eol,start + call setline(1, li) + 1 + call feedkeys("A\\\\\\\", "tx") + call assert_equal('', getline(1)) + + bw! +endfunc + func CompleteUndo() abort call complete(1, g:months) return '' From cf0b344df14aa5de16ab0a7081ef20d44360c45e Mon Sep 17 00:00:00 2001 From: Shougo Matsushita Date: Sat, 4 Mar 2017 12:35:40 +0900 Subject: [PATCH 2/2] vim-patch:8.0.0347 Problem: When using CTRL-X CTRL-U inside a comment, the use of the comment leader may not work. (Klement) Solution: Save and restore did_ai. (Christian Brabandt, closes vim/vim#1494) https://github.com/vim/vim/commit/d099e033703ce0772f152b8df8a763f0b65303ee --- src/nvim/edit.c | 3 +++ src/nvim/testdir/test_popup.vim | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/nvim/edit.c b/src/nvim/edit.c index ccb4455d03..aa029c38a2 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -4344,6 +4344,7 @@ static int ins_complete(int c, bool enable_pum) int save_w_wrow; int save_w_leftcol; int insert_match; + int save_did_ai = did_ai; compl_direction = ins_compl_key2dir(c); insert_match = ins_compl_use_match(c); @@ -4559,6 +4560,8 @@ static int ins_complete(int c, bool enable_pum) if (*funcname == NUL) { EMSG2(_(e_notset), ctrl_x_mode == CTRL_X_FUNCTION ? "completefunc" : "omnifunc"); + // restore did_ai, so that adding comment leader works + did_ai = save_did_ai; return FAIL; } diff --git a/src/nvim/testdir/test_popup.vim b/src/nvim/testdir/test_popup.vim index 259e0149af..fd0f3c0d2d 100644 --- a/src/nvim/testdir/test_popup.vim +++ b/src/nvim/testdir/test_popup.vim @@ -522,4 +522,23 @@ func Test_completion_can_undo() iunmap endfunc +func Test_completion_comment_formatting() + new + setl formatoptions=tcqro + call feedkeys("o/*\\/\", 'tx') + call assert_equal(['', '/*', ' *', ' */'], getline(1,4)) + %d + call feedkeys("o/*\foobar\/\", 'tx') + call assert_equal(['', '/*', ' * foobar', ' */'], getline(1,4)) + %d + try + call feedkeys("o/*\\\\/\", 'tx') + call assert_false(1, 'completefunc not set, should have failed') + catch + call assert_exception('E764:') + endtry + call assert_equal(['', '/*', ' *', ' */'], getline(1,4)) + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab