summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ex_docmd.c39
-rw-r--r--src/version.c2
2 files changed, 34 insertions, 7 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 7be802c9d..e975d84ae 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3390,12 +3390,23 @@ set_one_cmd_context(xp, buff)
return NULL;
/* Find start of last argument (argument just before cursor): */
- p = buff + STRLEN(buff);
- while (p != arg && *p != ' ' && *p != TAB)
- p--;
- if (*p == ' ' || *p == TAB)
- p++;
+ p = buff;
xp->xp_pattern = p;
+ len = STRLEN(buff);
+ while (*p && p < buff + len)
+ {
+ if (*p == ' ' || *p == TAB)
+ {
+ /* argument starts after a space */
+ xp->xp_pattern = ++p;
+ }
+ else
+ {
+ if (*p == '\\' && *(p + 1) != NUL)
+ ++p; /* skip over escaped character */
+ mb_ptr_adv(p);
+ }
+ }
if (ea.argt & XFILE)
{
@@ -3821,8 +3832,22 @@ set_one_cmd_context(xp, buff)
if (compl == EXPAND_MAPPINGS)
return set_context_in_map_cmd(xp, (char_u *)"map",
arg, forceit, FALSE, FALSE, CMD_map);
- while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
- arg = xp->xp_pattern + 1;
+ /* Find start of last argument. */
+ p = arg;
+ while (*p)
+ {
+ if (*p == ' ')
+ {
+ /* argument starts after a space */
+ arg = p + 1;
+ }
+ else
+ {
+ if (*p == '\\' && *(p + 1) != NUL)
+ ++p; /* skip over escaped character */
+ mb_ptr_adv(p);
+ }
+ }
xp->xp_pattern = arg;
}
xp->xp_context = compl;
diff --git a/src/version.c b/src/version.c
index 3a662a2a8..eecc4d851 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 615,
+/**/
614,
/**/
613,