neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit b782a37cf58b5ae5e47fd15fb2a5096639c64a23
parent ac15db4b9c21b51dc1789c4c75bd8cb363c6715d
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Fri,  2 Aug 2024 07:52:09 +0800

vim-patch:9.1.0651: ex: trailing dot is optional for :g and :insert/:append (#29946)

Problem:  ex: trailing dot is optional for :g and :insert/:append
Solution: don't break out early, when the next command is empty.
          (Mohamed Akram)

The terminating period is optional for the last command in a global
command list.

closes: vim/vim#15407

https://github.com/vim/vim/commit/0214680a8ec5f7f656cb42e5db19243709202ed2

Co-authored-by: Mohamed Akram <mohd.akram@outlook.com>
Diffstat:
Msrc/nvim/ex_cmds.c | 4+++-
Mtest/functional/ex_cmds/append_spec.lua | 2+-
Mtest/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 @@ -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 @@ -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 @@ -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