unite-function-list

:Unite function……ではなくて、:help function-list を unite.vim で出力したい。みたいな話があったので簡単に書いてみた。

let s:source = {
\   "name" : "function-list",
\}


function! s:get_functionlist(help)
    if !filereadable(a:help)
        return []
    endif
    let file = map(readfile(a:help), "{ 'text' : v:val, 'line' : v:key }")
    let start = filter(copy(file), 'v:val.text =~ ''\*function-list\*''')[0].line
    let end   = filter(copy(file[start : ]), 'v:val.text =~ ''^==============================================================================$''')[0].line
    return map(file[start : end], "v:val.text")
endfunction


function! s:source.async_gather_candidates(args, context)
    let help = get(split(globpath(&rtp, "doc/usr_41.*"), '\n'), 1, "")
    let candidates = s:get_functionlist(help)
    return map(candidates, '{ "word" : v:val }')
endfunction


call unite#define_source(s:source)
unlet s:source

http://i.gyazo.com/34a2984dc295da9502187b580f21edae.png


実装は単純に doc ファイルを読み込んで表示しているだけです。
本当は unite-source を定義しないでできないかなーと思っていたけど無理そげだったので泣く泣く専用の unite-source を定義することに。
こういうことをするために任意のファイルを表示するだけの unite-source がほしいかもしれない