From 72814fb13f929ee7ab12a22144f0b00e178e0943 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sun, 10 Apr 2022 16:40:31 +0800 Subject: [PATCH] feat(bookmarks): add leaderf support for vim-bookmarks --- autoload/SpaceVim/layers/leaderf.vim | 42 ++++++++++++++++++++++++ bundle/vim-bookmarks/plugin/bookmark.vim | 2 ++ 2 files changed, 44 insertions(+) diff --git a/autoload/SpaceVim/layers/leaderf.vim b/autoload/SpaceVim/layers/leaderf.vim index 9b0bff59d..5f69f0e70 100644 --- a/autoload/SpaceVim/layers/leaderf.vim +++ b/autoload/SpaceVim/layers/leaderf.vim @@ -195,6 +195,21 @@ function! SpaceVim#layers#leaderf#config() abort \ 'after_enter' : string(s:_function('s:init_leaderf_win', 1))[10:-3] \ } + let g:Lf_Extensions.bookmarks = + \ { + \ 'source': string(s:_function('s:bookmarks', 1))[10:-3], + \ 'accept': string(s:_function('s:bookmarks_acp', 1))[10:-3], + \ 'highlights_def': { + \ 'Lf_register_name': '^".', + \ 'Lf_register_content': '\s\+.*', + \ }, + \ 'highlights_cmd': [ + \ 'hi def link Lf_register_name ModeMsg', + \ 'hi def link Lf_register_content Normal', + \ ], + \ 'after_enter' : string(s:_function('s:init_leaderf_win', 1))[10:-3] + \ } + let g:Lf_Extensions.locationlist = \ { \ 'source': string(s:_function('s:locationlist', 1))[10:-3], @@ -462,6 +477,33 @@ function! s:manpage_acp(line, args) abort endif endfunction +function! s:bookmarks(...) abort + let bookmarks = [] + let files = sort(bm#all_files()) + for file in files + let line_nrs = sort(bm#all_lines(file), "bm#compare_lines") + for line_nr in line_nrs + let bookmark = bm#get_bookmark_by_line(file, line_nr) + call add(bookmarks, printf("%s:%d:1:%s", file, line_nr, + \ bookmark.annotation !=# '' + \ ? "Annotation: " . bookmark.annotation + \ : (bookmark.content !=# "" ? bookmark.content + \ : "empty line") + \ )) + endfor + endfor + return bookmarks +endfunction + +function! s:bookmarks_acp(line, argvs) abort + let line = a:line + let filename = fnameescape(split(line, ':\d\+:')[0]) + let linenr = matchstr(line, ':\d\+:')[1:-2] + let colum = matchstr(line, '\(:\d\+\)\@<=:\d\+:')[1:-2] + exe 'e ' . filename + call cursor(linenr, colum) +endfunction + func! s:neoyank(...) abort let yank = [] for text in neoyank#_get_yank_histories()['"'] diff --git a/bundle/vim-bookmarks/plugin/bookmark.vim b/bundle/vim-bookmarks/plugin/bookmark.vim index e68b56a1e..68b0e106f 100644 --- a/bundle/vim-bookmarks/plugin/bookmark.vim +++ b/bundle/vim-bookmarks/plugin/bookmark.vim @@ -177,6 +177,8 @@ function! BookmarkShowAll() exec ":Unite vim_bookmarks" elseif exists(':CtrlP') == 2 && g:bookmark_disable_ctrlp == 0 exec ":CtrlPBookmark" + elseif exists(':Leaderf') + exe ':Leaderf bookmarks' else let oldformat = &errorformat " backup original format let &errorformat = "%f:%l:%m" " custom format for bookmarks