" Copyright 2011 The Go Authors. All rights reserved. " Use of this source code is governed by a BSD-style " license that can be found in the LICENSE file. " " godoc.vim: Vim command to see godoc. if exists("g:loaded_godoc") finish endif let g:loaded_godoc = 1 let s:buf_nr = -1 let s:last_word = '' function! s:GodocView() if !bufexists(s:buf_nr) leftabove new file `="[Godoc]"` let s:buf_nr = bufnr('%') elseif bufwinnr(s:buf_nr) == -1 leftabove split execute s:buf_nr . 'buffer' delete _ elseif bufwinnr(s:buf_nr) != bufwinnr('%') execute bufwinnr(s:buf_nr) . 'wincmd w' endif setlocal filetype=godoc setlocal bufhidden=delete setlocal buftype=nofile setlocal noswapfile setlocal nobuflisted setlocal modifiable setlocal nocursorline setlocal nocursorcolumn setlocal iskeyword+=: setlocal iskeyword-=- nnoremap K :Godoc au BufHidden call let buf_nr = -1 endfunction function! s:GodocWord(word) let word = a:word silent! let content = system('godoc ' . word) if v:shell_error || !len(content) if len(s:last_word) silent! let content = system('godoc ' . s:last_word.'/'.word) if v:shell_error || !len(content) echo 'No documentation found for "' . word . '".' return endif let word = s:last_word.'/'.word else echo 'No documentation found for "' . word . '".' return endif endif let s:last_word = word silent! call s:GodocView() setlocal modifiable silent! %d _ silent! put! =content silent! normal gg setlocal nomodifiable setfiletype godoc endfunction function! s:Godoc(...) let word = join(a:000, ' ') if !len(word) let word = expand('') endif let word = substitute(word, '[^a-zA-Z0-9\/]', '', 'g') if !len(word) return endif call s:GodocWord(word) endfunction command! -nargs=* -range -complete=customlist,go#complete#Package Godoc :call s:Godoc() nnoremap (godoc-keyword) :call Godoc('') " vim:ts=4:sw=4:et