blob: a358f86ca9383fe5187fdc9f2734902292a170f0 [file] [log] [blame]
Bram Moolenaar531da592013-05-06 05:58:55 +02001*if_pyth.txt* For Vim version 7.3. Last change: 2013 May 06
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}
Bram Moolenaar9b451252012-08-15 17:43:31 +020030 Execute Python statement {stmt}. A simple check if
31 the `:python` command is working: >
32 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000033
34:[range]py[thon] << {endmarker}
35{script}
36{endmarker}
37 Execute Python script {script}.
38 Note: This command doesn't work when the Python
39 feature wasn't compiled in. To avoid errors, see
40 |script-here|.
41
42{endmarker} must NOT be preceded by any white space. If {endmarker} is
43omitted from after the "<<", a dot '.' must be used after {script}, like
44for the |:append| and |:insert| commands.
45This form of the |:python| command is mainly useful for including python code
46in Vim scripts.
47
48Example: >
49 function! IcecreamInitialize()
50 python << EOF
51 class StrawberryIcecream:
52 def __call__(self):
53 print 'EAT ME'
54 EOF
55 endfunction
56<
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010057Note: Python is very sensitive to the indenting. Make sure the "class" line
58and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000059
60 *:pyfile* *:pyf*
61:[range]pyf[ile] {file}
62 Execute the Python script in {file}. The whole
63 argument is used as a single file name. {not in Vi}
64
65Both of these commands do essentially the same thing - they execute a piece of
66Python code, with the "current range" |python-range| set to the given line
67range.
68
69In the case of :python, the code to execute is in the command-line.
70In the case of :pyfile, the code to execute is the contents of the given file.
71
72Python commands cannot be used in the |sandbox|.
73
74To pass arguments you need to set sys.argv[] explicitly. Example: >
75
76 :python import sys
77 :python sys.argv = ["foo", "bar"]
78 :pyfile myscript.py
79
80Here are some examples *python-examples* >
81
82 :python from vim import *
83 :python from string import upper
84 :python current.line = upper(current.line)
85 :python print "Hello"
86 :python str = current.buffer[42]
87
88(Note that changes - like the imports - persist from one command to the next,
89just like in the Python interpreter.)
90
91==============================================================================
922. The vim module *python-vim*
93
94Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000095|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +000096methods, three constants, and one error object. You need to import the vim
97module before using it: >
98 :python import vim
99
100Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000101 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100102 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000103 :py w = vim.windows[n] # gets window "n"
104 :py cw = vim.current.window # gets the current window
105 :py b = vim.buffers[n] # gets buffer "n"
106 :py cb = vim.current.buffer # gets the current buffer
107 :py w.height = lines # sets the window height
108 :py w.cursor = (row, col) # sets the window cursor position
109 :py pos = w.cursor # gets a tuple (row, col)
110 :py name = b.name # gets the buffer file name
111 :py line = b[n] # gets a line from the buffer
112 :py lines = b[n:m] # gets a list of lines
113 :py num = len(b) # gets the number of lines
114 :py b[n] = str # sets a line in the buffer
115 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
116 :py del b[n] # deletes a line
117 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118
119
120Methods of the "vim" module
121
122vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000123 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000125 :py vim.command("set tw=72")
126 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127< The following definition executes Normal mode commands: >
128 def normal(str):
129 vim.command("normal "+str)
130 # Note the use of single quotes to delimit a string containing
131 # double quotes
132 normal('"a2dd"aP')
133< *E659*
134 The ":python" command cannot be used recursively with Python 2.2 and
135 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000136 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137
138vim.eval(str) *python-eval*
139 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000140 evaluator (see |expression|). Returns the expression result as:
141 - a string if the Vim expression evaluates to a string or number
142 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000143 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000144 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000146 :py text_width = vim.eval("&tw")
147 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000148 # string.atoi() to convert to
149 # a number.
150
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000151 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000152< The latter will return a python list of python dicts, for instance:
153 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
154 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
155
Bram Moolenaar30b65812012-07-12 22:01:11 +0200156vim.bindeval(str) *python-bindeval*
157 Like |python-eval|, but
158 1. if expression evaluates to |List| or |Dictionary| it is returned as
159 vimlist or vimdictionary python type that are connected to original
160 list or dictionary. Thus modifications to these objects imply
161 modifications of the original.
Bram Moolenaard09acef2012-09-21 14:54:30 +0200162
163 Additionally, vimlist and vimdictionary type have read-write
164 `.locked` attribute that returns
165 Value Meaning ~
166 zero Variable is not locked
167 vim.VAR_LOCKED Variable is locked, but can be unlocked
Bram Moolenaar97cc2382012-10-03 21:46:54 +0200168 vim.VAR_FIXED Variable is locked and can't be unlocked
Bram Moolenaard09acef2012-09-21 14:54:30 +0200169 integer constants. If variable is not fixed, you can do
170 `var.locked=True` to lock it and `var.locked=False` to unlock.
171 There is no recursive locking like |:lockvar|! does. There is also
172 no way to lock a specific key or check whether it is locked (in any
173 case these locks are ignored by anything except |:let|: |extend()|
174 does not care, neither does python interface).
175
176 Vimdictionary type also supports `.scope` attribute which is one of
177 Value Meaning ~
178 zero Dictionary is not a scope one
179 vim.VAR_DEF_SCOPE Function-local or global scope dictionary
180 vim.VAR_SCOPE Other scope dictionary
181
Bram Moolenaar30b65812012-07-12 22:01:11 +0200182 2. if expression evaluates to a function reference, then it returns
183 callable vimfunction object. Use self keyword argument to assign
184 |self| object for dictionary functions.
185
186 Note: this function has the same behavior as |lua-eval| (except that
187 lua does not support running vim functions), |python-eval| is
188 kept for backwards compatibility in order not to make scripts
189 relying on outputs of vim.eval() being a copy of original or
190 vim.eval("1") returning a string.
191
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000192
193
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194Error object of the "vim" module
195
196vim.error *python-error*
197 Upon encountering a Vim error, Python raises an exception of type
198 vim.error.
199 Example: >
200 try:
201 vim.command("put a")
202 except vim.error:
203 # nothing in register a
204
205Constants of the "vim" module
206
207 Note that these are not actually constants - you could reassign them.
208 But this is silly, as you would then lose access to the vim objects
209 to which the variables referred.
210
211vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200212 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000214 :py b = vim.buffers[i] # Indexing (read-only)
215 :py b in vim.buffers # Membership test
216 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200217 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218<
219vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000220 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000222 :py w = vim.windows[i] # Indexing (read-only)
223 :py w in vim.windows # Membership test
224 :py n = len(vim.windows) # Number of elements
225 :py for w in vim.windows: # Sequential access
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200226< Note: vim.windows object always accesses current tab page,.
227 |python-tabpage|.windows objects are bound to parent |python-tabpage|
228 object and always use windows from that tab page (or throw vim.error
229 in case tab page was deleted). You can keep a reference to both
230 without keeping a reference to vim module object or |python-tabpage|,
231 they will not loose their properties in this case.
232
233vim.tabpages *python-tabpages*
234 A sequence object providing access to the list of vim tab pages. The
235 object supports the following operations: >
236 :py t = vim.tabpages[i] # Indexing (read-only)
237 :py t in vim.tabpages # Membership test
238 :py n = len(vim.tabpages) # Number of elements
239 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240<
241vim.current *python-current*
242 An object providing access (via specific attributes) to various
243 "current" objects available in vim:
244 vim.current.line The current line (RW) String
245 vim.current.buffer The current buffer (RO) Buffer
246 vim.current.window The current window (RO) Window
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200247 vim.current.tabpage The current tab page (RO) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248 vim.current.range The current line range (RO) Range
249
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000250 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000251 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000252 "current range". A range is a bit like a buffer, but with all access
253 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000254
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200255vim.vars *python-vars*
256vim.vvars *python-vvars*
257 Dictionary-like objects holding dictionaries with global (|g:|) and
258 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
259 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000260
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200261vim.options *python-options*
262 Object partly supporting mapping protocol (supports setting and
263 getting items) providing a read-write access to global options.
264 Note: unlike |:set| this provides access only to global options. You
265 cannot use this object to obtain or set local options' values or
266 access local-only options in any fashion. Raises KeyError if no global
267 option with such name exists (i.e. does not raise KeyError for
268 |global-local| options and global only options, but does for window-
269 and buffer-local ones). Use |python-buffer| objects to access to
270 buffer-local options and |python-window| objects to access to
271 window-local options.
272
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273Output from Python *python-output*
274 Vim displays all Python code output in the Vim message area. Normal
275 output appears as information messages, and error output appears as
276 error messages.
277
278 In implementation terms, this means that all output to sys.stdout
279 (including the output from print statements) appears as information
280 messages, and all output to sys.stderr (including error tracebacks)
281 appears as error messages.
282
283 *python-input*
284 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000285 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 fixed.
287
288==============================================================================
2893. Buffer objects *python-buffer*
290
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000291Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292 - via vim.current.buffer (|python-current|)
293 - from indexing vim.buffers (|python-buffers|)
294 - from the "buffer" attribute of a window (|python-window|)
295
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100296Buffer objects have two read-only attributes - name - the full file name for
297the buffer, and number - the buffer number. They also have three methods
298(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000300You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000302element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000303including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000304you would expect. Note that the result of indexing (slicing) a buffer is a
305string (list of strings). This has one unusual consequence - b[:] is different
306from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000307"b = None" merely updates the variable b, with no effect on the buffer.
308
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000309Buffer indexes start at zero, as is normal in Python. This differs from vim
310line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000311with marks (see below) which use vim line numbers.
312
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200313The buffer object attributes are:
314 b.vars Dictionary-like object used to access
315 |buffer-variable|s.
316 b.options Mapping object (supports item getting, setting and
317 deleting) that provides access to buffer-local options
318 and buffer-local values of |global-local| options. Use
319 |python-window|.options if option is window-local,
320 this object will raise KeyError. If option is
321 |global-local| and local value is missing getting it
322 will return None.
323
Bram Moolenaar071d4272004-06-13 20:20:40 +0000324The buffer object methods are:
325 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200326 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000327 b.append(list) Append a list of lines to the buffer
328 Note that the option of supplying a list of strings to
329 the append method differs from the equivalent method
330 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200331 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000332 b.mark(name) Return a tuple (row,col) representing the position
333 of the named mark (can also get the []"<> marks)
334 b.range(s,e) Return a range object (see |python-range|) which
335 represents the part of the given buffer between line
336 numbers s and e |inclusive|.
337
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000338Note that when adding a line it must not contain a line break character '\n'.
339A trailing '\n' is allowed and ignored, so that you can do: >
340 :py b.append(f.readlines())
341
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000343 :py print b.name # write the buffer file name
344 :py b[0] = "hello!!!" # replace the top line
345 :py b[:] = None # delete the whole buffer
346 :py del b[:] # delete the whole buffer
347 :py b[0:0] = [ "a line" ] # add a line at the top
348 :py del b[2] # delete a line (the third)
349 :py b.append("bottom") # add a line at the bottom
350 :py n = len(b) # number of lines
351 :py (row,col) = b.mark('a') # named mark
352 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200353 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200354 :py b.options["ff"] = "dos" # set fileformat
355 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356
357==============================================================================
3584. Range objects *python-range*
359
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000360Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361number of ways:
362 - via vim.current.range (|python-current|)
363 - from a buffer's range() method (|python-buffer|)
364
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000365A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000366all operations are restricted to the lines within the range (this line range
367can, of course, change as a result of slice assignments, line deletions, or
368the range.append() method).
369
370The range object attributes are:
371 r.start Index of first line into the buffer
372 r.end Index of last line into the buffer
373
374The range object methods are:
375 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200376 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000377 r.append(list) Append a list of lines to the range
378 Note that the option of supplying a list of strings to
379 the append method differs from the equivalent method
380 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200381 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000382
383Example (assume r is the current range):
384 # Send all lines in a range to the default printer
385 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
386
387==============================================================================
3885. Window objects *python-window*
389
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000390Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000391 - via vim.current.window (|python-current|)
392 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200393 - from indexing "windows" attribute of a tab page (|python-tabpage|)
394 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000395
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000396You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000397methods, and no sequence or other interface.
398
399Window attributes are:
400 buffer (read-only) The buffer displayed in this window
401 cursor (read-write) The current cursor position in the window
402 This is a tuple, (row,col).
403 height (read-write) The window height, in rows
404 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200405 vars (read-only) The window |w:| variables. Attribute is
406 unassignable, but you can change window
407 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200408 options (read-only) The window-local options. Attribute is
409 unassignable, but you can change window
410 options this way. Provides access only to
411 window-local options, for buffer-local use
412 |python-buffer| and for global ones use
413 |python-options|. If option is |global-local|
414 and local value is missing getting it will
415 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200416 number (read-only) Window number. The first window has number 1.
417 This is zero in case it cannot be determined
418 (e.g. when the window object belongs to other
419 tab page).
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200420 row, col (read-only) On-screen window position in display cells.
421 First position is zero.
422
Bram Moolenaar071d4272004-06-13 20:20:40 +0000423The height attribute is writable only if the screen is split horizontally.
424The width attribute is writable only if the screen is split vertically.
425
426==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02004276. Tab page objects *python-tabpage*
428
429Tab page objects represent vim tab pages. You can obtain them in a number of
430ways:
431 - via vim.current.tabpage (|python-current|)
432 - from indexing vim.tabpages (|python-tabpages|)
433
434You can use this object to access tab page windows. They have no methods and
435no sequence or other interfaces.
436
437Tab page attributes are:
438 number The tab page number like the one returned by
439 |tabpagenr()|.
440 windows Like |python-windows|, but for current tab page.
441 vars The tab page |t:| variables.
442 window Current tabpage window.
443
444==============================================================================
Bram Moolenaar30b65812012-07-12 22:01:11 +02004456. pyeval() and py3eval() Vim functions *python-pyeval*
446
447To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
448functions to evaluate Python expressions and pass their values to VimL.
449
450==============================================================================
4517. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000452
453On MS-Windows the Python library can be loaded dynamically. The |:version|
454output then includes |+python/dyn|.
455
456This means that Vim will search for the Python DLL file only when needed.
457When you don't use the Python interface you don't need it, thus you can use
458Vim without this DLL file.
459
460To use the Python interface the Python DLL must be in your search path. In a
461console window type "path" to see what directories are used.
462
463The name of the DLL must match the Python version Vim was compiled with.
464Currently the name is "python24.dll". That is for Python 2.4. To know for
465sure edit "gvim.exe" and search for "python\d*.dll\c".
466
467==============================================================================
Bram Moolenaar30b65812012-07-12 22:01:11 +02004688. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200469
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200470 *:py3* *:python3*
Bram Moolenaar9b451252012-08-15 17:43:31 +0200471The |:py3| and |:python3| commands work similar to |:python|. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100472if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200473 :py3 print("Hello")
474< *:py3file*
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200475The |:py3file| command works similar to |:pyfile|.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200476
Bram Moolenaar30b65812012-07-12 22:01:11 +0200477
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200478Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02004791. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02004802. Python 2 support only (+python or +python/dyn, -python3)
4813. Python 3 support only (-python, +python3 or +python3/dyn)
4824. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200483
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200484Some more details on the special case 4:
Bram Moolenaarede981a2010-08-11 23:37:32 +0200485
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200486When Python 2 and Python 3 are both supported they must be loaded dynamically.
487
488When doing this on Linux/Unix systems and importing global symbols, this leads
489to a crash when the second Python version is used. So either global symbols
490are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200491loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200492symbols to be provided by Vim.
493 *E836* *E837*
494Vim's configuration script makes a guess for all libraries based on one
495standard Python library (termios). If importing this library succeeds for
496both Python versions, then both will be made available in Vim at the same
497time. If not, only the version first used in a session will be enabled.
498When trying to use the other one you will get the E836 or E837 error message.
499
500Here Vim's behavior depends on the system in which it was configured. In a
501system where both versions of Python were configured with --enable-shared,
502both versions of Python will be activated at the same time. There will still
503be problems with other third party libraries that were not linked to
504libPython.
505
506To work around such problems there are these options:
5071. The problematic library is recompiled to link to the according
508 libpython.so.
5092. Vim is recompiled for only one Python version.
5103. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
511 may crash Vim though.
512
Bram Moolenaar446beb42011-05-10 17:18:44 +0200513 *has-python*
514You can test what Python version is available with: >
515 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200516 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200517 elseif has('python3')
518 echo 'there is Python 3.x'
519 endif
520
521Note however, that when Python 2 and 3 are both available and loaded
522dynamically, these has() calls will try to load them. If only one can be
523loaded at a time, just checking if Python 2 or 3 are available will prevent
524the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200525
526==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000527 vim:tw=78:ts=8:ft=help:norl: