blob: 31a0d07f955fd7e21e6a4829848eb9c18b21aeff [file] [log] [blame]
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01001*if_pyth.txt* For Vim version 7.3. Last change: 2012 Feb 04
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Paul Moore
5
6
7The Python Interface to Vim *python* *Python*
8
Bram Moolenaar30b65812012-07-12 22:01:11 +020091. Commands |python-commands|
102. The vim module |python-vim|
113. Buffer objects |python-buffer|
124. Range objects |python-range|
135. Window objects |python-window|
146. pyeval(), py3eval() Vim functions |python-pyeval|
157. Dynamic loading |python-dynamic|
168. Python 3 |python3|
Bram Moolenaar071d4272004-06-13 20:20:40 +000017
18{Vi does not have any of these commands}
19
Bram Moolenaar368373e2010-07-19 20:46:22 +020020The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000021|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020022The Python 3 interface is available only when Vim was compiled with the
23|+python3| feature.
Bram Moolenaar071d4272004-06-13 20:20:40 +000024
25==============================================================================
261. Commands *python-commands*
27
28 *:python* *:py* *E205* *E263* *E264*
29:[range]py[thon] {stmt}
30 Execute Python statement {stmt}.
31
32:[range]py[thon] << {endmarker}
33{script}
34{endmarker}
35 Execute Python script {script}.
36 Note: This command doesn't work when the Python
37 feature wasn't compiled in. To avoid errors, see
38 |script-here|.
39
40{endmarker} must NOT be preceded by any white space. If {endmarker} is
41omitted from after the "<<", a dot '.' must be used after {script}, like
42for the |:append| and |:insert| commands.
43This form of the |:python| command is mainly useful for including python code
44in Vim scripts.
45
46Example: >
47 function! IcecreamInitialize()
48 python << EOF
49 class StrawberryIcecream:
50 def __call__(self):
51 print 'EAT ME'
52 EOF
53 endfunction
54<
55Note: Python is very sensitive to the indenting. Also make sure the "class"
56line and "EOF" do not have any indent.
57
58 *:pyfile* *:pyf*
59:[range]pyf[ile] {file}
60 Execute the Python script in {file}. The whole
61 argument is used as a single file name. {not in Vi}
62
63Both of these commands do essentially the same thing - they execute a piece of
64Python code, with the "current range" |python-range| set to the given line
65range.
66
67In the case of :python, the code to execute is in the command-line.
68In the case of :pyfile, the code to execute is the contents of the given file.
69
70Python commands cannot be used in the |sandbox|.
71
72To pass arguments you need to set sys.argv[] explicitly. Example: >
73
74 :python import sys
75 :python sys.argv = ["foo", "bar"]
76 :pyfile myscript.py
77
78Here are some examples *python-examples* >
79
80 :python from vim import *
81 :python from string import upper
82 :python current.line = upper(current.line)
83 :python print "Hello"
84 :python str = current.buffer[42]
85
86(Note that changes - like the imports - persist from one command to the next,
87just like in the Python interpreter.)
88
89==============================================================================
902. The vim module *python-vim*
91
92Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000093|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +000094methods, three constants, and one error object. You need to import the vim
95module before using it: >
96 :python import vim
97
98Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000099 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100100 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000101 :py w = vim.windows[n] # gets window "n"
102 :py cw = vim.current.window # gets the current window
103 :py b = vim.buffers[n] # gets buffer "n"
104 :py cb = vim.current.buffer # gets the current buffer
105 :py w.height = lines # sets the window height
106 :py w.cursor = (row, col) # sets the window cursor position
107 :py pos = w.cursor # gets a tuple (row, col)
108 :py name = b.name # gets the buffer file name
109 :py line = b[n] # gets a line from the buffer
110 :py lines = b[n:m] # gets a list of lines
111 :py num = len(b) # gets the number of lines
112 :py b[n] = str # sets a line in the buffer
113 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
114 :py del b[n] # deletes a line
115 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116
117
118Methods of the "vim" module
119
120vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000121 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000123 :py vim.command("set tw=72")
124 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125< The following definition executes Normal mode commands: >
126 def normal(str):
127 vim.command("normal "+str)
128 # Note the use of single quotes to delimit a string containing
129 # double quotes
130 normal('"a2dd"aP')
131< *E659*
132 The ":python" command cannot be used recursively with Python 2.2 and
133 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000134 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135
136vim.eval(str) *python-eval*
137 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000138 evaluator (see |expression|). Returns the expression result as:
139 - a string if the Vim expression evaluates to a string or number
140 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000141 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000142 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000144 :py text_width = vim.eval("&tw")
145 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146 # string.atoi() to convert to
147 # a number.
148
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000149 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000150< The latter will return a python list of python dicts, for instance:
151 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
152 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
153
Bram Moolenaar30b65812012-07-12 22:01:11 +0200154vim.bindeval(str) *python-bindeval*
155 Like |python-eval|, but
156 1. if expression evaluates to |List| or |Dictionary| it is returned as
157 vimlist or vimdictionary python type that are connected to original
158 list or dictionary. Thus modifications to these objects imply
159 modifications of the original.
160 2. if expression evaluates to a function reference, then it returns
161 callable vimfunction object. Use self keyword argument to assign
162 |self| object for dictionary functions.
163
164 Note: this function has the same behavior as |lua-eval| (except that
165 lua does not support running vim functions), |python-eval| is
166 kept for backwards compatibility in order not to make scripts
167 relying on outputs of vim.eval() being a copy of original or
168 vim.eval("1") returning a string.
169
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000170
171
Bram Moolenaar071d4272004-06-13 20:20:40 +0000172Error object of the "vim" module
173
174vim.error *python-error*
175 Upon encountering a Vim error, Python raises an exception of type
176 vim.error.
177 Example: >
178 try:
179 vim.command("put a")
180 except vim.error:
181 # nothing in register a
182
183Constants of the "vim" module
184
185 Note that these are not actually constants - you could reassign them.
186 But this is silly, as you would then lose access to the vim objects
187 to which the variables referred.
188
189vim.buffers *python-buffers*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000190 A sequence object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000192 :py b = vim.buffers[i] # Indexing (read-only)
193 :py b in vim.buffers # Membership test
194 :py n = len(vim.buffers) # Number of elements
195 :py for b in vim.buffers: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196<
197vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000198 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000200 :py w = vim.windows[i] # Indexing (read-only)
201 :py w in vim.windows # Membership test
202 :py n = len(vim.windows) # Number of elements
203 :py for w in vim.windows: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204<
205vim.current *python-current*
206 An object providing access (via specific attributes) to various
207 "current" objects available in vim:
208 vim.current.line The current line (RW) String
209 vim.current.buffer The current buffer (RO) Buffer
210 vim.current.window The current window (RO) Window
211 vim.current.range The current line range (RO) Range
212
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000213 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000215 "current range". A range is a bit like a buffer, but with all access
216 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217
218
219Output from Python *python-output*
220 Vim displays all Python code output in the Vim message area. Normal
221 output appears as information messages, and error output appears as
222 error messages.
223
224 In implementation terms, this means that all output to sys.stdout
225 (including the output from print statements) appears as information
226 messages, and all output to sys.stderr (including error tracebacks)
227 appears as error messages.
228
229 *python-input*
230 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000231 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232 fixed.
233
234==============================================================================
2353. Buffer objects *python-buffer*
236
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000237Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238 - via vim.current.buffer (|python-current|)
239 - from indexing vim.buffers (|python-buffers|)
240 - from the "buffer" attribute of a window (|python-window|)
241
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100242Buffer objects have two read-only attributes - name - the full file name for
243the buffer, and number - the buffer number. They also have three methods
244(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000246You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000248element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000250you would expect. Note that the result of indexing (slicing) a buffer is a
251string (list of strings). This has one unusual consequence - b[:] is different
252from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253"b = None" merely updates the variable b, with no effect on the buffer.
254
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000255Buffer indexes start at zero, as is normal in Python. This differs from vim
256line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257with marks (see below) which use vim line numbers.
258
259The buffer object methods are:
260 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200261 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262 b.append(list) Append a list of lines to the buffer
263 Note that the option of supplying a list of strings to
264 the append method differs from the equivalent method
265 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200266 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267 b.mark(name) Return a tuple (row,col) representing the position
268 of the named mark (can also get the []"<> marks)
269 b.range(s,e) Return a range object (see |python-range|) which
270 represents the part of the given buffer between line
271 numbers s and e |inclusive|.
272
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000273Note that when adding a line it must not contain a line break character '\n'.
274A trailing '\n' is allowed and ignored, so that you can do: >
275 :py b.append(f.readlines())
276
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000278 :py print b.name # write the buffer file name
279 :py b[0] = "hello!!!" # replace the top line
280 :py b[:] = None # delete the whole buffer
281 :py del b[:] # delete the whole buffer
282 :py b[0:0] = [ "a line" ] # add a line at the top
283 :py del b[2] # delete a line (the third)
284 :py b.append("bottom") # add a line at the bottom
285 :py n = len(b) # number of lines
286 :py (row,col) = b.mark('a') # named mark
287 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288
289==============================================================================
2904. Range objects *python-range*
291
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000292Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000293number of ways:
294 - via vim.current.range (|python-current|)
295 - from a buffer's range() method (|python-buffer|)
296
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000297A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000298all operations are restricted to the lines within the range (this line range
299can, of course, change as a result of slice assignments, line deletions, or
300the range.append() method).
301
302The range object attributes are:
303 r.start Index of first line into the buffer
304 r.end Index of last line into the buffer
305
306The range object methods are:
307 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200308 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000309 r.append(list) Append a list of lines to the range
310 Note that the option of supplying a list of strings to
311 the append method differs from the equivalent method
312 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200313 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314
315Example (assume r is the current range):
316 # Send all lines in a range to the default printer
317 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
318
319==============================================================================
3205. Window objects *python-window*
321
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000322Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000323 - via vim.current.window (|python-current|)
324 - from indexing vim.windows (|python-windows|)
325
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000326You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000327methods, and no sequence or other interface.
328
329Window attributes are:
330 buffer (read-only) The buffer displayed in this window
331 cursor (read-write) The current cursor position in the window
332 This is a tuple, (row,col).
333 height (read-write) The window height, in rows
334 width (read-write) The window width, in columns
335The height attribute is writable only if the screen is split horizontally.
336The width attribute is writable only if the screen is split vertically.
337
338==============================================================================
Bram Moolenaar30b65812012-07-12 22:01:11 +02003396. pyeval() and py3eval() Vim functions *python-pyeval*
340
341To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
342functions to evaluate Python expressions and pass their values to VimL.
343
344==============================================================================
3457. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000346
347On MS-Windows the Python library can be loaded dynamically. The |:version|
348output then includes |+python/dyn|.
349
350This means that Vim will search for the Python DLL file only when needed.
351When you don't use the Python interface you don't need it, thus you can use
352Vim without this DLL file.
353
354To use the Python interface the Python DLL must be in your search path. In a
355console window type "path" to see what directories are used.
356
357The name of the DLL must match the Python version Vim was compiled with.
358Currently the name is "python24.dll". That is for Python 2.4. To know for
359sure edit "gvim.exe" and search for "python\d*.dll\c".
360
361==============================================================================
Bram Moolenaar30b65812012-07-12 22:01:11 +02003628. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200363
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200364 *:py3* *:python3*
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200365The |:py3| and |:python3| commands work similar to |:python|.
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200366 *:py3file*
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200367The |:py3file| command works similar to |:pyfile|.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200368
Bram Moolenaar30b65812012-07-12 22:01:11 +0200369
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200370Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02003711. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02003722. Python 2 support only (+python or +python/dyn, -python3)
3733. Python 3 support only (-python, +python3 or +python3/dyn)
3744. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200375
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200376Some more details on the special case 4:
Bram Moolenaarede981a2010-08-11 23:37:32 +0200377
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200378When Python 2 and Python 3 are both supported they must be loaded dynamically.
379
380When doing this on Linux/Unix systems and importing global symbols, this leads
381to a crash when the second Python version is used. So either global symbols
382are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200383loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200384symbols to be provided by Vim.
385 *E836* *E837*
386Vim's configuration script makes a guess for all libraries based on one
387standard Python library (termios). If importing this library succeeds for
388both Python versions, then both will be made available in Vim at the same
389time. If not, only the version first used in a session will be enabled.
390When trying to use the other one you will get the E836 or E837 error message.
391
392Here Vim's behavior depends on the system in which it was configured. In a
393system where both versions of Python were configured with --enable-shared,
394both versions of Python will be activated at the same time. There will still
395be problems with other third party libraries that were not linked to
396libPython.
397
398To work around such problems there are these options:
3991. The problematic library is recompiled to link to the according
400 libpython.so.
4012. Vim is recompiled for only one Python version.
4023. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
403 may crash Vim though.
404
Bram Moolenaar446beb42011-05-10 17:18:44 +0200405 *has-python*
406You can test what Python version is available with: >
407 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200408 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200409 elseif has('python3')
410 echo 'there is Python 3.x'
411 endif
412
413Note however, that when Python 2 and 3 are both available and loaded
414dynamically, these has() calls will try to load them. If only one can be
415loaded at a time, just checking if Python 2 or 3 are available will prevent
416the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200417
418==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000419 vim:tw=78:ts=8:ft=help:norl: