diff options
| author | zeertzjq <zeertzjq@outlook.com> | 2025-03-04 06:41:41 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-04 06:41:41 +0800 |
| commit | e4fb697b69c7307a76d06cf60bb834af2e2cdc5e (patch) | |
| tree | c3d4b89e4fddbd39a010cebb65440b6b33b8b93d /src/nvim/ex_getln.c | |
| parent | 948179cb19c75a9e79cdf2c86c441304c5285e81 (diff) | |
| parent | e56f7413505c76b7b57ced2552479ad02875bc74 (diff) | |
| download | rneovim-e4fb697b69c7307a76d06cf60bb834af2e2cdc5e.tar.gz rneovim-e4fb697b69c7307a76d06cf60bb834af2e2cdc5e.tar.bz2 rneovim-e4fb697b69c7307a76d06cf60bb834af2e2cdc5e.zip | |
Merge pull request #32709 from deathbeam/vim-9.1.1166
vim-patch:9.1.{1166,1168}: 'wildmode' noselect
Diffstat (limited to 'src/nvim/ex_getln.c')
| -rw-r--r-- | src/nvim/ex_getln.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index fc20748309..240bdae6cb 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1082,6 +1082,9 @@ static int command_line_wildchar_complete(CommandLineState *s) if (wim_flags[s->wim_index] & kOptWimFlagLastused) { options |= WILD_BUFLASTUSED; } + if (wim_flags[0] & kOptWimFlagNoselect) { + options |= WILD_KEEP_SOLE_ITEM; + } if (s->xpc.xp_numfiles > 0) { // typed p_wc at least twice // if 'wildmode' contains "list" may still need to list if (s->xpc.xp_numfiles > 1 @@ -1124,19 +1127,20 @@ static int command_line_wildchar_complete(CommandLineState *s) // when more than one match, and 'wildmode' first contains // "list", or no change and 'wildmode' contains "longest,list", // list all matches - if (res == OK && s->xpc.xp_numfiles > 1) { + if (res == OK + && s->xpc.xp_numfiles > ((wim_flags[s->wim_index] & kOptWimFlagNoselect) ? 0 : 1)) { // a "longest" that didn't do anything is skipped (but not // "list:longest") if (wim_flags[0] == kOptWimFlagLongest && ccline.cmdpos == j) { s->wim_index = 1; } if ((wim_flags[s->wim_index] & kOptWimFlagList) - || (p_wmnu && (wim_flags[s->wim_index] & kOptWimFlagFull) != 0)) { + || (p_wmnu && (wim_flags[s->wim_index] & (kOptWimFlagFull|kOptWimFlagNoselect)))) { if (!(wim_flags[0] & kOptWimFlagLongest)) { int p_wmnu_save = p_wmnu; p_wmnu = 0; // remove match - nextwild(&s->xpc, WILD_PREV, 0, s->firstc != '@'); + nextwild(&s->xpc, WILD_PREV, options, s->firstc != '@'); p_wmnu = p_wmnu_save; } @@ -1146,7 +1150,8 @@ static int command_line_wildchar_complete(CommandLineState *s) if (wim_flags[s->wim_index] & kOptWimFlagLongest) { nextwild(&s->xpc, WILD_LONGEST, options, s->firstc != '@'); - } else if (wim_flags[s->wim_index] & kOptWimFlagFull) { + } else if ((wim_flags[s->wim_index] & kOptWimFlagFull) + && !(wim_flags[s->wim_index] & kOptWimFlagNoselect)) { nextwild(&s->xpc, WILD_NEXT, options, s->firstc != '@'); } } else { @@ -2875,6 +2880,8 @@ int check_opt_wim(void) new_wim_flags[idx] |= kOptWimFlagList; } else if (i == 8 && strncmp(p, "lastused", 8) == 0) { new_wim_flags[idx] |= kOptWimFlagLastused; + } else if (i == 8 && strncmp(p, "noselect", 8) == 0) { + new_wim_flags[idx] |= kOptWimFlagNoselect; } else { return FAIL; } |