diff options
-rw-r--r-- | src/ex_cmds.c | 5 | ||||
-rw-r--r-- | src/testdir/test_normal.vim | 9 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 25f06e623..8cdac4b74 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -4233,6 +4233,11 @@ ex_substitute(exarg_T *eap) { typed = *resp; vim_free(resp); + // 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 diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index cd987ab3d..b86a72673 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -2641,6 +2641,15 @@ func Test_normal33_g_cmd2() bw! endfunc +func Test_normal_ex_substitute() + " This was hanging on the substitute prompt. + new + call setline(1, 'a') + exe "normal! gggQs/a/b/c\<CR>" + call assert_equal('a', getline(1)) + bwipe! +endfunc + " Test for g CTRL-G func Test_g_ctrl_g() new diff --git a/src/version.c b/src/version.c index c6111fc92..3fec52ea0 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4672, +/**/ 4671, /**/ 4670, |