blob: 71bbb13f894b38a8be72522b5be6d8666de50156 [file] [log] [blame]
Bram Moolenaar3df01732017-02-17 22:47:16 +01001*if_pyth.txt* For Vim version 8.0. Last change: 2017 Feb 17
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|
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200146. Tab page objects |python-tabpage|
Bram Moolenaara9922d62013-05-30 13:01:18 +0200157. vim.bindeval objects |python-bindeval-objects|
168. pyeval(), py3eval() Vim functions |python-pyeval|
179. Dynamic loading |python-dynamic|
1810. Python 3 |python3|
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01001911. Python X |python_x|
Bram Moolenaar071d4272004-06-13 20:20:40 +000020
21{Vi does not have any of these commands}
22
Bram Moolenaar368373e2010-07-19 20:46:22 +020023The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000024|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020025The Python 3 interface is available only when Vim was compiled with the
26|+python3| feature.
Bram Moolenaar9ba7e172013-07-17 22:37:26 +020027Both can be available at the same time, but read |python-2-and-3|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000028
29==============================================================================
301. Commands *python-commands*
31
Bram Moolenaardbc28022014-07-26 13:40:44 +020032 *:python* *:py* *E263* *E264* *E887*
Bram Moolenaar071d4272004-06-13 20:20:40 +000033:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020034 Execute Python statement {stmt}. A simple check if
35 the `:python` command is working: >
36 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000037
38:[range]py[thon] << {endmarker}
39{script}
40{endmarker}
41 Execute Python script {script}.
42 Note: This command doesn't work when the Python
43 feature wasn't compiled in. To avoid errors, see
44 |script-here|.
45
46{endmarker} must NOT be preceded by any white space. If {endmarker} is
47omitted from after the "<<", a dot '.' must be used after {script}, like
48for the |:append| and |:insert| commands.
49This form of the |:python| command is mainly useful for including python code
50in Vim scripts.
51
52Example: >
53 function! IcecreamInitialize()
54 python << EOF
55 class StrawberryIcecream:
56 def __call__(self):
57 print 'EAT ME'
58 EOF
59 endfunction
Bram Moolenaar64d8e252016-09-06 22:12:34 +020060
61To see what version of Python you have: >
62 :python import sys
63 :python print(sys.version)
64
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010065Note: Python is very sensitive to the indenting. Make sure the "class" line
66and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000067
Bram Moolenaard620aa92013-05-17 16:40:06 +020068 *:pydo*
69:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
70 {body}" for each line in the [range], with the
71 function arguments being set to the text of each line
72 in turn, without a trailing <EOL>, and the current
73 line number. The function should return a string or
74 None. If a string is returned, it becomes the text of
75 the line in the current turn. The default for [range]
76 is the whole file: "1,$".
77 {not in Vi}
78
79Examples:
80>
81 :pydo return "%s\t%d" % (line[::-1], len(line))
82 :pydo if line: return "%4d: %s" % (linenr, line)
83<
Bram Moolenaar071d4272004-06-13 20:20:40 +000084 *:pyfile* *:pyf*
85:[range]pyf[ile] {file}
86 Execute the Python script in {file}. The whole
87 argument is used as a single file name. {not in Vi}
88
89Both of these commands do essentially the same thing - they execute a piece of
90Python code, with the "current range" |python-range| set to the given line
91range.
92
93In the case of :python, the code to execute is in the command-line.
94In the case of :pyfile, the code to execute is the contents of the given file.
95
96Python commands cannot be used in the |sandbox|.
97
98To pass arguments you need to set sys.argv[] explicitly. Example: >
99
100 :python import sys
101 :python sys.argv = ["foo", "bar"]
102 :pyfile myscript.py
103
104Here are some examples *python-examples* >
105
106 :python from vim import *
107 :python from string import upper
108 :python current.line = upper(current.line)
109 :python print "Hello"
110 :python str = current.buffer[42]
111
112(Note that changes - like the imports - persist from one command to the next,
113just like in the Python interpreter.)
114
115==============================================================================
1162. The vim module *python-vim*
117
118Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000119|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120methods, three constants, and one error object. You need to import the vim
121module before using it: >
122 :python import vim
123
124Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000125 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100126 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000127 :py w = vim.windows[n] # gets window "n"
128 :py cw = vim.current.window # gets the current window
129 :py b = vim.buffers[n] # gets buffer "n"
130 :py cb = vim.current.buffer # gets the current buffer
131 :py w.height = lines # sets the window height
132 :py w.cursor = (row, col) # sets the window cursor position
133 :py pos = w.cursor # gets a tuple (row, col)
134 :py name = b.name # gets the buffer file name
135 :py line = b[n] # gets a line from the buffer
136 :py lines = b[n:m] # gets a list of lines
137 :py num = len(b) # gets the number of lines
138 :py b[n] = str # sets a line in the buffer
139 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
140 :py del b[n] # deletes a line
141 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142
143
144Methods of the "vim" module
145
146vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000147 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000148 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000149 :py vim.command("set tw=72")
150 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151< The following definition executes Normal mode commands: >
152 def normal(str):
153 vim.command("normal "+str)
154 # Note the use of single quotes to delimit a string containing
155 # double quotes
156 normal('"a2dd"aP')
157< *E659*
158 The ":python" command cannot be used recursively with Python 2.2 and
159 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000160 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161
162vim.eval(str) *python-eval*
163 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000164 evaluator (see |expression|). Returns the expression result as:
165 - a string if the Vim expression evaluates to a string or number
166 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000167 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000168 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000170 :py text_width = vim.eval("&tw")
171 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000172 # string.atoi() to convert to
173 # a number.
174
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000175 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000176< The latter will return a python list of python dicts, for instance:
177 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
178 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
179
Bram Moolenaar30b65812012-07-12 22:01:11 +0200180vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200181 Like |python-eval|, but returns special objects described in
182 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200183 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000184
Bram Moolenaarbc411962013-06-02 17:46:40 +0200185vim.strwidth(str) *python-strwidth*
186 Like |strwidth()|: returns number of display cells str occupies, tab
187 is counted as one cell.
188
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200189vim.foreach_rtp(callable) *python-foreach_rtp*
190 Call the given callable for each path in 'runtimepath' until either
191 callable returns something but None, the exception is raised or there
192 are no longer paths. If stopped in case callable returned non-None,
193 vim.foreach_rtp function returns the value returned by callable.
194
Bram Moolenaarf4258302013-06-02 18:20:17 +0200195vim.chdir(*args, **kwargs) *python-chdir*
196vim.fchdir(*args, **kwargs) *python-fchdir*
197 Run os.chdir or os.fchdir, then all appropriate vim stuff.
198 Note: you should not use these functions directly, use os.chdir and
199 os.fchdir instead. Behavior of vim.fchdir is undefined in case
200 os.fchdir does not exist.
201
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202Error object of the "vim" module
203
204vim.error *python-error*
205 Upon encountering a Vim error, Python raises an exception of type
206 vim.error.
207 Example: >
208 try:
209 vim.command("put a")
210 except vim.error:
211 # nothing in register a
212
213Constants of the "vim" module
214
215 Note that these are not actually constants - you could reassign them.
216 But this is silly, as you would then lose access to the vim objects
217 to which the variables referred.
218
219vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200220 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000222 :py b = vim.buffers[i] # Indexing (read-only)
223 :py b in vim.buffers # Membership test
224 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200225 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226<
227vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000228 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000230 :py w = vim.windows[i] # Indexing (read-only)
231 :py w in vim.windows # Membership test
232 :py n = len(vim.windows) # Number of elements
233 :py for w in vim.windows: # Sequential access
Bram Moolenaarde71b562013-06-02 17:41:54 +0200234< Note: vim.windows object always accesses current tab page.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200235 |python-tabpage|.windows objects are bound to parent |python-tabpage|
236 object and always use windows from that tab page (or throw vim.error
237 in case tab page was deleted). You can keep a reference to both
238 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200239 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200240
241vim.tabpages *python-tabpages*
242 A sequence object providing access to the list of vim tab pages. The
243 object supports the following operations: >
244 :py t = vim.tabpages[i] # Indexing (read-only)
245 :py t in vim.tabpages # Membership test
246 :py n = len(vim.tabpages) # Number of elements
247 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248<
249vim.current *python-current*
250 An object providing access (via specific attributes) to various
251 "current" objects available in vim:
252 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200253 vim.current.buffer The current buffer (RW) Buffer
254 vim.current.window The current window (RW) Window
255 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000256 vim.current.range The current line range (RO) Range
257
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000258 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000260 "current range". A range is a bit like a buffer, but with all access
261 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262
Bram Moolenaare7614592013-05-15 15:51:08 +0200263 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
264 valid |python-buffer|, |python-window| or |python-tabpage| objects
265 respectively. Assigning triggers normal (with |autocommand|s)
266 switching to given buffer, window or tab page. It is the only way to
267 switch UI objects in python: you can't assign to
268 |python-tabpage|.window attribute. To switch without triggering
269 autocommands use >
270 py << EOF
271 saved_eventignore = vim.options['eventignore']
272 vim.options['eventignore'] = 'all'
273 try:
274 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
275 finally:
276 vim.options['eventignore'] = saved_eventignore
277 EOF
278<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200279vim.vars *python-vars*
280vim.vvars *python-vvars*
281 Dictionary-like objects holding dictionaries with global (|g:|) and
282 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
283 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200285vim.options *python-options*
286 Object partly supporting mapping protocol (supports setting and
287 getting items) providing a read-write access to global options.
288 Note: unlike |:set| this provides access only to global options. You
289 cannot use this object to obtain or set local options' values or
290 access local-only options in any fashion. Raises KeyError if no global
291 option with such name exists (i.e. does not raise KeyError for
292 |global-local| options and global only options, but does for window-
293 and buffer-local ones). Use |python-buffer| objects to access to
294 buffer-local options and |python-window| objects to access to
295 window-local options.
296
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200297 Type of this object is available via "Options" attribute of vim
298 module.
299
Bram Moolenaar071d4272004-06-13 20:20:40 +0000300Output from Python *python-output*
301 Vim displays all Python code output in the Vim message area. Normal
302 output appears as information messages, and error output appears as
303 error messages.
304
305 In implementation terms, this means that all output to sys.stdout
306 (including the output from print statements) appears as information
307 messages, and all output to sys.stderr (including error tracebacks)
308 appears as error messages.
309
310 *python-input*
311 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000312 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000313 fixed.
314
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200315 *python2-directory* *python3-directory* *pythonx-directory*
316Python 'runtimepath' handling *python-special-path*
317
318In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
319the list of paths found in 'runtimepath': with this directory in sys.path and
320vim.path_hooks in sys.path_hooks python will try to load module from
321{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
322each {rtp} found in 'runtimepath'.
323
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200324Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200325
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200326 from imp import find_module, load_module
327 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200328 import sys
329
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200330 class VimModuleLoader(object):
331 def __init__(self, module):
332 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200333
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200334 def load_module(self, fullname, path=None):
335 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200336
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200337 def _find_module(fullname, oldtail, path):
338 idx = oldtail.find('.')
339 if idx > 0:
340 name = oldtail[:idx]
341 tail = oldtail[idx+1:]
342 fmr = find_module(name, path)
343 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
344 return _find_module(fullname, tail, module.__path__)
345 else:
346 fmr = find_module(fullname, path)
347 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200348
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200349 # It uses vim module itself in place of VimPathFinder class: it does not
350 # matter for python which object has find_module function attached to as
351 # an attribute.
352 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200353 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200354 def find_module(cls, fullname, path=None):
355 try:
356 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
357 except ImportError:
358 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200359
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200360 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200361 def load_module(cls, fullname, path=None):
362 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200363
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200364 def hook(path):
365 if path == vim.VIM_SPECIAL_PATH:
366 return VimPathFinder
367 else:
368 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200369
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200370 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200371
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200372vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
373 String constant used in conjunction with vim path hook. If path hook
374 installed by vim is requested to handle anything but path equal to
375 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
376 case it uses special loader.
377
378 Note: you must not use value of this constant directly, always use
379 vim.VIM_SPECIAL_PATH object.
380
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200381vim.find_module(...) *python-find_module*
382vim.path_hook(path) *python-path_hook*
383 Methods or objects used to implement path loading as described above.
384 You should not be using any of these directly except for vim.path_hook
385 in case you need to do something with sys.meta_path. It is not
386 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200387 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200388
389vim._get_paths *python-_get_paths*
390 Methods returning a list of paths which will be searched for by path
391 hook. You should not rely on this method being present in future
392 versions, but can use it for debugging.
393
394 It returns a list of {rtp}/python2 (or {rtp}/python3) and
395 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
396
Bram Moolenaar071d4272004-06-13 20:20:40 +0000397==============================================================================
3983. Buffer objects *python-buffer*
399
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000400Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000401 - via vim.current.buffer (|python-current|)
402 - from indexing vim.buffers (|python-buffers|)
403 - from the "buffer" attribute of a window (|python-window|)
404
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100405Buffer objects have two read-only attributes - name - the full file name for
406the buffer, and number - the buffer number. They also have three methods
407(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000409You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000410act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000411element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000412including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000413you would expect. Note that the result of indexing (slicing) a buffer is a
414string (list of strings). This has one unusual consequence - b[:] is different
415from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416"b = None" merely updates the variable b, with no effect on the buffer.
417
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000418Buffer indexes start at zero, as is normal in Python. This differs from vim
419line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420with marks (see below) which use vim line numbers.
421
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200422The buffer object attributes are:
423 b.vars Dictionary-like object used to access
424 |buffer-variable|s.
425 b.options Mapping object (supports item getting, setting and
426 deleting) that provides access to buffer-local options
427 and buffer-local values of |global-local| options. Use
428 |python-window|.options if option is window-local,
429 this object will raise KeyError. If option is
430 |global-local| and local value is missing getting it
431 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200432 b.name String, RW. Contains buffer name (full path).
433 Note: when assigning to b.name |BufFilePre| and
434 |BufFilePost| autocommands are launched.
435 b.number Buffer number. Can be used as |python-buffers| key.
436 Read-only.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200437 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200438 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200439
Bram Moolenaar071d4272004-06-13 20:20:40 +0000440The buffer object methods are:
441 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200442 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000443 b.append(list) Append a list of lines to the buffer
444 Note that the option of supplying a list of strings to
445 the append method differs from the equivalent method
446 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200447 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448 b.mark(name) Return a tuple (row,col) representing the position
449 of the named mark (can also get the []"<> marks)
450 b.range(s,e) Return a range object (see |python-range|) which
451 represents the part of the given buffer between line
452 numbers s and e |inclusive|.
453
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000454Note that when adding a line it must not contain a line break character '\n'.
455A trailing '\n' is allowed and ignored, so that you can do: >
456 :py b.append(f.readlines())
457
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200458Buffer object type is available using "Buffer" attribute of vim module.
459
Bram Moolenaar071d4272004-06-13 20:20:40 +0000460Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000461 :py print b.name # write the buffer file name
462 :py b[0] = "hello!!!" # replace the top line
463 :py b[:] = None # delete the whole buffer
464 :py del b[:] # delete the whole buffer
465 :py b[0:0] = [ "a line" ] # add a line at the top
466 :py del b[2] # delete a line (the third)
467 :py b.append("bottom") # add a line at the bottom
468 :py n = len(b) # number of lines
469 :py (row,col) = b.mark('a') # named mark
470 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200471 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200472 :py b.options["ff"] = "dos" # set fileformat
473 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474
475==============================================================================
4764. Range objects *python-range*
477
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000478Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000479number of ways:
480 - via vim.current.range (|python-current|)
481 - from a buffer's range() method (|python-buffer|)
482
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000483A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000484all operations are restricted to the lines within the range (this line range
485can, of course, change as a result of slice assignments, line deletions, or
486the range.append() method).
487
488The range object attributes are:
489 r.start Index of first line into the buffer
490 r.end Index of last line into the buffer
491
492The range object methods are:
493 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200494 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000495 r.append(list) Append a list of lines to the range
496 Note that the option of supplying a list of strings to
497 the append method differs from the equivalent method
498 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200499 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000500
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200501Range object type is available using "Range" attribute of vim module.
502
Bram Moolenaar071d4272004-06-13 20:20:40 +0000503Example (assume r is the current range):
504 # Send all lines in a range to the default printer
505 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
506
507==============================================================================
5085. Window objects *python-window*
509
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000510Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000511 - via vim.current.window (|python-current|)
512 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200513 - from indexing "windows" attribute of a tab page (|python-tabpage|)
514 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000515
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000516You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000517methods, and no sequence or other interface.
518
519Window attributes are:
520 buffer (read-only) The buffer displayed in this window
521 cursor (read-write) The current cursor position in the window
522 This is a tuple, (row,col).
523 height (read-write) The window height, in rows
524 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200525 vars (read-only) The window |w:| variables. Attribute is
526 unassignable, but you can change window
527 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200528 options (read-only) The window-local options. Attribute is
529 unassignable, but you can change window
530 options this way. Provides access only to
531 window-local options, for buffer-local use
532 |python-buffer| and for global ones use
533 |python-options|. If option is |global-local|
534 and local value is missing getting it will
535 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200536 number (read-only) Window number. The first window has number 1.
537 This is zero in case it cannot be determined
538 (e.g. when the window object belongs to other
539 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200540 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200541 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200542 tabpage (read-only) Window tab page.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200543 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200544 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200545
Bram Moolenaar071d4272004-06-13 20:20:40 +0000546The height attribute is writable only if the screen is split horizontally.
547The width attribute is writable only if the screen is split vertically.
548
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200549Window object type is available using "Window" attribute of vim module.
550
Bram Moolenaar071d4272004-06-13 20:20:40 +0000551==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005526. Tab page objects *python-tabpage*
553
554Tab page objects represent vim tab pages. You can obtain them in a number of
555ways:
556 - via vim.current.tabpage (|python-current|)
557 - from indexing vim.tabpages (|python-tabpages|)
558
559You can use this object to access tab page windows. They have no methods and
560no sequence or other interfaces.
561
562Tab page attributes are:
563 number The tab page number like the one returned by
564 |tabpagenr()|.
565 windows Like |python-windows|, but for current tab page.
566 vars The tab page |t:| variables.
567 window Current tabpage window.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200568 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200569 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200570
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200571TabPage object type is available using "TabPage" attribute of vim module.
572
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200573==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005747. vim.bindeval objects *python-bindeval-objects*
575
576vim.Dictionary object *python-Dictionary*
577 Dictionary-like object providing access to vim |Dictionary| type.
578 Attributes:
579 Attribute Description ~
580 locked One of *python-.locked*
581 Value Description ~
582 zero Variable is not locked
583 vim.VAR_LOCKED Variable is locked, but can be unlocked
584 vim.VAR_FIXED Variable is locked and can't be unlocked
585 Read-write. You can unlock locked variable by assigning
586 `True` or `False` to this attribute. No recursive locking
587 is supported.
588 scope One of
589 Value Description ~
590 zero Dictionary is not a scope one
591 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
592 vim.VAR_SCOPE Other scope dictionary,
593 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200594 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200595 Method Description ~
596 keys() Returns a list with dictionary keys.
597 values() Returns a list with dictionary values.
598 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200599 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200600 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200601 get(key[, default=None])
602 Obtain key from dictionary, returning the default if it is
603 not present.
604 pop(key[, default])
605 Remove specified key from dictionary and return
606 corresponding value. If key is not found and default is
607 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200608 popitem()
609 Remove random key from dictionary and return (key, value)
610 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200611 has_key(key)
612 Check whether dictionary contains specified key, similar
613 to `key in dict`.
614
615 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
616 You can use `vim.Dictionary()` to create new vim
617 dictionaries. `d=vim.Dictionary(arg)` is the same as
618 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
619 constructs empty dictionary.
620
Bram Moolenaara9922d62013-05-30 13:01:18 +0200621 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200622 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200623 d['a'] = 'b' # Item assignment
624 print d['a'] # getting item
625 d.update({'c': 'd'}) # .update(dictionary)
626 d.update(e='f') # .update(**kwargs)
627 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
628 for key in d.keys(): # .keys()
629 for val in d.values(): # .values()
630 for key, val in d.items(): # .items()
631 print isinstance(d, vim.Dictionary) # True
632 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200633 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200634<
635 Note: when iterating over keys you should not modify dictionary.
636
637vim.List object *python-List*
638 Sequence-like object providing access to vim |List| type.
639 Supports `.locked` attribute, see |python-.locked|. Also supports the
640 following methods:
641 Method Description ~
642 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200643
644 __new__(), __new__(iterable)
645 You can use `vim.List()` to create new vim lists.
646 `l=vim.List(iterable)` is the same as
647 `l=vim.bindeval('[]');l.extend(iterable)`. Without
648 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200649 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200650 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200651 l.extend(['abc', 'def']) # .extend() method
652 print l[1:] # slicing
653 l[:0] = ['ghi', 'jkl'] # slice assignment
654 print l[0] # getting item
655 l[0] = 'mno' # assignment
656 for i in l: # iteration
657 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200658 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200659
660vim.Function object *python-Function*
Bram Moolenaar8110a092016-04-14 15:56:09 +0200661 Function-like object, acting like vim |Funcref| object. Accepts special
662 keyword argument `self`, see |Dictionary-function|. You can also use
663 `vim.Function(name)` constructor, it is the same as
664 `vim.bindeval('function(%s)'%json.dumps(name))`.
665
666 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200667 Attribute Description ~
668 name Function name.
669 args `None` or a |python-List| object with arguments. Note
670 that this is a copy of the arguments list, constructed
671 each time you request this attribute. Modifications made
672 to the list will be ignored (but not to the containers
673 inside argument list: this is like |copy()| and not
674 |deepcopy()|).
675 self `None` or a |python-Dictionary| object with self
676 dictionary. Note that explicit `self` keyword used when
677 calling resulting object overrides this attribute.
678 auto_rebind Boolean. True if partial created from this Python object
679 and stored in the VimL dictionary should be automatically
680 rebound to the dictionary it is stored in when this
681 dictionary is indexed. Exposes Vim internal difference
682 between `dict.func` (auto_rebind=True) and
683 `function(dict.func,dict)` (auto_rebind=False). This
684 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200685
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200686 Constructor additionally accepts `args`, `self` and `auto_rebind`
687 keywords. If `args` and/or `self` argument is given then it constructs
688 a partial, see |function()|. `auto_rebind` is only used when `self`
689 argument is given, otherwise it is assumed to be `True` regardless of
690 whether it was given or not. If `self` is given then it defaults to
691 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200692
Bram Moolenaara9922d62013-05-30 13:01:18 +0200693 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200694 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200695 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
696 vim.command('''
697 function DictFun() dict
698 return self
699 endfunction
700 ''')
701 f = vim.bindeval('function("DictFun")')
702 print f(self={}) # Like call('DictFun', [], {})
703 print isinstance(f, vim.Function) # True
704
Bram Moolenaar8110a092016-04-14 15:56:09 +0200705 p = vim.Function('DictFun', self={})
706 print f()
707 p = vim.Function('tr', args=['abc', 'a'])
708 print f('b')
709
Bram Moolenaara9922d62013-05-30 13:01:18 +0200710==============================================================================
7118. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200712
713To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
714functions to evaluate Python expressions and pass their values to VimL.
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100715|pyxeval()| is also available.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200716
717==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007189. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000719
Bram Moolenaard94464e2015-11-02 15:28:18 +0100720On MS-Windows and Unix the Python library can be loaded dynamically. The
721|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000722
Bram Moolenaard94464e2015-11-02 15:28:18 +0100723This means that Vim will search for the Python DLL or shared library file only
724when needed. When you don't use the Python interface you don't need it, thus
725you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000726
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100727
728MS-Windows ~
729
730To use the Python interface the Python DLL must be in your search path. In a
731console window type "path" to see what directories are used. The 'pythondll'
732or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000733
Bram Moolenaar3df01732017-02-17 22:47:16 +0100734The name of the DLL should match the Python version Vim was compiled with.
735Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
736That is the default value for 'pythondll'. For Python 3 it is python35.dll
737(Python 3.5). To know for sure edit "gvim.exe" and search for
738"python\d*.dll\c".
Bram Moolenaara5792f52005-11-23 21:25:05 +0000739
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100740
741Unix ~
742
743The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
744shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
745what were specified at compile time. The version of the shared library must
746match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100747
Bram Moolenaara5792f52005-11-23 21:25:05 +0000748==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020074910. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200750
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200751 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200752The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100753if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200754 :py3 print("Hello")
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200755
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200756To see what version of Python you have: >
757 :py3 import sys
758 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200759< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200760The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200761 *:py3do*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200762The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200763
Bram Moolenaar30b65812012-07-12 22:01:11 +0200764
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200765Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007661. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007672. Python 2 support only (+python or +python/dyn, -python3)
7683. Python 3 support only (-python, +python3 or +python3/dyn)
7694. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200770
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200771Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200772
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200773When Python 2 and Python 3 are both supported they must be loaded dynamically.
774
775When doing this on Linux/Unix systems and importing global symbols, this leads
776to a crash when the second Python version is used. So either global symbols
777are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200778loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200779symbols to be provided by Vim.
780 *E836* *E837*
781Vim's configuration script makes a guess for all libraries based on one
782standard Python library (termios). If importing this library succeeds for
783both Python versions, then both will be made available in Vim at the same
784time. If not, only the version first used in a session will be enabled.
785When trying to use the other one you will get the E836 or E837 error message.
786
787Here Vim's behavior depends on the system in which it was configured. In a
788system where both versions of Python were configured with --enable-shared,
789both versions of Python will be activated at the same time. There will still
790be problems with other third party libraries that were not linked to
791libPython.
792
793To work around such problems there are these options:
7941. The problematic library is recompiled to link to the according
795 libpython.so.
7962. Vim is recompiled for only one Python version.
7973. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
798 may crash Vim though.
799
Bram Moolenaar41009372013-07-01 22:03:04 +0200800 *E880*
801Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
802 :py vim.command("qall!")
803<
804
Bram Moolenaar446beb42011-05-10 17:18:44 +0200805 *has-python*
806You can test what Python version is available with: >
807 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200808 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200809 elseif has('python3')
810 echo 'there is Python 3.x'
811 endif
812
813Note however, that when Python 2 and 3 are both available and loaded
814dynamically, these has() calls will try to load them. If only one can be
815loaded at a time, just checking if Python 2 or 3 are available will prevent
816the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200817
818==============================================================================
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010081911. Python X *python_x* *pythonx*
820
821Because most python code can be written so that it works with python 2.6+ and
822python 3 the pyx* functions and commands have been writen. They work exactly
823the same as the Python 2 and 3 variants, but select the Python version using
824the 'pyxversion' setting.
825
826You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
827for Python commands. If you change this setting at runtime you may risk that
828state of plugins (such as initialization) may be lost.
829
830If you want to use a module, you can put it in the {rtp}/pythonx directory.
831See |pythonx-directory|.
832
833 *:pyx* *:pythonx*
834The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
835if the `:pyx` command is working: >
836 :pyx print("Hello")
837
838To see what version of Python is being used: >
839 :pyx import sys
840 :pyx print(sys.version)
841<
842 *:pyxfile* *python_x-special-comments*
843The `:pyxfile` command works similar to `:pyfile`. However you can add one of
844these comments to force Vim using `:pyfile` or `:py3file`: >
845 #!/any string/python2 " Shebang. Must be the first line of the file.
846 #!/any string/python3 " Shebang. Must be the first line of the file.
847 # requires python 2.x " Maximum lines depend on 'modelines'.
848 # requires python 3.x " Maximum lines depend on 'modelines'.
849Unlike normal modelines, the bottom of the file is not checked.
850If none of them are found, the 'pyxversion' setting is used.
851 *W20* *W21*
852If Vim does not support the selected Python version a silent message will be
853printed. Use `:messages` to read them.
854
855 *:pyxdo*
856The `:pyxdo` command works similar to `:pydo`.
857
858 *has-pythonx*
859You can test if pyx* commands are available with: >
860 if has('pythonx')
861 echo 'pyx* commands are available. (Python ' . &pyx . ')'
862 endif
863
864When compiled with only one of |+python| or |+python3|, the has() returns 1.
865When compiled with both |+python| and |+python3|, the test depends on the
866'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
867it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
868Python 2 or 3 respectively.
869
870Note that for has('pythonx') to work it may try to dynamically load Python 3
871or 2. This may have side effects, especially when Vim can only load one of
872the two.
873
874If a user prefers Python 2 and want to fallback to Python 3, he needs to set
875'pyxversion' explicitly in his |.vimrc|. E.g.: >
876 if has('python')
877 set pyx=2
878 elseif has('python3')
879 set pyx=3
880 endif
881
882==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000883 vim:tw=78:ts=8:ft=help:norl: