summaryrefslogtreecommitdiffstats
path: root/vim/plugin/keywordprg.vim
blob: dfedd807315b292a1336811179aa625b13b34dde (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function! Help(visual, iskeyword, command)
    let l:iskeyword = &iskeyword
    for l:kw in a:iskeyword
        exe 'set iskeyword+=' . l:kw
    endfor
    if a:visual
        let l:oldreg = @a
        normal! gv"aygv
        let l:word = @a
        let @a = l:oldreg
    else
        let l:word = expand('<cword>')
    endif
    let &iskeyword = l:iskeyword

    exe 'noswapfile ' . &helpheight . 'new ' . l:word
    setlocal buftype=nofile
    setlocal bufhidden=wipe
    setlocal nobuflisted

    setlocal modifiable
    exe 'call ' . a:command . '("' . l:word . '")'
    normal! ggdd
    setlocal nomodifiable
endfunction

function! s:man(word)
    exe 'silent read! man -Pcat ' . a:word
    setlocal filetype=man
endfunction

nnoremap <silent>K :call Help(0, [], '<SID>man')<CR>
xnoremap <silent>K :call Help(1, [], '<SID>man')<CR>