diff --git a/.vim/plugin/pydoc.vim b/.vim/plugin/pydoc.vim new file mode 100644 index 0000000..0b8fb4d --- /dev/null +++ b/.vim/plugin/pydoc.vim @@ -0,0 +1,111 @@ +"pydoc.vim: pydoc integration for vim +"performs searches and can display the documentation of python modules +"Author: André Kelpe +"Author: Romain Chossart +"Author: Matthias Vogelgesang +"http://www.vim.org/scripts/script.php?script_id=910 +"This plugin integrates the pydoc into vim. You can view the +"documentation of a module by using :Pydoc foo.bar.baz or search +"a word (uses pydoc -k) in the documentation by typing PydocSearch +"foobar. You can also view the documentation of the word under the +"cursor by pressing pw or the WORD (see :help WORD) by pressing +"pW. "This is very useful if you want to jump to a module which was found by +"PydocSearch. To have a browser like feeling you can use u and CTRL-R to +"go back and forward, just like editing normal text. + +"If you want to use the script and pydoc is not in your PATH, just put a +"line like + +" let g:pydoc_cmd = \"/usr/bin/pydoc" (without the backslash!!) + +"in your .vimrc + + +"pydoc.vim is free software, you can redistribute or modify +"it under the terms of the GNU General Public License Version 2 or any +"later Version (see http://www.gnu.org/copyleft/gpl.html for details). + +"Please feel free to contact me. + + +set switchbuf=useopen +function! ShowPyDoc(name, type) + if !exists('g:pydoc_cmd') + let g:pydoc_cmd = 'pydoc' + endif + + if bufloaded("__doc__") >0 + let l:buf_is_new = 0 + else + let l:buf_is_new = 1 + endif + + if bufnr("__doc__") >0 + execute "sb __doc__" + else + execute 'split __doc__' + endif + setlocal noswapfile + set buftype=nofile + setlocal modifiable + normal ggdG + " remove function/method arguments + let s:name2 = substitute(a:name, '(.*', '', 'g' ) + " remove all colons + let s:name2 = substitute(s:name2, ':', '', 'g' ) + if a:type==1 + execute "silent read ! " . g:pydoc_cmd . " " . s:name2 + else + execute "silent read ! " . g:pydoc_cmd . " -k " . s:name2 + endif + setlocal nomodified + set filetype=man + normal 1G + + if !exists('g:pydoc_wh') + let g:pydoc_wh = 10 + end + resize -999 + execute "silent resize +" . g:pydoc_wh + + if !exists('g:pydoc_highlight') + let g:pydoc_highlight = 1 + endif + if g:pydoc_highlight == 1 + call Highlight(s:name2) + endif + + let l:line = getline(2) + if l:line =~ "^no Python documentation found for.*$" + if l:buf_is_new + execute "bd!" + else + normal u + endif + redraw + echohl WarningMsg | echo l:line | echohl None + endif +endfunction + +"highlighting +function! Highlight(name) + execute "sb __doc__" + set filetype=man + "syn on + execute 'syntax keyword pydoc '.a:name + hi pydoc gui=reverse +endfunction + +"mappings +au FileType python,man map pw :call ShowPyDoc('', 1) +au FileType python,man map pW :call ShowPyDoc('', 1) +au FileType python,man map pk :call ShowPyDoc('', 0) +au FileType python,man map pK :call ShowPyDoc('', 0) + +" remap the K (or 'help') key +nnoremap K :call ShowPyDoc(expand(""), 1) + + +"commands +command! -nargs=1 Pydoc :call ShowPyDoc('', 1) +command! -nargs=* PydocSearch :call ShowPyDoc('', 0) diff --git a/.vimrc b/.vimrc index ea80f9e..d7f8351 100644 --- a/.vimrc +++ b/.vimrc @@ -325,12 +325,16 @@ nmap :split =expand("%:h") . "/" " allow embedded man page runtime! ftplugin/man.vim " show vimrc with shift+F1 -"nmap :sview ~/.vimrcgg +nmap :tabe ~/.vimrcgg "imap " show contextual help with F1 function Help() try - execute "Man " . expand("") + if b:current_syntax == "python" + :call ShowPyDoc(expand(""), 1) + else + execute "Man " . expand("") + endif catch /:E149:/ execute "help " . expand("") endtry