mirror of
https://github.com/neovim/neovim.git
synced 2025-10-08 10:56:31 +00:00
vim-patch:8.1.2231: introduce gM command #11321
Problem: Not easy to move to the middle of a text line.
Solution: Add the gM command. (Yasuhiro Matsumoto, closes vim/vim#2070)
8b530c1ff9
This commit is contained in:

committed by
Justin M. Keyes

parent
efaf4732e2
commit
471427d045
@@ -6749,6 +6749,22 @@ static void nv_g_cmd(cmdarg_T *cap)
|
||||
curwin->w_set_curswant = true;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
{
|
||||
const char_u *const ptr = get_cursor_line_ptr();
|
||||
|
||||
oap->motion_type = kMTCharWise;
|
||||
oap->inclusive = false;
|
||||
i = (int)mb_string2cells_len(ptr, 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. */
|
||||
|
@@ -1895,6 +1895,7 @@ fun! Test_normal33_g_cmd2()
|
||||
set wrap listchars= sbr=
|
||||
let lineA='abcdefghijklmnopqrstuvwxyz'
|
||||
let lineB='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
let lineC='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
$put =lineA
|
||||
$put =lineB
|
||||
|
||||
@@ -1928,9 +1929,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
|
||||
|
Reference in New Issue
Block a user