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);