diff options
author | Marco Hinz <mh.codebro@gmail.com> | 2014-04-29 15:34:02 +0200 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-04-29 15:11:57 -0300 |
commit | 48fa2be92be96b348ffd5c812846178f7835fe15 (patch) | |
tree | 790c6886f4136bf5a1a1f91cb935239fdf01b642 | |
parent | 35ca06603948aba029a82bf094fffaf7f17da4e3 (diff) | |
download | rneovim-48fa2be92be96b348ffd5c812846178f7835fe15.tar.gz rneovim-48fa2be92be96b348ffd5c812846178f7835fe15.tar.bz2 rneovim-48fa2be92be96b348ffd5c812846178f7835fe15.zip |
vim-patch:7.4.269
Problem: CTRL-U in Insert mode does not work after using a cursor key.
(Pine Wu)
Solution: Use the original insert start position. (Christian Brabandt)
https://code.google.com/p/vim/source/detail?r=81c26975e8f9dc7435353581346542409403f296
-rw-r--r-- | src/edit.c | 35 | ||||
-rw-r--r-- | src/testdir/test29.in | 28 | ||||
-rw-r--r-- | src/testdir/test29.ok | 9 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 56 insertions, 18 deletions
diff --git a/src/edit.c b/src/edit.c index 53bb8815ec..702d117580 100644 --- a/src/edit.c +++ b/src/edit.c @@ -7339,8 +7339,8 @@ static int ins_bs(int c, int mode, int *inserted_space_p) ((curwin->w_cursor.lnum == 1 && curwin->w_cursor.col == 0) || (!can_bs(BS_START) && (arrow_used - || (curwin->w_cursor.lnum == Insstart.lnum - && curwin->w_cursor.col <= Insstart.col))) + || (curwin->w_cursor.lnum == Insstart_orig.lnum + && curwin->w_cursor.col <= Insstart_orig.col))) || (!can_bs(BS_INDENT) && !arrow_used && ai_col > 0 && curwin->w_cursor.col <= ai_col) || (!can_bs(BS_EOL) && curwin->w_cursor.col == 0)))) { @@ -7378,15 +7378,14 @@ static int ins_bs(int c, int mode, int *inserted_space_p) * delete newline! */ if (curwin->w_cursor.col == 0) { - lnum = Insstart.lnum; - if (curwin->w_cursor.lnum == Insstart.lnum - || revins_on - ) { + lnum = Insstart_orig.lnum; + if (curwin->w_cursor.lnum == lnum || revins_on) { if (u_save((linenr_T)(curwin->w_cursor.lnum - 2), - (linenr_T)(curwin->w_cursor.lnum + 1)) == FAIL) + (linenr_T)(curwin->w_cursor.lnum + 1)) == FAIL) { return FALSE; - --Insstart.lnum; - Insstart.col = MAXCOL; + } + --Insstart_orig.lnum; + Insstart_orig.col = MAXCOL; } /* * In replace mode: @@ -7517,9 +7516,10 @@ static int ins_bs(int c, int mode, int *inserted_space_p) /* insert extra spaces until we are at want_vcol */ while (vcol < want_vcol) { /* Remember the first char we inserted */ - if (curwin->w_cursor.lnum == Insstart.lnum - && curwin->w_cursor.col < Insstart.col) - Insstart.col = curwin->w_cursor.col; + if (curwin->w_cursor.lnum == Insstart_orig.lnum + && curwin->w_cursor.col < Insstart_orig.col) { + Insstart_orig.col = curwin->w_cursor.col; + } if (State & VREPLACE_FLAG) ins_char(' '); @@ -7584,8 +7584,8 @@ static int ins_bs(int c, int mode, int *inserted_space_p) } while ( revins_on || (curwin->w_cursor.col > mincol - && (curwin->w_cursor.lnum != Insstart.lnum - || curwin->w_cursor.col != Insstart.col))); + && (curwin->w_cursor.lnum != Insstart_orig.lnum + || curwin->w_cursor.col != Insstart_orig.col))); did_backspace = TRUE; } did_si = FALSE; @@ -7601,9 +7601,10 @@ static int ins_bs(int c, int mode, int *inserted_space_p) AppendCharToRedobuff(c); /* If deleted before the insertion point, adjust it */ - if (curwin->w_cursor.lnum == Insstart.lnum - && curwin->w_cursor.col < Insstart.col) - Insstart.col = curwin->w_cursor.col; + if (curwin->w_cursor.lnum == Insstart_orig.lnum + && curwin->w_cursor.col < Insstart_orig.col) { + Insstart_orig.col = curwin->w_cursor.col; + } /* vi behaviour: the cursor moves backward but the character that * was there remains visible diff --git a/src/testdir/test29.in b/src/testdir/test29.in index 2df2f7077e..1d6cb6f4d1 100644 --- a/src/testdir/test29.in +++ b/src/testdir/test29.in @@ -102,6 +102,34 @@ if (condition) // Remove the next comment leader! } STARTTEST +:" Test with backspace set to the non-compatible setting +/^\d\+ this +:set cp bs=2 +Avim1 +Avim2u +:set cpo-=< +:inoremap <c-u> <left><c-u> +Avim3 +:iunmap <c-u> +Avim4 +:" Test with backspace set to the compatible setting +:set bs= +A vim5A +A vim6Azweiu +:inoremap <c-u> <left><c-u> +A vim7 +:set cp +ENDTEST +1 this shouldn't be deleted +2 this shouldn't be deleted +3 this shouldn't be deleted +4 this should be deleted +5 this shouldn't be deleted +6 this shouldn't be deleted +7 this shouldn't be deleted +8 this shouldn't be deleted (not touched yet) + +STARTTEST /^{/+1 :set comments=sO:*\ -,mO:*\ \ ,exO:*/ :set comments+=s1:/*,mb:*,ex:*/,:// diff --git a/src/testdir/test29.ok b/src/testdir/test29.ok index 902d52f49b..9dc07ed46b 100644 --- a/src/testdir/test29.ok +++ b/src/testdir/test29.ok @@ -62,6 +62,15 @@ if (condition) // Remove the next comment leader! OK, I will. action(); } +1 this shouldn't be deleted +2 this shouldn't be deleted +3 this shouldn't be deleted +4 this should be deleted3 + +6 this shouldn't be deleted vim5 +7 this shouldn't be deleted vim6 +8 this shouldn't be deleted (not touched yet) vim7 + { /* Make sure the previous comment leader is not removed. */ diff --git a/src/version.c b/src/version.c index 5833ad85c9..e59e7fe8a4 100644 --- a/src/version.c +++ b/src/version.c @@ -203,7 +203,7 @@ static char *(features[]) = { static int included_patches[] = { // Add new patch number below this line //270, - //269, + 269, //268, //267, 266, |