summaryrefslogtreecommitdiffstats
path: root/src/ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ops.c')
-rw-r--r--src/ops.c39
1 files changed, 19 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.
*/