diff options
-rw-r--r-- | src/nvim/ex_cmds.c | 4 | ||||
-rw-r--r-- | test/functional/ex_cmds/append_spec.lua | 2 | ||||
-rw-r--r-- | test/old/testdir/test_ex_mode.vim | 9 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index f170fd0762..1060650bf2 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -2781,7 +2781,7 @@ void ex_append(exarg_T *eap) } else if (eap->ea_getline == NULL) { // No getline() function, use the lines that follow. This ends // when there is no more. - if (eap->nextcmd == NULL || *eap->nextcmd == NUL) { + if (eap->nextcmd == NULL) { break; } p = vim_strchr(eap->nextcmd, NL); @@ -2791,6 +2791,8 @@ void ex_append(exarg_T *eap) theline = xmemdupz(eap->nextcmd, (size_t)(p - eap->nextcmd)); if (*p != NUL) { p++; + } else { + p = NULL; } eap->nextcmd = p; } else { diff --git a/test/functional/ex_cmds/append_spec.lua b/test/functional/ex_cmds/append_spec.lua index 80fdcb3134..df62aecc7f 100644 --- a/test/functional/ex_cmds/append_spec.lua +++ b/test/functional/ex_cmds/append_spec.lua @@ -23,7 +23,7 @@ local cmdtest = function(cmd, prep, ret1) end it(cmd .. 's' .. prep .. ' the current line by default', function() - command(cmd .. '\nabc\ndef\n') + command(cmd .. '\nabc\ndef') eq(ret1, buffer_contents()) end) -- Used to crash because this invokes history processing which uses diff --git a/test/old/testdir/test_ex_mode.vim b/test/old/testdir/test_ex_mode.vim index f55ba87a3e..9f3ee2194e 100644 --- a/test/old/testdir/test_ex_mode.vim +++ b/test/old/testdir/test_ex_mode.vim @@ -307,4 +307,13 @@ func Test_insert_after_trailing_bar() bwipe! endfunc +" Test global insert of a newline without terminating period +func Test_global_insert_newline() + new + call setline(1, ['foo']) + call feedkeys("Qg/foo/i\\\n", "xt") + call assert_equal(['', 'foo'], getline(1, '$')) + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab |