aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-01-06 07:01:08 +0800
committerzeertzjq <zeertzjq@outlook.com>2024-01-13 08:29:47 +0800
commit2783b6b0a48389f5e12109d9894269768c3e9fe5 (patch)
tree3c2fbe68241ac44176ccae1be5d8db23c08447c1 /src
parent4142b8cd2c86fab27d041373dde78a1bc4fa9895 (diff)
downloadrneovim-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.c15
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);
}