aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-01-29 06:05:39 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-01-29 06:05:39 +0800
commit436a470ef52e60e0a5c553aab53adbc216e650a1 (patch)
tree4a1ac26a7871b947d8aca99062489e0ffc777c19
parent5228850749903c2a19984012ae57ae3960ce87cf (diff)
downloadrneovim-436a470ef52e60e0a5c553aab53adbc216e650a1.tar.gz
rneovim-436a470ef52e60e0a5c553aab53adbc216e650a1.tar.bz2
rneovim-436a470ef52e60e0a5c553aab53adbc216e650a1.zip
vim-patch:8.2.3540: the mark '] is wrong after put with a count
Problem: The mark '] is wrong after put with a count. (Naohiro Ono) Solution: Use the right line number. (closes vim/vim#8956) https://github.com/vim/vim/commit/f47ebf1e1a0a6473b10fb4c92c9c6427aab4dc91
-rw-r--r--src/nvim/ops.c2
-rw-r--r--src/nvim/testdir/test_put.vim12
2 files changed, 13 insertions, 1 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 52c55c8de3..c29668f541 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -3591,7 +3591,7 @@ error:
// Put the '] mark on the first byte of the last inserted character.
// Correct the length for change in indent.
- curbuf->b_op_end.lnum = lnum;
+ curbuf->b_op_end.lnum = new_lnum;
col = (colnr_T)STRLEN(y_array[y_size - 1]) - lendiff;
if (col > 1) {
curbuf->b_op_end.col = col - 1 - utf_head_off(y_array[y_size - 1],
diff --git a/src/nvim/testdir/test_put.vim b/src/nvim/testdir/test_put.vim
index 45c9ec9ba5..4b708fc6a1 100644
--- a/src/nvim/testdir/test_put.vim
+++ b/src/nvim/testdir/test_put.vim
@@ -126,6 +126,18 @@ func Test_gp_with_count_leaves_cursor_at_end()
bwipe!
endfunc
+func Test_p_with_count_leaves_mark_at_end()
+ new
+ call setline(1, '<---->')
+ call setreg('@', "start\nend", 'c')
+ normal 1G3|3p
+ call assert_equal([0, 1, 4, 0], getpos("."))
+ call assert_equal(['<--start', 'endstart', 'endstart', 'end-->'], getline(1, '$'))
+ call assert_equal([0, 4, 3, 0], getpos("']"))
+
+ bwipe!
+endfunc
+
func Test_multibyte_op_end_mark()
new
call setline(1, 'ั‚ะตัั‚')