updated for version 7.3.086
Problem: When using a mapping with an expression and there was no count,
v:count has the value of the previous command. (ZyX)
Solution: Also set v:count and v:count1 before getting the character that
could be a command or a count.
diff --git a/src/normal.c b/src/normal.c
index 1754e8a..fe30667 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -25,6 +25,9 @@
static int restart_VIsual_select = 0;
#endif
+#ifdef FEAT_EVAL
+static void set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+#endif
static int
# ifdef __BORLANDC__
_RTLENTRYF
@@ -648,6 +651,14 @@
dont_scroll = FALSE; /* allow scrolling here */
#endif
+#ifdef FEAT_EVAL
+ /* Set v:count here, when called from main() and not a stuffed
+ * command, so that v:count can be used in an expression mapping
+ * when there is no count. */
+ if (toplevel && stuff_empty())
+ set_vcount_ca(&ca, &set_prevcount);
+#endif
+
/*
* Get the command character from the user.
*/
@@ -725,15 +736,7 @@
* command, so that v:count can be used in an expression mapping
* right after the count. */
if (toplevel && stuff_empty())
- {
- long count = ca.count0;
-
- /* multiply with ca.opcount the same way as below */
- if (ca.opcount != 0)
- count = ca.opcount * (count == 0 ? 1 : count);
- set_vcount(count, count == 0 ? 1 : count, set_prevcount);
- set_prevcount = FALSE; /* only set v:prevcount once */
- }
+ set_vcount_ca(&ca, &set_prevcount);
#endif
if (ctrl_w)
{
@@ -1386,6 +1389,26 @@
opcount = ca.opcount;
}
+#ifdef FEAT_EVAL
+/*
+ * Set v:count and v:count1 according to "cap".
+ * Set v:prevcount only when "set_prevcount" is TRUE.
+ */
+ static void
+set_vcount_ca(cap, set_prevcount)
+ cmdarg_T *cap;
+ int *set_prevcount;
+{
+ long count = cap->count0;
+
+ /* multiply with cap->opcount the same way as above */
+ if (cap->opcount != 0)
+ count = cap->opcount * (count == 0 ? 1 : count);
+ set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
+ *set_prevcount = FALSE; /* only set v:prevcount once */
+}
+#endif
+
/*
* Handle an operator after visual mode or when the movement is finished
*/
@@ -8529,7 +8552,7 @@
else
curwin->w_curswant = 0;
/* keep curswant at the column where we wanted to go, not where
- we ended; differs if line is too short */
+ * we ended; differs if line is too short */
curwin->w_set_curswant = FALSE;
}
diff --git a/src/version.c b/src/version.c
index 7372e9a..d3ad470 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 86,
+/**/
85,
/**/
84,