commit 0c91cb4f03814bfdfe262c6d2693c6883c38719b
parent 7485fd0518557f7f49f9b636a80e4e3b523dd9dd
Author: zeertzjq <zeertzjq@outlook.com>
Date: Mon, 21 Aug 2023 06:11:23 +0800
vim-patch:9.0.1761: g<kEnd> behaves different from g<end>
Problem: g<kEnd> behaves different from g<end>
Solution: Make g<kEnd> behave like g<End>
closes: vim/vim#12861
https://github.com/vim/vim/commit/654bdbbd329e7267051cc2eb496bc52b66053081
Diffstat:
3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
@@ -246,7 +246,8 @@ g$ When lines wrap ('wrap' on): To the last character of
instead of going to the end of the line.
When 'virtualedit' is enabled moves to the end of the
screen line.
- *g<End>*
+
+ *g<End>* *g<kEnd>*
g<End> Like |g$| but to the last non-blank character
instead of the last character.
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
@@ -5323,7 +5323,7 @@ static void nv_g_dollar_cmd(cmdarg_T *cap)
oparg_T *oap = cap->oap;
int i;
int col_off = curwin_col_off();
- const bool flag = cap->nchar == K_END;
+ const bool flag = cap->nchar == K_END || cap->nchar == K_KEND;
oap->motion_type = kMTCharWise;
oap->inclusive = true;
diff --git a/test/old/testdir/test_normal.vim b/test/old/testdir/test_normal.vim
@@ -4118,20 +4118,24 @@ func Test_normal_click_on_double_width_char()
endfunc
func Test_normal33_g_cmd_nonblank()
- " Test that g$ goes to the last non-blank char and g<end> to the last
+ " Test that g<End> goes to the last non-blank char and g$ to the last
" visible column
20vnew
setlocal nowrap nonumber signcolumn=no
call setline(1, ['fooo fooo fooo fooo fooo fooo fooo fooo '])
- exe "normal 0g\<end>"
+ exe "normal 0g\<End>"
call assert_equal(11, col('.'))
normal 0g$
call assert_equal(20, col('.'))
+ exe "normal 0g\<kEnd>"
+ call assert_equal(11, col('.'))
setlocal wrap
- exe "normal 0g\<end>"
+ exe "normal 0g\<End>"
call assert_equal(11, col('.'))
normal 0g$
call assert_equal(20, col('.'))
+ exe "normal 0g\<kEnd>"
+ call assert_equal(11, col('.'))
bw!
endfunc