vim-patch:9.0.1921: not possible to use the jumplist like a stack (#25278)

Problem:  not possible to use the jumplist like a stack
Solution: Add the 'jumpoptions' setting to make the jumplist
          a stack.

Add an option for using jumplist like tag stack

related: vim/vim#7738
closes: vim/vim#13134

ported from NeoVim:

- https://neovim.io/doc/user/motion.html#jumplist-stack
- neovim/neovim@39094b3
- https://vi.stackexchange.com/questions/18344/how-to-change-jumplist-behavior

Based on the feedback in the previous PR, it looks like many people like
this option.

87018255e3

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Co-authored-by: butwerenotthereyet <58348703+butwerenotthereyet@users.noreply.github.com>
This commit is contained in:
zeertzjq
2023-09-21 07:37:03 +08:00
committed by GitHub
parent dc6c11394b
commit f094db0e5c
6 changed files with 113 additions and 65 deletions

View File

@@ -104,4 +104,70 @@ d
bwipe!
endfunc
" Test for 'jumpoptions'
func Test_jumpoptions()
new
call setline(1, range(1, 200))
clearjumps
set jumpoptions=stack
" Jump around to add some locations to the jump list.
normal 10G
normal 20G
normal 30G
normal 40G
normal 50G
let bnr = bufnr()
" discards the tail when navigating from the middle
exe "normal \<C-O>\<C-O>"
call assert_equal([
\ [{'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 10, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 20, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 30, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 40, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 50, 'bufnr': bnr, 'col': 0, 'coladd': 0}
\ ], 3], getjumplist())
" new jump location is added immediately after the last one
normal 90G
call assert_equal([
\ [{'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 10, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 20, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 30, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ ], 4], getjumplist())
" does not add the same location twice adjacently
normal 60G
normal 60G
call assert_equal([
\ [{'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 10, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 20, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 30, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 90, 'bufnr': bnr, 'col': 0, 'coladd': 0},
"\ Nvim: avoids useless/phantom jumps
"\ {'lnum': 60, 'bufnr': bnr, 'col': 0, 'coladd': 0},
"\ ], 6], getjumplist())
\ ], 5], getjumplist())
" does add the same location twice non adjacently
normal 10G
normal 20G
call assert_equal([
\ [{'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 10, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 20, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 30, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 90, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 60, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 10, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ ], 7], getjumplist())
set jumpoptions&
%bw!
endfunc
" vim: shiftwidth=2 sts=2 expandtab