diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-09-24 20:01:58 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-10-01 22:27:43 -0400 |
commit | 24c4d4e1258f8ca34eb581550776ef613c27a689 (patch) | |
tree | d1a340b9ea63f7db6ffb4da92faf794a5ea2115f /src | |
parent | 0253f0cd929a59e1516359eab9ae84ce39643a7b (diff) | |
download | rneovim-24c4d4e1258f8ca34eb581550776ef613c27a689.tar.gz rneovim-24c4d4e1258f8ca34eb581550776ef613c27a689.tar.bz2 rneovim-24c4d4e1258f8ca34eb581550776ef613c27a689.zip |
vim-patch:8.1.2072: "gk" moves to start of line instead of upwards
Problem: "gk" moves to start of line instead of upwards.
Solution: Fix off-by-one error. (Christian Brabandt, closes vim/vim#4969)
https://github.com/vim/vim/commit/03ac52fc025790c474030ea556cec799400aa046
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/normal.c | 8 | ||||
-rw-r--r-- | src/nvim/testdir/test_normal.vim | 22 |
2 files changed, 26 insertions, 4 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 4dfde96e94..d4065cc06e 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -3932,11 +3932,11 @@ static bool nv_screengo(oparg_T *oap, int dir, long dist) while (dist--) { if (dir == BACKWARD) { - if ((long)curwin->w_curswant >= width2) - /* move back within line */ + if (curwin->w_curswant > width2) { + // move back within line curwin->w_curswant -= width2; - else { - /* to previous line */ + } else { + // to previous line if (curwin->w_cursor.lnum == 1) { retval = false; break; diff --git a/src/nvim/testdir/test_normal.vim b/src/nvim/testdir/test_normal.vim index 532beb9c39..5ff2cf66c9 100644 --- a/src/nvim/testdir/test_normal.vim +++ b/src/nvim/testdir/test_normal.vim @@ -2617,3 +2617,25 @@ Piece of Java close! endfunc + +func Test_normal_gk() + " needs 80 column new window + new + vert 80new + put =[repeat('x',90)..' {{{1', 'x {{{1'] + norm! gk + " In a 80 column wide terminal the window will be only 78 char + " (because Vim will leave space for the other window), + " but if the terminal is larger, it will be 80 chars, so verify the + " cursor column correctly. + call assert_equal(winwidth(0)+1, col('.')) + call assert_equal(winwidth(0)+1, virtcol('.')) + norm! j + call assert_equal(6, col('.')) + call assert_equal(6, virtcol('.')) + norm! gk + call assert_equal(95, col('.')) + call assert_equal(95, virtcol('.')) + bw! + bw! +endfunc |