Mercurial > vim
comparison src/cmdexpand.c @ 27722:637ccebaf328 v8.2.4387
patch 8.2.4387: command line completion doesn't always work properly
Commit: https://github.com/vim/vim/commit/e3846cf1ebdc4af0b39885153b4703f71a9b919e
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Tue Feb 15 11:35:54 2022 +0000
patch 8.2.4387: command line completion doesn't always work properly
Problem: Command line completion doesn't always work properly.
Solution: Adjust triggering after a "|". Add more tests. (Yegappan
Lakshmanan, closes #9779)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 15 Feb 2022 12:45:04 +0100 |
parents | 38eab98ef5a9 |
children | 515ce8e07bf2 |
comparison
equal
deleted
inserted
replaced
27721:c6174f84a358 | 27722:637ccebaf328 |
---|---|
1471 if (delim) | 1471 if (delim) |
1472 { | 1472 { |
1473 // skip "from" part | 1473 // skip "from" part |
1474 ++arg; | 1474 ++arg; |
1475 arg = skip_regexp(arg, delim, magic_isset()); | 1475 arg = skip_regexp(arg, delim, magic_isset()); |
1476 } | 1476 |
1477 // skip "to" part | 1477 if (arg[0] != NUL && arg[0] == delim) |
1478 while (arg[0] != NUL && arg[0] != delim) | 1478 { |
1479 { | 1479 // skip "to" part |
1480 if (arg[0] == '\\' && arg[1] != NUL) | |
1481 ++arg; | 1480 ++arg; |
1482 ++arg; | 1481 while (arg[0] != NUL && arg[0] != delim) |
1483 } | 1482 { |
1484 if (arg[0] != NUL) // skip delimiter | 1483 if (arg[0] == '\\' && arg[1] != NUL) |
1485 ++arg; | 1484 ++arg; |
1485 ++arg; | |
1486 } | |
1487 if (arg[0] != NUL) // skip delimiter | |
1488 ++arg; | |
1489 } | |
1490 } | |
1486 while (arg[0] && vim_strchr((char_u *)"|\"#", arg[0]) == NULL) | 1491 while (arg[0] && vim_strchr((char_u *)"|\"#", arg[0]) == NULL) |
1487 ++arg; | 1492 ++arg; |
1488 if (arg[0] != NUL) | 1493 if (arg[0] != NUL) |
1489 return arg; | 1494 return arg; |
1490 break; | 1495 break; |
1506 if (*arg) | 1511 if (*arg) |
1507 { | 1512 { |
1508 arg = skipwhite(arg + 1); | 1513 arg = skipwhite(arg + 1); |
1509 | 1514 |
1510 // Check for trailing illegal characters | 1515 // Check for trailing illegal characters |
1511 if (*arg && vim_strchr((char_u *)"|\"\n", *arg) == NULL) | 1516 if (*arg == NUL || |
1517 vim_strchr((char_u *)"|\"\n", *arg) == NULL) | |
1512 xp->xp_context = EXPAND_NOTHING; | 1518 xp->xp_context = EXPAND_NOTHING; |
1513 else | 1519 else |
1514 return arg; | 1520 return arg; |
1515 } | 1521 } |
1516 } | 1522 } |
2406 && STRNCMP(pat, "^s:", 3) == 0) | 2412 && STRNCMP(pat, "^s:", 3) == 0) |
2407 { | 2413 { |
2408 int len = (int)STRLEN(pat) + 20; | 2414 int len = (int)STRLEN(pat) + 20; |
2409 | 2415 |
2410 tofree = alloc(len); | 2416 tofree = alloc(len); |
2417 if (tofree == NULL) | |
2418 return FAIL; | |
2411 vim_snprintf((char *)tofree, len, "^<SNR>\\d\\+_%s", pat + 3); | 2419 vim_snprintf((char *)tofree, len, "^<SNR>\\d\\+_%s", pat + 3); |
2412 pat = tofree; | 2420 pat = tofree; |
2413 } | 2421 } |
2414 | 2422 |
2415 regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0); | 2423 regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0); |