diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-01-06 07:01:08 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2024-01-13 08:29:47 +0800 |
commit | 2783b6b0a48389f5e12109d9894269768c3e9fe5 (patch) | |
tree | 3c2fbe68241ac44176ccae1be5d8db23c08447c1 /src | |
parent | 4142b8cd2c86fab27d041373dde78a1bc4fa9895 (diff) | |
download | rneovim-2783b6b0a48389f5e12109d9894269768c3e9fe5.tar.gz rneovim-2783b6b0a48389f5e12109d9894269768c3e9fe5.tar.bz2 rneovim-2783b6b0a48389f5e12109d9894269768c3e9fe5.zip |
vim-patch:9.1.0015: i_CTRL-R- no longer works in replace mode
Problem: i_CTRL-R- no longer works in replace mode
Solution: delete characters in replace mode before putting, add a test,
add a bit warning into the documentation, that i_CTRL-R-P/O
is not supported in Replace mode for now
fixes: vim/vim#13792
closes: vim/vim#13816
https://github.com/vim/vim/commit/5d5cbb2b9ac526fb6fad2116e24a282affc45efe
Co-authored-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ops.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 8386dcaec6..32095177be 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -1282,9 +1282,22 @@ int insert_reg(int regname, bool literally_arg) } else { for (size_t i = 0; i < reg->y_size; i++) { if (regname == '-') { + Direction dir = BACKWARD; + if ((State & REPLACE_FLAG) != 0) { + pos_T curpos; + u_save_cursor(); + del_bytes((colnr_T)strlen(reg->y_array[0]), true, false); + curpos = curwin->w_cursor; + if (oneright() == FAIL) { + // hit end of line, need to put forward (after the current position) + dir = FORWARD; + } + curwin->w_cursor = curpos; + } + AppendCharToRedobuff(Ctrl_R); AppendCharToRedobuff(regname); - do_put(regname, NULL, BACKWARD, 1, PUT_CURSEND); + do_put(regname, NULL, dir, 1, PUT_CURSEND); } else { stuffescaped(reg->y_array[i], literally); } |