home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / unix / vim-6.2.tar.bz2 / vim-6.2.tar / vim62 / runtime / doc / if_pyth.txt < prev    next >
Encoding:
Text File  |  2003-06-01  |  10.1 KB  |  270 lines

  1. *if_pyth.txt*   For Vim version 6.2.  Last change: 2002 Mar 11
  2.  
  3.  
  4.           VIM REFERENCE MANUAL    by Paul Moore
  5.  
  6.  
  7. The Python Interface to Vim                *python* *Python*
  8.  
  9. 1. Commands            |python-commands|
  10. 2. The vim module        |python-vim|
  11. 3. Buffer objects        |python-buffer|
  12. 4. Range objects        |python-range|
  13. 5. Window objects        |python-window|
  14.  
  15. {Vi does not have any of these commands}
  16.  
  17. The Python interface is available only when Vim was compiled with the
  18. |+python| feature.
  19.  
  20. ==============================================================================
  21. 1. Commands                        *python-commands*
  22.  
  23.                     *:python* *:py* *E205* *E263* *E264*
  24. :[range]py[thon] {stmt}
  25.             Execute Python statement {stmt}.
  26.  
  27. :[range]py[thon] << {endmarker}
  28. {script}
  29. {endmarker}
  30.             Execute Python script {script}.
  31.             Note: This command doesn't work when the Python
  32.             feature wasn't compiled in.  To avoid errors, see
  33.             |script-here|.
  34.  
  35. {endmarker} must NOT be preceded by any white space.  If {endmarker} is
  36. omitted from after the "<<", a dot '.' must be used after {script}, like
  37. for the |:append| and |:insert| commands.
  38. This form of the |:python| command is mainly useful for including python code
  39. in Vim scripts.
  40.  
  41. Example: >
  42.     function! IcecreamInitialize()
  43.     python << EOF
  44.     class StrawberryIcecream:
  45.         def __call__(self):
  46.             print 'EAT ME'
  47.     EOF
  48.     endfunction
  49. <
  50. Note: Python is very sensitive to the indenting.  Also make sure the "class"
  51. line and "EOF" do not have any indent.
  52.  
  53.                             *:pyfile* *:pyf*
  54. :[range]pyf[ile] {file}    Execute the Python script in {file}.  {not in Vi}
  55.  
  56. Both of these commands do essentially the same thing - they execute a piece of
  57. Python code, with the "current range" |python-range| set to the given line
  58. range.
  59.  
  60. In the case of :python, the code to execute is in the command-line.
  61. In the case of :pyfile, the code to execute is the contents of the given file.
  62.  
  63. Python commands cannot be used in the |sandbox|.
  64.  
  65. Here are some examples                    *python-examples*  >
  66.  
  67.     :python from vim import *
  68.     :python from string import upper
  69.     :python current.line = upper(current.line)
  70.     :python print "Hello"
  71.     :python str = current.buffer[42]
  72.  
  73. (Note that changes - like the imports - persist from one command to the next,
  74. just like in the Python interpreter.)
  75.  
  76. ==============================================================================
  77. 2. The vim module                    *python-vim*
  78.  
  79. Python code gets all of its access to vim (with one exception - see
  80. |python-output| below) via the "vim" module. The vim module implements two
  81. methods, three constants, and one error object.
  82.  
  83. Overview >
  84.     print "Hello"            # displays a message
  85.     vim.command(cmd)        # execute an ex command
  86.     w = vim.windows[n]        # gets window "n"
  87.     cw = vim.current.window        # gets the current window
  88.     b = vim.buffers[n]        # gets buffer "n"
  89.     cb = vim.current.buffer        # gets the current buffer
  90.     w.height = lines        # sets the window height
  91.     w.cursor = (row, col)        # sets the window cursor position
  92.     pos = w.cursor            # gets a tuple (row, col)
  93.     name = b.name            # gets the buffer file name
  94.     line = b[n]            # gets a line from the buffer
  95.     lines = b[n:m]            # gets a list of lines
  96.     num = len(b)            # gets the number of lines
  97.     b[n] = str            # sets a line in the buffer
  98.     b[n:m] = [str1, str2, str3]    # sets a number of lines at once
  99.     del b[n]            # deletes a line
  100.     del b[n:m]            # deletes a number of lines
  101.  
  102. Methods
  103.     vim.command(str)                *python-command*
  104.     Executes the vim (ex-mode) command str. Returns None.
  105.     Examples: >
  106.         vim.command("set tw=72")
  107.         vim.command("%s/aaa/bbb/g")
  108. <    The following definition executes Normal mode commands: >
  109.         def normal(str):
  110.             vim.command("normal "+str)
  111.         # Note the use of single quotes to delimit a string containing
  112.         # double quotes
  113.         normal('"a2dd"aP')
  114. <
  115.     vim.eval(str)                    *python-eval*
  116.     Evaluates the expression str using the vim internal expression
  117.     evaluator (see |expression|). Returns the expression result as a
  118.     string.
  119.     Examples: >
  120.         text_width = vim.eval("&tw")
  121.         str = vim.eval("12+12")        # NB result is a string! Use
  122.                         # string.atoi() to convert to
  123.                         # a number.
  124.  
  125. Error object
  126.     vim.error                    *python-error*
  127.     Upon encountering a Vim error, Python raises an exception of type
  128.     vim.error.
  129.     Example: >
  130.         try:
  131.             vim.command("put a")
  132.         except vim.error:
  133.             # nothing in register a
  134.  
  135. Constants
  136.     Note that these are not actually constants - you could reassign them.
  137.     But this is silly, as you would then lose access to the vim objects
  138.     to which the variables referred.
  139.  
  140.     vim.buffers                    *python-buffers*
  141.     A sequence object providing access to the list of vim buffers. The
  142.     object supports the following operations: >
  143.         b = vim.buffers[i]    # Indexing (read-only)
  144.         b in vim.buffers    # Membership test
  145.         n = len(vim.buffers)    # Number of elements
  146.         for b in vim.buffers:    # Sequential access
  147. <
  148.     vim.windows                    *python-windows*
  149.     A sequence object providing access to the list of vim windows. The
  150.     object supports the following operations: >
  151.         w = vim.windows[i]    # Indexing (read-only)
  152.         w in vim.windows    # Membership test
  153.         n = len(vim.windows)    # Number of elements
  154.         for w in vim.windows:    # Sequential access
  155. <
  156.     vim.current                    *python-current*
  157.     An object providing access (via specific attributes) to various
  158.     "current" objects available in vim:
  159.         vim.current.line    The current line (RW)        String
  160.         vim.current.buffer    The current buffer (RO)        Buffer
  161.         vim.current.window    The current window (RO)        Window
  162.         vim.current.range    The current line range (RO)    Range
  163.  
  164.     The last case deserves a little explanation. When the :python or
  165.     :pyfile command specifies a range, this range of lines becomes the
  166.     "current range". A range is a bit like a buffer, but with all access
  167.     restricted to a subset of lines. See |python-range| for more details.
  168.  
  169. Output from Python                    *python-output*
  170.     Vim displays all Python code output in the Vim message area.  Normal
  171.     output appears as information messages, and error output appears as
  172.     error messages.
  173.  
  174.     In implementation terms, this means that all output to sys.stdout
  175.     (including the output from print statements) appears as information
  176.     messages, and all output to sys.stderr (including error tracebacks)
  177.     appears as error messages.
  178.  
  179.                             *python-input*
  180.     Input (via sys.stdin, including input() and raw_input()) is not
  181.     supported, and may cause the program to crash. This should probably be
  182.     fixed.
  183.  
  184. ==============================================================================
  185. 3. Buffer objects                    *python-buffer*
  186.  
  187. Buffer objects represent vim buffers. You can obtain them in a number of ways:
  188.     - via vim.current.buffer (|python-current|)
  189.     - from indexing vim.buffers (|python-buffers|)
  190.     - from the "buffer" attribute of a window (|python-window|)
  191.  
  192. Buffer objects have one read-only attribute - name - the full file name for
  193. the buffer. They also have three methods (append, mark, and range; see below).
  194.  
  195. You can also treat buffer objects as sequence objects. In this context, they
  196. act as if they were lists (yes, they are mutable) of strings, with each
  197. element being a line of the buffer. All of the usual sequence operations,
  198. including indexing, index assignment, slicing and slice assignment, work as
  199. you would expect. Note that the result of indexing (slicing) a buffer is a
  200. string (list of strings). This has one unusual consequence - b[:] is different
  201. from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
  202. "b = None" merely updates the variable b, with no effect on the buffer.
  203.  
  204. Buffer indexes start at zero, as is normal in Python. This differs from vim
  205. line numbers, which start from 1. This is particularly relevant when dealing
  206. with marks (see below) which use vim line numbers.
  207.  
  208. The buffer object methods are:
  209.     b.append(str)    Append a line to the buffer
  210.     b.append(list)    Append a list of lines to the buffer
  211.             Note that the option of supplying a list of strings to
  212.             the append method differs from the equivalent method
  213.             for Python's built-in list objects.
  214.     b.mark(name)    Return a tuple (row,col) representing the position
  215.             of the named mark (can also get the []"<> marks)
  216.     b.range(s,e)    Return a range object (see |python-range|) which
  217.             represents the part of the given buffer between line
  218.             numbers s and e (inclusive).
  219.  
  220. Examples (assume b is the current buffer) >
  221.     print b.name        # write the buffer file name
  222.     b[0] = "hello!!!"    # replace the top line
  223.     b[:] = None        # delete the whole buffer
  224.     del b[:]        # delete the whole buffer (same as above)
  225.     b[0:0] = [ "a line" ]    # add a line at the top
  226.     del b[2]        # delete a line (the third)
  227.     b.append("bottom")    # add a line at the bottom
  228.     n = len(b)        # number of lines
  229.     (row,col) = b.mark('a') # named mark
  230.     r = b.range(1,5)    # a sub-range of the buffer
  231.  
  232. ==============================================================================
  233. 4. Range objects                    *python-range*
  234.  
  235. Range objects represent a part of a vim buffer. You can obtain them in a
  236. number of ways:
  237.     - via vim.current.range (|python-current|)
  238.     - from a buffer's range() method (|python-buffer|)
  239.  
  240. A range object is almost identical in operation to a buffer object. However,
  241. all operations are restricted to the lines within the range (this line range
  242. can, of course, change as a result of slice assignments, line deletions, or
  243. the range.append() method).
  244.  
  245. Unlike buffers, ranges do not have a "name" attribute, nor do they have mark()
  246. or range() methods. They do have an append() method, however, which adds
  247. line(s) to the end of the range.
  248.  
  249. ==============================================================================
  250. 5. Window objects                    *python-window*
  251.  
  252. Window objects represent vim windows. You can obtain them in a number of ways:
  253.     - via vim.current.window (|python-current|)
  254.     - from indexing vim.windows (|python-windows|)
  255.  
  256. You can manipulate window objects only through their attributes. They have no
  257. methods, and no sequence or other interface.
  258.  
  259. Window attributes are:
  260.     buffer (read-only)    The buffer displayed in this window
  261.     cursor (read-write)    The current cursor position in the window
  262.                 This is a tuple, (row,col).
  263.     height (read-write)    The window height, in rows
  264.     width (read-write)    The window width, in columns
  265. The height attribute is writable only if the screen is split horizontally.
  266. The width attribute is writable only if the screen is split vertically.
  267.  
  268. ==============================================================================
  269.  vim:tw=78:ts=8:ft=help:norl:
  270.