diff options
-rw-r--r-- | src/nvim/diff.c | 18 | ||||
-rw-r--r-- | src/nvim/testdir/test_diffmode.vim | 22 |
2 files changed, 33 insertions, 7 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c index b9376c311f..57bfc8db69 100644 --- a/src/nvim/diff.c +++ b/src/nvim/diff.c @@ -2739,15 +2739,19 @@ void ex_diffgetput(exarg_T *eap) theend: diff_busy = false; if (diff_need_update) { - diff_need_update = false; ex_diffupdate(NULL); - } else { - // Check that the cursor is on a valid character and update it's - // position. When there were filler lines the topline has become - // invalid. - check_cursor(); - changed_line_abv_curs(); + } + + // Check that the cursor is on a valid character and update it's + // position. When there were filler lines the topline has become + // invalid. + check_cursor(); + changed_line_abv_curs(); + if (diff_need_update) { + // redraw already done by ex_diffupdate() + diff_need_update = false; + } else { // Also need to redraw the other buffers. diff_redraw(false); apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, false, curbuf); diff --git a/src/nvim/testdir/test_diffmode.vim b/src/nvim/testdir/test_diffmode.vim index 6f25179ab1..f34c2fd26d 100644 --- a/src/nvim/testdir/test_diffmode.vim +++ b/src/nvim/testdir/test_diffmode.vim @@ -275,6 +275,28 @@ func Test_dp_do_buffer() %bwipe! endfunc +func Test_do_lastline() + e! one + call setline(1, ['1','2','3','4','5','6']) + diffthis + + new two + call setline(1, ['2','4','5']) + diffthis + + 1 + norm dp]c + norm dp]c + wincmd w + call assert_equal(4, line('$')) + norm G + norm do + call assert_equal(3, line('$')) + + windo diffoff + %bwipe! +endfunc + func Test_diffoff() enew! call setline(1, ['Two', 'Three']) |