diff --git a/src/ops.c b/src/ops.c index 53bd084ec0..d8e96ff1a4 100644 --- a/src/ops.c +++ b/src/ops.c @@ -9,7 +9,7 @@ /* * ops.c: implementation of various operators: op_shift, op_delete, op_tilde, - * op_change, op_yank, do_put, do_join + * op_change, op_yank, do_join */ #include "vim.h" diff --git a/src/register.c b/src/register.c index 6574432bdb..56b6cadecd 100644 --- a/src/register.c +++ b/src/register.c @@ -809,7 +809,14 @@ insert_reg( { for (i = 0; i < y_current->y_size; ++i) { - stuffescaped(y_current->y_array[i], literally); + if (regname == '-') + { + AppendCharToRedobuff(Ctrl_R); + AppendCharToRedobuff(regname); + do_put(regname, NULL, BACKWARD, 1L, PUT_CURSEND); + } + else + stuffescaped(y_current->y_array[i], literally); // Insert a newline between lines and after last line if // y_type is MLINE. if (y_current->y_type == MLINE || i < y_current->y_size - 1) diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim index 521f8ad356..14febad702 100644 --- a/src/testdir/test_registers.vim +++ b/src/testdir/test_registers.vim @@ -698,4 +698,15 @@ func Test_ve_blockpaste() bwipe! endfunc +func Test_insert_small_delete() + new + call setline(1, ['foo foobar bar']) + call cursor(1,1) + exe ":norm! ciw'\-'" + call assert_equal(getline(1), "'foo' foobar bar") + exe ":norm! w.w." + call assert_equal(getline(1), "'foo' 'foobar' 'bar'") + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index d6eaf8d7ea..65dfcdfaef 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2189, /**/ 2188, /**/