Параметр viminfo
может содержать параметр !
, который позволяет хранить любые глобальные переменные с заглавными буквами в файле viminfo. Используя это, вы можете определить переменную с именем g:BOOKMARKS
и сохранить там свои закладки.
Вот некоторый vimscript, который вы можете использовать для этого:
set viminfo+=!
if !exists('g:BOOKMARKS')
let g:BOOKMARKS = {}
endif
" Add the current [filename, cursor position] in g:BOOKMARKS under the given
" name
command! -nargs=1 Bookmark call s:Bookmark(<f-args>)
function! s:Bookmark(name)
let file = expand('%:p')
let cursor = getpos('.')
if file != ''
let g:BOOKMARKS[a:name] = [file, cursor]
else
echom "No file"
endif
wviminfo
endfunction
" Delete the user-chosen bookmark
command! -nargs=1 -complete=custom,s:BookmarkNames DelBookmark call s:DelBookmark(<f-args>)
function! s:DelBookmark(name)
if !has_key(g:BOOKMARKS, a:name)
return
endif
call remove(g:BOOKMARKS, a:name)
wviminfo
endfunction
" Go to the user-chosen bookmark
command! -nargs=1 -complete=custom,s:BookmarkNames GotoBookmark call s:GotoBookmark(<f-args>)
function! s:GotoBookmark(name)
if !has_key(g:BOOKMARKS, a:name)
return
endif
let [filename, cursor] = g:BOOKMARKS[a:name]
exe 'edit '.filename
call setpos('.', cursor)
endfunction
" Completion function for choosing bookmarks
function! s:BookmarkNames(A, L, P)
return join(sort(keys(g:BOOKMARKS)), "\n")
endfunction
Я не уверен, насколько читаем код, но в основном команда Bookmark
принимает один параметр для использования в качестве имени. Он сохранит текущее имя файла и позицию курсора в словаре g:BOOKMARKS
. Вы можете использовать команду GotoBookmark
с именем метки, чтобы перейти к ней. DelBookmark
работает аналогичным образом, но удаляет данную отметку. Обе функции завершены табуляцией.
Еще один способ прыгнуть через них с помощью этой команды:
" Open all bookmarks in the quickfix window
command! CopenBookmarks call s:CopenBookmarks()
function! s:CopenBookmarks()
let choices = []
for [name, place] in items(g:BOOKMARKS)
let [filename, cursor] = place
call add(choices, {
\ 'text': name,
\ 'filename': filename,
\ 'lnum': cursor[1],
\ 'col': cursor[2]
\ })
endfor
call setqflist(choices)
copen
endfunction
CopenBookmarks
загрузит закладки в окне быстрого исправления, которое мне кажется приятным интерфейсом.
Это решение похоже на решение Эрика - оно использует файл .viminfo
, поэтому, если что-то пойдет не так, вы, вероятно, потеряете свои оценки. А если вы сохраните свои отметки в одном экземпляре vim, они не будут сразу доступны в другом.
Я не знаю, насколько вам удобно с vimscript, поэтому на всякий случай - чтобы использовать это, вы можете поместить код в файл в вашем каталоге plugin
vimfiles, например plugin/bookmarks.vim
. Должно быть вполне достаточно. Вот и весь код в гисте: https://gist.github.com/1371174
EDIT : Немного изменен интерфейс для решения. Оригинальную версию можно найти в истории Gist.