大まかにあなたが望むことをするいくつかの基本的なVimScriptはここにあります。
実際のマークを設定するために元のコードを呼び出す前に、現在の値を格納するためにma
スルーmz
マッピングをオーバーライドします。また、定義して言ったマークの履歴を表示します。g:previous_marks
m
<Leader>ma
<Leader>mz
情報をg:previous_marks
より整理された方法で保存し、(場所を表示するだけでなく)マークをすばやく復元する機能を追加することをお勧めしますが、この例ではその方法を示しています。読者へ;-)
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()