다음은 원하는 것을 대략적으로 수행하는 기본 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()