Wikia

Vim Tips Wiki

Changes: Access Python Help

Edit

Back to page

(Using a shell (simple))
Line 16: Line 16:
 
To access Python documentation for the word under the cursor using, this mapping can be used
 
To access Python documentation for the word under the cursor using, this mapping can be used
 
<pre>
 
<pre>
map <buffer> K :execute "!pydoc " . expand("<lt>cword>")<CR>
+
map <buffer> K :execute "!pydoc " . expand("<cword>")<CR>
 
</pre>
 
</pre>
   
Line 65: Line 65:
 
map <buffer> K :let save_isk = &iskeyword \|
 
map <buffer> K :let save_isk = &iskeyword \|
 
\ set iskeyword+=. \|
 
\ set iskeyword+=. \|
\ execute "Pyhelp " . expand("<lt>cword>") \|
+
\ execute "Pyhelp " . expand("<cword>") \|
 
\ let &iskeyword = save_isk<CR>
 
\ let &iskeyword = save_isk<CR>
 
command! -nargs=1 Pyhelp :call ShowPydoc(<f-args>)
 
command! -nargs=1 Pyhelp :call ShowPydoc(<f-args>)

Revision as of 19:18, January 22, 2013

Tip 556 Printable Monobook Previous Next

created 2003 · complexity basic · author Fritz Cizmarov · version 6.0


This tip presents several ways to access Python documentation using pydoc. The recommended location for the commands in this snippet is ~/.vim/after/ftplugin/python.vim, or $HOME\vimfiles\after\ftplugin\python.vim on Windows.

Using a shell (simple)

To access Python documentation for the word under the cursor using, this mapping can be used

map <buffer> K :execute "!pydoc " . expand("<cword>")<CR>

or for Windows

map <buffer> K :execute "!C:/<PythonDir>/Lib/pydoc.py " . expand("<cword>")<CR>

To keep the documentation open while you continue editing, this mapping can be used instead

map <buffer> K :execute "!xterm -e 'pydoc " . expand("<cword>") . "'"<CR>

or for Windows

map <buffer> K :execute "!start cmd /c C:/<PythonDir>/Lib/pydoc.py " . \|
    \ expand("<cword>")<CR>

These mappings only work for single words. To display the documentation for a method or a class in a module, for example os.popen(), modify the mapping in this way

map <buffer> K :let save_isk = &iskeyword \|
    \ set iskeyword+=. \|
    \ execute "!pydoc " . expand("<cword>") \|
    \ let &iskeyword = save_isk<CR>

It is not recommended to permanently add . to 'iskeyword'.

Using the preview window or a scratch buffer

This snippet allows you to use the command :Pyhelp <string> to preview Python documentation in the preview window. It also remaps K in the same manner as above.

If Vim is compiled with +python, it automatically finds the path to pydoc.py. Otherwise, set the s:pydoc_path variable to a suitable value. This seemingly indirect approach is used in an effort to make the snippet platform agnostic.

if has("python")
  " let python figure out the path to pydoc
  python << EOF
import sys
import vim
vim.command("let s:pydoc_path=\'" + sys.prefix + "/lib/pydoc.py\'")
EOF
else
  " manually set the path to pydoc
  let s:pydoc_path = "/path/to/python/lib/pydoc.py"
endif

map <buffer> K :let save_isk = &iskeyword \|
    \ set iskeyword+=. \|
    \ execute "Pyhelp " . expand("<cword>") \|
    \ let &iskeyword = save_isk<CR>
command! -nargs=1 Pyhelp :call ShowPydoc(<f-args>)
function! ShowPydoc(what)
  " compose a tempfile path using the argument to the function
  let path = $TEMP . '/' . a:what . '.pydoc'
  " run pydoc on the argument, and redirect the output to the tempfile
  call system(shellescape(s:pydoc_path . " " . a:what . " > " . path))
  " open the tempfile in the preview window
  execute "pedit " . path
endfunction

If, instead, you prefer using a scratch buffer to the preview window, change the ShowPydoc function to

function! ShowPydoc(what)
  let bufname = a:what . ".pydoc"
  " check if the buffer exists already
  if bufexists(bufname)
    let winnr = bufwinnr(bufname)
    if winnr != -1
      " if the buffer is already displayed, switch to that window
      execute winnr . "wincmd w"
    else
      " otherwise, open the buffer in a split
      execute "sbuffer " . bufname
    endif
  else
    " create a new buffer, set the nofile buftype and don't display it in the
    " buffer list
    execute "split " . bufname
    setlocal buftype=nofile
    setlocal nobuflisted
    " read the output from pydoc
    execute "r !" . shellescape(s:pydoc_path . " " . a:what)
  endif
  " go to the first line of the document
  1
endfunction

See also

References

Comments

For an alternative approach to the same problem, try the pyref.vim plug-in ( script#3104) which provides context-sensitive documentation for Python source code by looking up help topics on docs.python.org (or a local mirror on your file system) and showing them in your favorite web browser.

Around Wikia's network

Random Wiki