İşte kabaca ne istediğinizi yapan bazı temel VimScript.
Orijinali gerçekten işareti ayarlamak için çağırmadan önce geçerli değeri saklamak için ma
geçiş mz
eşlemelerini geçersiz kılar . Biz de tanımlamak yoluyla söz konusu işareti geçmişini göstermek için.g:previous_marks
m
<Leader>ma
<Leader>mz
Muhtemelen bilgileri g:previous_marks
daha organize bir şekilde saklamak ve bir işareti hızlı bir şekilde geri yükleme yeteneğini eklemek (sadece konumları görmek yerine) isteyeceksiniz , ancak bu örnek bunun nasıl yapılabileceğini gösteriyor, daha fazla değişiklik bir egzersiz olarak bırakılıyor okuyucuya ;-)
let g:previous_marks = {}
fun! MyMark(mark)
let l:marks = ''
redir => l:marks
try
silent! execute 'marks ' . a:mark
catch
endtry
redir END
if l:marks != ''
if !has_key(g:previous_marks, a:mark)
let g:previous_marks[a:mark] = []
endif
call add(g:previous_marks[a:mark], split(l:marks, "\n")[1])
endif
execute 'normal! m' . a:mark
endfun
fun! ShowHistory(mark)
if !has_key(g:previous_marks, a:mark)
echoerr 'No history for ' . a:mark
return
endif
for l:line in g:previous_marks[a:mark]
echo l:line
endfor
endfun
fun! MakeMappings()
for l:char in range(97, 122)
let l:char = nr2char(l:char)
execute 'nnoremap <silent> m' . l:char . ' :call MyMark("' . l:char . '")<CR>'
execute 'nnoremap <silent> <Leader>m' . l:char . ' :call ShowHistory("' . l:char . '")<CR>'
endfor
endfun
call MakeMappings()