diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-02-15 09:35:43 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-02-15 09:35:43 +0800 |
commit | 8f3e56ed3a3b05e19a9c5b9c812596cc87281bf9 (patch) | |
tree | 8041b6c2e6b4f891d600cf9b96681b1e5df7dd1e /src | |
parent | 1bd6c0a05c18e10e9439b4090e6f57f0d1e1fc21 (diff) | |
download | rneovim-8f3e56ed3a3b05e19a9c5b9c812596cc87281bf9.tar.gz rneovim-8f3e56ed3a3b05e19a9c5b9c812596cc87281bf9.tar.bz2 rneovim-8f3e56ed3a3b05e19a9c5b9c812596cc87281bf9.zip |
vim-patch:8.2.3820: "vrc" does not replace composing characters
Problem: "vrc" does not replace composing characters, while "rc" does.
Solution: Check the byte length including composing characters.
(closes vim/vim#9351)
https://github.com/vim/vim/commit/8ee6028de3daa9af9e5f90fa9e583ff407bee04f
vim-patch:8.2.3823: test for visual replace is in wrong function
Problem: Test for visual replace is in wrong function.
Solution: Move it to another function.
https://github.com/vim/vim/commit/6ecf58b0d7d9b8fbba780d19d2e6c0f227df715b
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ops.c | 7 | ||||
-rw-r--r-- | src/nvim/testdir/test_visual.vim | 5 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c index c9a99fef84..e012ab0c57 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -1961,11 +1961,14 @@ static int op_replace(oparg_T *oap, int c) while (ltoreq(curwin->w_cursor, oap->end)) { n = gchar_cursor(); if (n != NUL) { - if (utf_char2len(c) > 1 || utf_char2len(n) > 1) { + int new_byte_len = utf_char2len(c); + int old_byte_len = utfc_ptr2len(get_cursor_pos_ptr()); + + if (new_byte_len > 1 || old_byte_len > 1) { // This is slow, but it handles replacing a single-byte // with a multi-byte and the other way around. if (curwin->w_cursor.lnum == oap->end.lnum) { - oap->end.col += utf_char2len(c) - utf_char2len(n); + oap->end.col += new_byte_len - old_byte_len; } replace_character(c); } else { diff --git a/src/nvim/testdir/test_visual.vim b/src/nvim/testdir/test_visual.vim index 04c7db38ef..da88293c8e 100644 --- a/src/nvim/testdir/test_visual.vim +++ b/src/nvim/testdir/test_visual.vim @@ -636,6 +636,11 @@ func Test_characterwise_visual_mode() normal v$rx call assert_equal(['x'], getline(1, '$')) + " replace a character with composing characters + call setline(1, "xã̳x") + normal gg0lvrb + call assert_equal("xbx", getline(1)) + bwipe! endfunc |