fix(substitute): properly check for empty command line

This commit is contained in:
zeertzjq 2022-04-03 22:53:37 +08:00
parent d73bf3138a
commit 9955209afb
2 changed files with 10 additions and 9 deletions

View File

@ -3860,19 +3860,22 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout, bool do_buf_event, handle
prompt = xmallocz(ec + 1); prompt = xmallocz(ec + 1);
memset(prompt, ' ', sc); memset(prompt, ' ', sc);
memset(prompt + sc, '^', ec - sc + 1); memset(prompt + sc, '^', ec - sc + 1);
resp = (char_u *)getcmdline_prompt(NUL, prompt, 0, EXPAND_NOTHING, resp = (char_u *)getcmdline_prompt(-1, prompt, 0, EXPAND_NOTHING,
NULL, CALLBACK_NONE); NULL, CALLBACK_NONE);
msg_putchar('\n'); msg_putchar('\n');
xfree(prompt); xfree(prompt);
if (resp != NULL) { if (resp != NULL) {
typed = *resp; typed = *resp;
xfree(resp); xfree(resp);
// When ":normal" runs out of characters we get } else {
// an empty line. Use "q" to get out of the // getcmdline_prompt() returns NULL if there is no command line to return.
// loop. typed = NUL;
if (ex_normal_busy && typed == NUL) { }
typed = 'q'; // When ":normal" runs out of characters we get
} // an empty line. Use "q" to get out of the
// loop.
if (ex_normal_busy && typed == NUL) {
typed = 'q';
} }
} else { } else {
char_u *orig_line = NULL; char_u *orig_line = NULL;

View File

@ -2330,8 +2330,6 @@ static int vgetorpeek(bool advance)
// cmdline window. // cmdline window.
if (p_im && (State & INSERT)) { if (p_im && (State & INSERT)) {
c = Ctrl_L; c = Ctrl_L;
} else if ((State & CMDLINE) && exmode_active) {
c = '\n';
} else if ((State & CMDLINE) || (cmdwin_type > 0 && tc == ESC)) { } else if ((State & CMDLINE) || (cmdwin_type > 0 && tc == ESC)) {
c = Ctrl_C; c = Ctrl_C;
} else { } else {