From cc218ab3caf983a0dcd3399beb8e1ecfcf0dd25d Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 4 Aug 2015 18:23:22 +0200 Subject: patch 7.4.806 Problem: CTRL-A in Visual mode doesn't work properly with "alpha" in 'nrformat'. Solution: Make it work. (Christian Brabandt) --- src/ops.c | 39 +++++++++++++++++++-------------------- src/testdir/test_increment.in | 24 ++++++++++++++++++++++++ src/testdir/test_increment.ok | 9 +++++++++ src/version.c | 2 ++ 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/src/ops.c b/src/ops.c index ff72258946..f53567bc10 100644 --- a/src/ops.c +++ b/src/ops.c @@ -5492,6 +5492,8 @@ do_addsub(command, Prenum1, g_cmd) for (i = lnum; i <= lnume; i++) { + colnr_T stop = 0; + t = curwin->w_cursor; curwin->w_cursor.lnum = i; ptr = ml_get_curline(); @@ -5501,31 +5503,28 @@ do_addsub(command, Prenum1, g_cmd) continue; if (visual) { - if (doalp) /* search for ascii chars */ - { - while (!ASCII_ISALPHA(ptr[col]) && ptr[col]) - col++; - } - /* skip to first digit, but allow for leading '-' */ - else if (dohex) + if (VIsual_mode == 'v' + && i == lnume) + stop = curwin->w_cursor.col; + else if (VIsual_mode == Ctrl_V + && curbuf->b_visual.vi_curswant != MAXCOL) + stop = curwin->w_cursor.col; + + while (ptr[col] != NUL + && !vim_isdigit(ptr[col]) + && !(doalp && ASCII_ISALPHA(ptr[col]))) { - while (!(vim_isxdigit(ptr[col]) || (ptr[col] == '-' - && vim_isxdigit(ptr[col+1]))) && ptr[col]) - col++; + if (col > 0 && col == stop) + break; + ++col; } - else /* decimal */ + + if (col > startcol && ptr[col - 1] == '-') { - while (!(vim_isdigit(ptr[col]) || (ptr[col] == '-' - && vim_isdigit(ptr[col+1]))) && ptr[col]) - col++; + negative = TRUE; + was_positive = FALSE; } } - if (visual && ptr[col] == '-') - { - negative = TRUE; - was_positive = FALSE; - col++; - } /* * If a number was found, and saving for undo works, replace the number. */ diff --git a/src/testdir/test_increment.in b/src/testdir/test_increment.in index 916f77e84b..fb7e6e3ee2 100644 --- a/src/testdir/test_increment.in +++ b/src/testdir/test_increment.in @@ -260,6 +260,16 @@ Text: 9 12 +19) increment on number with nrformat including alpha +Text: + 1 + 1a + + Expected: + 1) j$ + 2 + 1b + STARTTEST @@ -369,6 +379,13 @@ V3k :/^E18=/+put a V3kg.. +:" Test 19 +:set nrformats+=alpha +:/^S19=/+,/^E19=/-y a +:/^E19=/+put a +k$ +:set nrformats&vim + :" Save the report :/^# Test 1/,$w! test.out :qa! @@ -547,6 +564,13 @@ E18==== +# Test 19 +S19==== +1 +1a +E19==== + + ENDTEST diff --git a/src/testdir/test_increment.ok b/src/testdir/test_increment.ok index 6ca0acce66..685478e668 100644 --- a/src/testdir/test_increment.ok +++ b/src/testdir/test_increment.ok @@ -261,6 +261,15 @@ E18==== 12 +# Test 19 +S19==== +1 +1a +E19==== + +2 +2a + ENDTEST diff --git a/src/version.c b/src/version.c index 01fb7a8ea6..714851b22a 100644 --- a/src/version.c +++ b/src/version.c @@ -741,6 +741,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 806, /**/ 805, /**/ -- cgit v1.2.3