Mercurial > vim
changeset 3711:169ccc471a8a v7.3.615
updated for version 7.3.615
Problem: Completion for a user command does not recognize backslash before
a space.
Solution: Recognize escaped characters. (Yasuhiro Matsumoto)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 25 Jul 2012 17:22:23 +0200 |
parents | 40b720ad5b7e |
children | a0b8a8a9867d |
files | src/ex_docmd.c src/version.c |
diffstat | 2 files changed, 34 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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;