Install vim73
[msysgit/mtrensch.git] / share / vim / vim73 / doc / if_pyth.txt
blobd3242399b977d2603a04abbfb461e005a55dcf4f
1 *if_pyth.txt*   For Vim version 7.3.  Last change: 2010 Aug 13
4                   VIM REFERENCE MANUAL    by Paul Moore
7 The Python Interface to Vim                             *python* *Python*
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 6. Dynamic loading              |python-dynamic|
15 7. Python 3                     |python3|
17 {Vi does not have any of these commands}
19 The Python 2.x interface is available only when Vim was compiled with the
20 |+python| feature.
21 The Python 3 interface is available only when Vim was compiled with the
22 |+python3| feature.
24 ==============================================================================
25 1. Commands                                             *python-commands*
27                                         *:python* *:py* *E205* *E263* *E264*
28 :[range]py[thon] {stmt}
29                         Execute Python statement {stmt}.
31 :[range]py[thon] << {endmarker}
32 {script}
33 {endmarker}
34                         Execute Python script {script}.
35                         Note: This command doesn't work when the Python
36                         feature wasn't compiled in.  To avoid errors, see
37                         |script-here|.
39 {endmarker} must NOT be preceded by any white space.  If {endmarker} is
40 omitted from after the "<<", a dot '.' must be used after {script}, like
41 for the |:append| and |:insert| commands.
42 This form of the |:python| command is mainly useful for including python code
43 in Vim scripts.
45 Example: >
46         function! IcecreamInitialize()
47         python << EOF
48         class StrawberryIcecream:
49                 def __call__(self):
50                         print 'EAT ME'
51         EOF
52         endfunction
54 Note: Python is very sensitive to the indenting.  Also make sure the "class"
55 line and "EOF" do not have any indent.
57                                                         *:pyfile* *:pyf*
58 :[range]pyf[ile] {file}
59                         Execute the Python script in {file}.  The whole
60                         argument is used as a single file name.  {not in Vi}
62 Both of these commands do essentially the same thing - they execute a piece of
63 Python code, with the "current range" |python-range| set to the given line
64 range.
66 In the case of :python, the code to execute is in the command-line.
67 In the case of :pyfile, the code to execute is the contents of the given file.
69 Python commands cannot be used in the |sandbox|.
71 To pass arguments you need to set sys.argv[] explicitly.  Example: >
73         :python import sys
74         :python sys.argv = ["foo", "bar"]
75         :pyfile myscript.py
77 Here are some examples                                  *python-examples*  >
79         :python from vim import *
80         :python from string import upper
81         :python current.line = upper(current.line)
82         :python print "Hello"
83         :python str = current.buffer[42]
85 (Note that changes - like the imports - persist from one command to the next,
86 just like in the Python interpreter.)
88 ==============================================================================
89 2. The vim module                                       *python-vim*
91 Python code gets all of its access to vim (with one exception - see
92 |python-output| below) via the "vim" module.  The vim module implements two
93 methods, three constants, and one error object.  You need to import the vim
94 module before using it: >
95         :python import vim
97 Overview >
98         :py print "Hello"               # displays a message
99         :py vim.command(cmd)            # execute an Ex command
100         :py w = vim.windows[n]          # gets window "n"
101         :py cw = vim.current.window     # gets the current window
102         :py b = vim.buffers[n]          # gets buffer "n"
103         :py cb = vim.current.buffer     # gets the current buffer
104         :py w.height = lines            # sets the window height
105         :py w.cursor = (row, col)       # sets the window cursor position
106         :py pos = w.cursor              # gets a tuple (row, col)
107         :py name = b.name               # gets the buffer file name
108         :py line = b[n]                 # gets a line from the buffer
109         :py lines = b[n:m]              # gets a list of lines
110         :py num = len(b)                # gets the number of lines
111         :py b[n] = str                  # sets a line in the buffer
112         :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
113         :py del b[n]                    # deletes a line
114         :py del b[n:m]                  # deletes a number of lines
117 Methods of the "vim" module
119 vim.command(str)                                        *python-command*
120         Executes the vim (ex-mode) command str.  Returns None.
121         Examples: >
122             :py vim.command("set tw=72")
123             :py vim.command("%s/aaa/bbb/g")
124 <       The following definition executes Normal mode commands: >
125                 def normal(str):
126                         vim.command("normal "+str)
127                 # Note the use of single quotes to delimit a string containing
128                 # double quotes
129                 normal('"a2dd"aP')
130 <                                                               *E659*
131         The ":python" command cannot be used recursively with Python 2.2 and
132         older.  This only works with Python 2.3 and later: >
133             :py vim.command("python print 'Hello again Python'")
135 vim.eval(str)                                           *python-eval*
136         Evaluates the expression str using the vim internal expression
137         evaluator (see |expression|).  Returns the expression result as:
138         - a string if the Vim expression evaluates to a string or number
139         - a list if the Vim expression evaluates to a Vim list
140         - a dictionary if the Vim expression evaluates to a Vim dictionary
141         Dictionaries and lists are recursively expanded.
142         Examples: >
143             :py text_width = vim.eval("&tw")
144             :py str = vim.eval("12+12")         # NB result is a string! Use
145                                                 # string.atoi() to convert to
146                                                 # a number.
148             :py tagList = vim.eval('taglist("eval_expr")')
149 <       The latter will return a python list of python dicts, for instance:
150         [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
151         'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
155 Error object of the "vim" module
157 vim.error                                               *python-error*
158         Upon encountering a Vim error, Python raises an exception of type
159         vim.error.
160         Example: >
161                 try:
162                         vim.command("put a")
163                 except vim.error:
164                         # nothing in register a
166 Constants of the "vim" module
168         Note that these are not actually constants - you could reassign them.
169         But this is silly, as you would then lose access to the vim objects
170         to which the variables referred.
172 vim.buffers                                             *python-buffers*
173         A sequence object providing access to the list of vim buffers.  The
174         object supports the following operations: >
175             :py b = vim.buffers[i]      # Indexing (read-only)
176             :py b in vim.buffers        # Membership test
177             :py n = len(vim.buffers)    # Number of elements
178             :py for b in vim.buffers:   # Sequential access
180 vim.windows                                             *python-windows*
181         A sequence object providing access to the list of vim windows.  The
182         object supports the following operations: >
183             :py w = vim.windows[i]      # Indexing (read-only)
184             :py w in vim.windows        # Membership test
185             :py n = len(vim.windows)    # Number of elements
186             :py for w in vim.windows:   # Sequential access
188 vim.current                                             *python-current*
189         An object providing access (via specific attributes) to various
190         "current" objects available in vim:
191                 vim.current.line        The current line (RW)           String
192                 vim.current.buffer      The current buffer (RO)         Buffer
193                 vim.current.window      The current window (RO)         Window
194                 vim.current.range       The current line range (RO)     Range
196         The last case deserves a little explanation.  When the :python or
197         :pyfile command specifies a range, this range of lines becomes the
198         "current range".  A range is a bit like a buffer, but with all access
199         restricted to a subset of lines.  See |python-range| for more details.
202 Output from Python                                      *python-output*
203         Vim displays all Python code output in the Vim message area.  Normal
204         output appears as information messages, and error output appears as
205         error messages.
207         In implementation terms, this means that all output to sys.stdout
208         (including the output from print statements) appears as information
209         messages, and all output to sys.stderr (including error tracebacks)
210         appears as error messages.
212                                                         *python-input*
213         Input (via sys.stdin, including input() and raw_input()) is not
214         supported, and may cause the program to crash.  This should probably be
215         fixed.
217 ==============================================================================
218 3. Buffer objects                                       *python-buffer*
220 Buffer objects represent vim buffers.  You can obtain them in a number of ways:
221         - via vim.current.buffer (|python-current|)
222         - from indexing vim.buffers (|python-buffers|)
223         - from the "buffer" attribute of a window (|python-window|)
225 Buffer objects have one read-only attribute - name - the full file name for
226 the buffer.  They also have three methods (append, mark, and range; see below).
228 You can also treat buffer objects as sequence objects.  In this context, they
229 act as if they were lists (yes, they are mutable) of strings, with each
230 element being a line of the buffer.  All of the usual sequence operations,
231 including indexing, index assignment, slicing and slice assignment, work as
232 you would expect.  Note that the result of indexing (slicing) a buffer is a
233 string (list of strings).  This has one unusual consequence - b[:] is different
234 from b.  In particular, "b[:] = None" deletes the whole of the buffer, whereas
235 "b = None" merely updates the variable b, with no effect on the buffer.
237 Buffer indexes start at zero, as is normal in Python.  This differs from vim
238 line numbers, which start from 1.  This is particularly relevant when dealing
239 with marks (see below) which use vim line numbers.
241 The buffer object methods are:
242         b.append(str)   Append a line to the buffer
243         b.append(str, nr)  Idem, below line "nr"
244         b.append(list)  Append a list of lines to the buffer
245                         Note that the option of supplying a list of strings to
246                         the append method differs from the equivalent method
247                         for Python's built-in list objects.
248         b.append(list, nr)  Idem, below line "nr"
249         b.mark(name)    Return a tuple (row,col) representing the position
250                         of the named mark (can also get the []"<> marks)
251         b.range(s,e)    Return a range object (see |python-range|) which
252                         represents the part of the given buffer between line
253                         numbers s and e |inclusive|.
255 Note that when adding a line it must not contain a line break character '\n'.
256 A trailing '\n' is allowed and ignored, so that you can do: >
257         :py b.append(f.readlines())
259 Examples (assume b is the current buffer) >
260         :py print b.name                # write the buffer file name
261         :py b[0] = "hello!!!"           # replace the top line
262         :py b[:] = None                 # delete the whole buffer
263         :py del b[:]                    # delete the whole buffer
264         :py b[0:0] = [ "a line" ]       # add a line at the top
265         :py del b[2]                    # delete a line (the third)
266         :py b.append("bottom")          # add a line at the bottom
267         :py n = len(b)                  # number of lines
268         :py (row,col) = b.mark('a')     # named mark
269         :py r = b.range(1,5)            # a sub-range of the buffer
271 ==============================================================================
272 4. Range objects                                        *python-range*
274 Range objects represent a part of a vim buffer.  You can obtain them in a
275 number of ways:
276         - via vim.current.range (|python-current|)
277         - from a buffer's range() method (|python-buffer|)
279 A range object is almost identical in operation to a buffer object.  However,
280 all operations are restricted to the lines within the range (this line range
281 can, of course, change as a result of slice assignments, line deletions, or
282 the range.append() method).
284 The range object attributes are:
285         r.start         Index of first line into the buffer
286         r.end           Index of last line into the buffer
288 The range object methods are:
289         r.append(str)   Append a line to the range
290         r.append(str, nr)  Idem, after line "nr"
291         r.append(list)  Append a list of lines to the range
292                         Note that the option of supplying a list of strings to
293                         the append method differs from the equivalent method
294                         for Python's built-in list objects.
295         r.append(list, nr)  Idem, after line "nr"
297 Example (assume r is the current range):
298         # Send all lines in a range to the default printer
299         vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
301 ==============================================================================
302 5. Window objects                                       *python-window*
304 Window objects represent vim windows.  You can obtain them in a number of ways:
305         - via vim.current.window (|python-current|)
306         - from indexing vim.windows (|python-windows|)
308 You can manipulate window objects only through their attributes.  They have no
309 methods, and no sequence or other interface.
311 Window attributes are:
312         buffer (read-only)      The buffer displayed in this window
313         cursor (read-write)     The current cursor position in the window
314                                 This is a tuple, (row,col).
315         height (read-write)     The window height, in rows
316         width (read-write)      The window width, in columns
317 The height attribute is writable only if the screen is split horizontally.
318 The width attribute is writable only if the screen is split vertically.
320 ==============================================================================
321 6. Dynamic loading                                      *python-dynamic*
323 On MS-Windows the Python library can be loaded dynamically.  The |:version|
324 output then includes |+python/dyn|.
326 This means that Vim will search for the Python DLL file only when needed.
327 When you don't use the Python interface you don't need it, thus you can use
328 Vim without this DLL file.
330 To use the Python interface the Python DLL must be in your search path.  In a
331 console window type "path" to see what directories are used.
333 The name of the DLL must match the Python version Vim was compiled with.
334 Currently the name is "python24.dll".  That is for Python 2.4.  To know for
335 sure edit "gvim.exe" and search for "python\d*.dll\c".
337 ==============================================================================
338 7. Python 3                                             *python3*
340                                                         *:py3* *:python3*
341 The |:py3| and |:python3| commands work similar to |:python|.
342                                                         *:py3file*
343 The |:py3file| command works similar to |:pyfile|.
345 Vim can be built in four ways (:version output):
346 1. No Python support        (-python, -python3)
347 2. Python 2 support only    (+python or +python/dyn, -python3)
348 3. Python 3 support only    (-python, +python3 or +python3/dyn)
349 4. Python 2 and 3 support   (+python/dyn, +python3/dyn)
351 Some more details on the special case 4:
353 When Python 2 and Python 3 are both supported they must be loaded dynamically.
355 When doing this on Linux/Unix systems and importing global symbols, this leads
356 to a crash when the second Python version is used.  So either global symbols
357 are loaded but only one Python version is activated, or no global symbols are
358 loaded. The latter makes Python's "import" fail on libaries that expect the
359 symbols to be provided by Vim.
360                                                         *E836* *E837*
361 Vim's configuration script makes a guess for all libraries based on one
362 standard Python library (termios).  If importing this library succeeds for
363 both Python versions, then both will be made available in Vim at the same
364 time.  If not, only the version first used in a session will be enabled.
365 When trying to use the other one you will get the E836 or E837 error message.
367 Here Vim's behavior depends on the system in which it was configured.  In a
368 system where both versions of Python were configured with --enable-shared,
369 both versions of Python will be activated at the same time.  There will still
370 be problems with other third party libraries that were not linked to
371 libPython.
373 To work around such problems there are these options:
374 1. The problematic library is recompiled to link to the according
375    libpython.so.
376 2. Vim is recompiled for only one Python version.
377 3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
378    may crash Vim though.
381 ==============================================================================
382  vim:tw=78:ts=8:ft=help:norl: