forked from liuchengxu/vim-clap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjumps.vim
46 lines (39 loc) · 1.12 KB
/
jumps.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
" Author: liuchengxu <[email protected]>
" Description: List the jump list with the preview.
let s:save_cpo = &cpoptions
set cpoptions&vim
let s:jumps = {}
function! s:jumps.source() abort
let cout = clap#api#win_execute(g:clap.start.winid, 'jumps')
let s:jumplist = split(cout, '\n')
return [s:jumplist[0]] + reverse(s:jumplist[1:])
endfunction
function! s:jumps.sink(line) abort
if empty(a:line)
return
endif
let idx = index(s:jumplist, a:line)
if idx == -1
return
endif
let pointer = match(s:jumplist, '\v^\s*\>')
if pointer ==# a:line
return
endif
let delta = idx - pointer
let cmd = delta < 0 ? abs(delta)."\<C-O>" : delta."\<C-I>"
execute 'normal!' cmd
normal! zz
endfunction
function! s:jumps.on_move() abort
let curline = g:clap.display.getcurline()
let matched = matchlist(curline, '^\s\+\(\d\+\)\s\+\(\d\+\)\s\+\(\d\+\)\s\+\(.*\)$')
if len(matched) < 5
return
endif
call clap#provider#marks#preview_impl(matched[2], matched[3], matched[4])
endfunction
let s:jumps.syntax = 'clap_jumps'
let g:clap#provider#jumps# = s:jumps
let &cpoptions = s:save_cpo
unlet s:save_cpo