From 1d59575450e0a09d710a7cad2b8e1b5c5e0242f5 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Wed, 28 Aug 2019 05:37:18 -0400 Subject: [PATCH] vim-patch:8.0.0303: shift_delete_registers() #10868 Problem: Bracketed paste does not work in Visual mode. Solution: Delete the text before pasting https://github.com/vim/vim/commit/a1891848d970452cd775d35a4bccfdd9758a690a --- src/nvim/ops.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/nvim/ops.c b/src/nvim/ops.c index ebf5c7a7bc..df4452cd4a 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -1323,6 +1323,19 @@ bool cmdline_paste_reg(int regname, bool literally, bool remcr) return OK; } +// Shift the delete registers: "9 is cleared, "8 becomes "9, etc. +static void shift_delete_registers(bool y_append) +{ + free_register(&y_regs[9]); // free register "9 + for (int n = 9; n > 1; n--) { + y_regs[n] = y_regs[n - 1]; + } + if (!y_append) { + y_previous = &y_regs[1]; + } + y_regs[1].y_array = NULL; // set register "1 to empty +} + /* * Handle a delete operation. * @@ -1417,13 +1430,7 @@ int op_delete(oparg_T *oap) */ if (oap->regname != 0 || oap->motion_type == kMTLineWise || oap->line_count > 1 || oap->use_reg_one) { - free_register(&y_regs[9]); /* free register "9 */ - for (n = 9; n > 1; n--) - y_regs[n] = y_regs[n - 1]; - if (!is_append_register(oap->regname)) { - y_previous = &y_regs[1]; - } - y_regs[1].y_array = NULL; // set register "1 to empty + shift_delete_registers(is_append_register(oap->regname)); reg = &y_regs[1]; op_yank_reg(oap, false, reg, false); did_yank = true;