changeset 6977:b10995a2f7c3 v7.4.806

patch 7.4.806 Problem: CTRL-A in Visual mode doesn't work properly with "alpha" in 'nrformat'. Solution: Make it work. (Christian Brabandt)
author Bram Moolenaar <bram@vim.org>
date Tue, 04 Aug 2015 18:23:22 +0200
parents d678a71cae27
children 5ad1ff809c32
files src/ops.c src/testdir/test_increment.in src/testdir/test_increment.ok src/version.c
diffstat 4 files changed, 54 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- 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 */
+	    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 (!ASCII_ISALPHA(ptr[col]) && ptr[col])
-		    col++;
-	    }
-	    /* skip to first digit, but allow for leading '-' */
-	    else if (dohex)
-	    {
-		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.
 	 */
--- 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) <Ctrl-V>j$ <ctrl-a>
+ 2
+ 1b
+   
 
 
 STARTTEST
@@ -369,6 +379,13 @@ 4kj$2j.
 :/^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
--- a/src/testdir/test_increment.ok
+++ b/src/testdir/test_increment.ok
@@ -261,6 +261,15 @@ 9
 12
 
 
+# Test 19
+S19====
+1
+1a
+E19====
+
+2
+2a
+
 
 
 ENDTEST
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    806,
+/**/
     805,
 /**/
     804,