diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 1a76bf5ed7..8c0fb9a230 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -2219,7 +2219,8 @@ int buflist_getfile(int n, linenr_T lnum, int options, int forceit) /// Go to the last known line number for the current buffer. void buflist_getfpos(void) { - pos_T *fpos = &buflist_findfmark(curbuf)->mark; + fmark_T *fm = buflist_findfmark(curbuf); + const pos_T *fpos = &fm->mark; curwin->w_cursor.lnum = fpos->lnum; check_cursor_lnum(curwin); @@ -2232,6 +2233,10 @@ void buflist_getfpos(void) curwin->w_cursor.coladd = 0; curwin->w_set_curswant = true; } + + if (jop_flags & kOptJopFlagView) { + mark_view_restore(fm); + } } /// Find file in buffer list by name (it has to be for the current window). @@ -2812,7 +2817,7 @@ void get_winopts(buf_T *buf) fmark_T *buflist_findfmark(buf_T *buf) FUNC_ATTR_PURE { - static fmark_T no_position = { { 1, 0, 0 }, 0, 0, { 0 }, NULL }; + static fmark_T no_position = { { 1, 0, 0 }, 0, 0, INIT_FMARKV, NULL }; WinInfo *const wip = find_wininfo(buf, false, false); return (wip == NULL) ? &no_position : &(wip->wi_mark); diff --git a/test/functional/editor/jump_spec.lua b/test/functional/editor/jump_spec.lua index dab8fb3fda..b71d24ecda 100644 --- a/test/functional/editor/jump_spec.lua +++ b/test/functional/editor/jump_spec.lua @@ -423,27 +423,36 @@ describe('jumpoptions=view', function() ]]) end) - it('restores the view across files with ', function() + it('restores the view across files with /:bprevious/:bnext', function() local screen = Screen.new(5, 5) command('args ' .. file1 .. ' ' .. file2) feed('12Gzt') - command('next') - feed('G') - screen:expect([[ - 27 line | - 28 line | - 29 line | - ^30 line | - | - ]]) - feed('') - screen:expect([[ + local s1 = [[ ^12 line | 13 line | 14 line | 15 line | | - ]]) + ]] + screen:expect(s1) + command('next') + feed('G') + local s2 = [[ + 27 line | + 28 line | + 29 line | + ^30 line | + | + ]] + screen:expect(s2) + feed('') + screen:expect(s1) + feed('') + screen:expect(s2) + command('bprevious') + screen:expect(s1) + command('bnext') + screen:expect(s2) end) it("falls back to standard behavior when view can't be recovered", function()