diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-10-28 02:13:05 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-10-28 02:13:05 +0100 |
commit | 8b530c1ff91f07cf6b0289a536992b7dfbc86598 (patch) | |
tree | 6a672624551a6e1a4e07d5274c2149afdd486a35 /src | |
parent | 077ff436a77f95c69da219af8cd8f553ff4f9ff8 (diff) |
patch 8.1.2231: not easy to move to the middle of a text linev8.1.2231
Problem: Not easy to move to the middle of a text line.
Solution: Add the gM command. (Yasuhiro Matsumoto, closes #2070)
Diffstat (limited to 'src')
-rw-r--r-- | src/normal.c | 18 | ||||
-rw-r--r-- | src/testdir/test_normal.vim | 24 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 43 insertions, 1 deletions
diff --git a/src/normal.c b/src/normal.c index f66a97c34b..17db06a167 100644 --- a/src/normal.c +++ b/src/normal.c @@ -5979,6 +5979,24 @@ nv_g_cmd(cmdarg_T *cap) curwin->w_set_curswant = TRUE; break; + case 'M': + { + char_u *ptr = ml_get_curline(); + + oap->motion_type = MCHAR; + oap->inclusive = FALSE; + if (has_mbyte) + i = mb_string2cells(ptr, STRLEN(ptr)); + else + i = (int)STRLEN(ptr); + if (cap->count0 > 0 && cap->count0 <= 100) + coladvance((colnr_T)(i * cap->count0 / 100)); + else + coladvance((colnr_T)(i / 2)); + curwin->w_set_curswant = TRUE; + } + break; + case '_': /* "g_": to the last non-blank character in the line or <count> lines * downward. */ diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index b37f613ede..c4b38b1c6c 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -1733,6 +1733,7 @@ fun! Test_normal33_g_cmd2() set wrap listchars= sbr= let lineA='abcdefghijklmnopqrstuvwxyz' let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' + let lineC='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' $put =lineA $put =lineB @@ -1766,9 +1767,30 @@ fun! Test_normal33_g_cmd2() call assert_equal(15, col('.')) call assert_equal('l', getreg(0)) + norm! 2ggdd + $put =lineC + + " Test for gM + norm! gMyl + call assert_equal(73, col('.')) + call assert_equal('0', getreg(0)) + " Test for 20gM + norm! 20gMyl + call assert_equal(29, col('.')) + call assert_equal('S', getreg(0)) + " Test for 60gM + norm! 60gMyl + call assert_equal(87, col('.')) + call assert_equal('E', getreg(0)) + + " Test for g Ctrl-G + 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) + " Test for gI norm! gIfoo - call assert_equal(['', 'fooabcdefghijk lmno0123456789AMNOPQRSTUVWXYZ'], getline(1,'$')) + call assert_equal(['', 'foo0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'], getline(1,'$')) " Test for gi wincmd c diff --git a/src/version.c b/src/version.c index 07a8cd9e51..99f15701b5 100644 --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2231, +/**/ 2230, /**/ 2229, |