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
| let s:marks = []
if !exists('s:tags')
let s:tags = tempname()
endif
let &tags .= ','.s:tags
function! s:UpdateTags()
let lines = []
let i = 0
while i != len(s:marks)
let l = 'MarkRing'.i."\t". (s:marks[i].file) .
\ "\t" . ':call setpos(".",'.(string(s:marks[i].pos)).')'
call add(lines, l)
let i += 1
endwhile
call writefile(lines, s:tags)
" :exe 'sp '.s:tags
endfunction
function! s:PushMark() " {{{2
let m = getpos('.')
call add(s:marks, {'pos':m, 'file':expand('%:p')})
call s:UpdateTags()
exe 'tag MarkRing'.(len(s:marks)-1)
echo "mark pushed"
endfunction
function! s:PopMark() " {{{2
if empty(s:marks)
throw "MarkRing: no mark left in the stack"
endif
let m = remove(s:marks, -1)
call s:UpdateTags()
echo "mark poped"
" pop!
pop
endfunction
function! s:ClearRing() " {{{2
let s:marks = []
call s:UpdateTags()
endfunction |