forked from aniani/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 #9351)
This commit is contained in:
parent
427f065a88
commit
8ee6028de3
@ -1162,12 +1162,15 @@ op_replace(oparg_T *oap, int c)
|
|||||||
n = gchar_cursor();
|
n = gchar_cursor();
|
||||||
if (n != NUL)
|
if (n != NUL)
|
||||||
{
|
{
|
||||||
if ((*mb_char2len)(c) > 1 || (*mb_char2len)(n) > 1)
|
int new_byte_len = (*mb_char2len)(c);
|
||||||
|
int old_byte_len = mb_ptr2len(ml_get_cursor());
|
||||||
|
|
||||||
|
if (new_byte_len > 1 || old_byte_len > 1)
|
||||||
{
|
{
|
||||||
// This is slow, but it handles replacing a single-byte
|
// This is slow, but it handles replacing a single-byte
|
||||||
// with a multi-byte and the other way around.
|
// with a multi-byte and the other way around.
|
||||||
if (curwin->w_cursor.lnum == oap->end.lnum)
|
if (curwin->w_cursor.lnum == oap->end.lnum)
|
||||||
oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
|
oap->end.col += new_byte_len - old_byte_len;
|
||||||
replace_character(c);
|
replace_character(c);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -234,6 +234,10 @@ func Test_virtual_replace()
|
|||||||
call assert_equal("\txaaaa", getline(1))
|
call assert_equal("\txaaaa", getline(1))
|
||||||
set softtabstop&
|
set softtabstop&
|
||||||
|
|
||||||
|
call setline(1, "xã̳x")
|
||||||
|
normal gg0lvrb
|
||||||
|
call assert_equal("xbx", getline(1))
|
||||||
|
|
||||||
enew!
|
enew!
|
||||||
set noai bs&vim
|
set noai bs&vim
|
||||||
if exists('save_t_kD')
|
if exists('save_t_kD')
|
||||||
|
@ -749,6 +749,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3820,
|
||||||
/**/
|
/**/
|
||||||
3819,
|
3819,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user