Mercurial > vim
changeset 10904:c68775848f5f v8.0.0341
patch 8.0.0341: undo does not work properly when using completion
commit https://github.com/vim/vim/commit/d56a79d3396cf70861b7f739a3c400db91ce7b70
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Feb 19 15:26:18 2017 +0100
patch 8.0.0341: undo does not work properly when using completion
Problem: When using complete() and typing a character undo is saved after
the character was inserted. (Shougo)
Solution: Save for undo before inserting the character.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 19 Feb 2017 15:30:04 +0100 |
parents | 099bd7beced6 |
children | c8a5987d092d |
files | src/edit.c src/testdir/test_popup.vim src/version.c |
diffstat | 3 files changed, 27 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/edit.c +++ b/src/edit.c @@ -3583,7 +3583,11 @@ ins_compl_addleader(int c) { #ifdef FEAT_MBYTE int cc; - +#endif + + if (stop_arrow() == FAIL) + return; +#ifdef FEAT_MBYTE if (has_mbyte && (cc = (*mb_char2len)(c)) > 1) { char_u buf[MB_MAXBYTES + 1];
--- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -531,4 +531,24 @@ func Test_completion_respect_bs_option() bw! endfunc +func CompleteUndo() abort + call complete(1, g:months) + return '' +endfunc + +func Test_completion_can_undo() + inoremap <Right> <c-r>=CompleteUndo()<cr> + set completeopt+=noinsert,noselect + + new + call feedkeys("a\<Right>a\<Esc>", 'xt') + call assert_equal('a', getline(1)) + undo + call assert_equal('', getline(1)) + + bwipe! + set completeopt& + iunmap <Right> +endfunc + " vim: shiftwidth=2 sts=2 expandtab