diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-12-26 15:00:07 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-12-26 15:00:07 +0000 |
commit | 71c41255f6a074c4df4dc6f9e97d347e565253a1 (patch) | |
tree | 147088eef2978684982cd3db6993e36722e6f69c | |
parent | 9c23f9bb5fe435b28245ba8ac65aa0ca6b902c04 (diff) |
patch 8.2.3903: "gM" does not count tabs as expectedv8.2.3903
Problem: "gM" does not count tabs as expected.
Solution: Use linetabsize() instead of mb_string2cells(). (closes #9409)
-rw-r--r-- | src/normal.c | 7 | ||||
-rw-r--r-- | src/testdir/test_normal.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/normal.c b/src/normal.c index 1e887ca911..f925aa14ab 100644 --- a/src/normal.c +++ b/src/normal.c @@ -6122,14 +6122,9 @@ nv_g_cmd(cmdarg_T *cap) case 'M': { - char_u *ptr = ml_get_curline(); - oap->motion_type = MCHAR; oap->inclusive = FALSE; - if (has_mbyte) - i = mb_string2cells(ptr, (int)STRLEN(ptr)); - else - i = (int)STRLEN(ptr); + i = linetabsize(ml_get_curline()); if (cap->count0 > 0 && cap->count0 <= 100) coladvance((colnr_T)(i * cap->count0 / 100)); else diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index 6458a1bed4..9794961337 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -2580,7 +2580,15 @@ func Test_normal33_g_cmd2() call assert_equal(87, col('.')) call assert_equal('E', getreg(0)) + " Test for gM with Tab characters + call setline('.', "\ta\tb\tc\td\te\tf") + norm! gMyl + call assert_equal(6, col('.')) + call assert_equal("c", getreg(0)) + " Test for g Ctrl-G + call setline('.', lineC) + norm! 60gMyl set ff=unix let a=execute(":norm! g\<c-g>") call assert_match('Col 87 of 144; Line 2 of 2; Word 1 of 1; Byte 88 of 146', a) diff --git a/src/version.c b/src/version.c index 55ddb069c8..7d5d6b593e 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3903, +/**/ 3902, /**/ 3901, |