xref: /vim-8.2.3635/runtime/doc/if_pyth.txt (revision 2bf24176)
1*if_pyth.txt*   For Vim version 7.4.  Last change: 2015 Nov 10
2
3
4		  VIM REFERENCE MANUAL    by Paul Moore
5
6
7The Python Interface to Vim				*python* *Python*
8
91. 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. Tab page objects				|python-tabpage|
157. vim.bindeval objects				|python-bindeval-objects|
168. pyeval(), py3eval() Vim functions		|python-pyeval|
179. Dynamic loading				|python-dynamic|
1810. Python 3					|python3|
19
20{Vi does not have any of these commands}
21
22The Python 2.x interface is available only when Vim was compiled with the
23|+python| feature.
24The Python 3 interface is available only when Vim was compiled with the
25|+python3| feature.
26Both can be available at the same time, but read |python-2-and-3|.
27
28==============================================================================
291. Commands						*python-commands*
30
31					*:python* *:py* *E263* *E264* *E887*
32:[range]py[thon] {stmt}
33			Execute Python statement {stmt}.  A simple check if
34			the `:python` command is working: >
35				:python print "Hello"
36
37:[range]py[thon] << {endmarker}
38{script}
39{endmarker}
40			Execute Python script {script}.
41			Note: This command doesn't work when the Python
42			feature wasn't compiled in.  To avoid errors, see
43			|script-here|.
44
45{endmarker} must NOT be preceded by any white space.  If {endmarker} is
46omitted from after the "<<", a dot '.' must be used after {script}, like
47for the |:append| and |:insert| commands.
48This form of the |:python| command is mainly useful for including python code
49in Vim scripts.
50
51Example: >
52	function! IcecreamInitialize()
53	python << EOF
54	class StrawberryIcecream:
55		def __call__(self):
56			print 'EAT ME'
57	EOF
58	endfunction
59<
60Note: Python is very sensitive to the indenting.  Make sure the "class" line
61and "EOF" do not have any indent.
62
63							*:pydo*
64:[range]pydo {body}	Execute Python function "def _vim_pydo(line, linenr):
65			{body}" for each line in the [range], with the
66			function arguments being set to the text of each line
67			in turn, without a trailing <EOL>, and the current
68			line number. The function should return a string or
69			None. If a string is returned, it becomes the text of
70			the line in the current turn. The default for [range]
71			is the whole file: "1,$".
72			{not in Vi}
73
74Examples:
75>
76	:pydo return "%s\t%d" % (line[::-1], len(line))
77	:pydo if line: return "%4d: %s" % (linenr, line)
78<
79							*:pyfile* *:pyf*
80:[range]pyf[ile] {file}
81			Execute the Python script in {file}.  The whole
82			argument is used as a single file name.  {not in Vi}
83
84Both of these commands do essentially the same thing - they execute a piece of
85Python code, with the "current range" |python-range| set to the given line
86range.
87
88In the case of :python, the code to execute is in the command-line.
89In the case of :pyfile, the code to execute is the contents of the given file.
90
91Python commands cannot be used in the |sandbox|.
92
93To pass arguments you need to set sys.argv[] explicitly.  Example: >
94
95	:python import sys
96	:python sys.argv = ["foo", "bar"]
97	:pyfile myscript.py
98
99Here are some examples					*python-examples*  >
100
101	:python from vim import *
102	:python from string import upper
103	:python current.line = upper(current.line)
104	:python print "Hello"
105	:python str = current.buffer[42]
106
107(Note that changes - like the imports - persist from one command to the next,
108just like in the Python interpreter.)
109
110==============================================================================
1112. The vim module					*python-vim*
112
113Python code gets all of its access to vim (with one exception - see
114|python-output| below) via the "vim" module.  The vim module implements two
115methods, three constants, and one error object.  You need to import the vim
116module before using it: >
117	:python import vim
118
119Overview >
120	:py print "Hello"		# displays a message
121	:py vim.command(cmd)		# execute an Ex command
122	:py w = vim.windows[n]		# gets window "n"
123	:py cw = vim.current.window	# gets the current window
124	:py b = vim.buffers[n]		# gets buffer "n"
125	:py cb = vim.current.buffer	# gets the current buffer
126	:py w.height = lines		# sets the window height
127	:py w.cursor = (row, col)	# sets the window cursor position
128	:py pos = w.cursor		# gets a tuple (row, col)
129	:py name = b.name		# gets the buffer file name
130	:py line = b[n]			# gets a line from the buffer
131	:py lines = b[n:m]		# gets a list of lines
132	:py num = len(b)		# gets the number of lines
133	:py b[n] = str			# sets a line in the buffer
134	:py b[n:m] = [str1, str2, str3]	# sets a number of lines at once
135	:py del b[n]			# deletes a line
136	:py del b[n:m]			# deletes a number of lines
137
138
139Methods of the "vim" module
140
141vim.command(str)					*python-command*
142	Executes the vim (ex-mode) command str.  Returns None.
143	Examples: >
144	    :py vim.command("set tw=72")
145	    :py vim.command("%s/aaa/bbb/g")
146<	The following definition executes Normal mode commands: >
147		def normal(str):
148			vim.command("normal "+str)
149		# Note the use of single quotes to delimit a string containing
150		# double quotes
151		normal('"a2dd"aP')
152<								*E659*
153	The ":python" command cannot be used recursively with Python 2.2 and
154	older.  This only works with Python 2.3 and later: >
155	    :py vim.command("python print 'Hello again Python'")
156
157vim.eval(str)						*python-eval*
158	Evaluates the expression str using the vim internal expression
159	evaluator (see |expression|).  Returns the expression result as:
160	- a string if the Vim expression evaluates to a string or number
161	- a list if the Vim expression evaluates to a Vim list
162	- a dictionary if the Vim expression evaluates to a Vim dictionary
163	Dictionaries and lists are recursively expanded.
164	Examples: >
165	    :py text_width = vim.eval("&tw")
166	    :py str = vim.eval("12+12")		# NB result is a string! Use
167						# string.atoi() to convert to
168						# a number.
169
170	    :py tagList = vim.eval('taglist("eval_expr")')
171<	The latter will return a python list of python dicts, for instance:
172	[{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
173	'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
174
175vim.bindeval(str)					*python-bindeval*
176	Like |python-eval|, but returns special objects described in
177	|python-bindeval-objects|. These python objects let you modify (|List|
178	or |Dictionary|) or call (|Funcref|) vim objects.
179
180vim.strwidth(str)					*python-strwidth*
181	Like |strwidth()|: returns number of display cells str occupies, tab
182	is counted as one cell.
183
184vim.foreach_rtp(callable)				*python-foreach_rtp*
185	Call the given callable for each path in 'runtimepath' until either
186	callable returns something but None, the exception is raised or there
187	are no longer paths. If stopped in case callable returned non-None,
188	vim.foreach_rtp function returns the value returned by callable.
189
190vim.chdir(*args, **kwargs)				*python-chdir*
191vim.fchdir(*args, **kwargs)				*python-fchdir*
192	Run os.chdir or os.fchdir, then all appropriate vim stuff.
193	Note: you should not use these functions directly, use os.chdir and
194	      os.fchdir instead. Behavior of vim.fchdir is undefined in case
195	      os.fchdir does not exist.
196
197Error object of the "vim" module
198
199vim.error						*python-error*
200	Upon encountering a Vim error, Python raises an exception of type
201	vim.error.
202	Example: >
203		try:
204			vim.command("put a")
205		except vim.error:
206			# nothing in register a
207
208Constants of the "vim" module
209
210	Note that these are not actually constants - you could reassign them.
211	But this is silly, as you would then lose access to the vim objects
212	to which the variables referred.
213
214vim.buffers						*python-buffers*
215	A mapping object providing access to the list of vim buffers.  The
216	object supports the following operations: >
217	    :py b = vim.buffers[i]	# Indexing (read-only)
218	    :py b in vim.buffers	# Membership test
219	    :py n = len(vim.buffers)	# Number of elements
220	    :py for b in vim.buffers:	# Iterating over buffer list
221<
222vim.windows						*python-windows*
223	A sequence object providing access to the list of vim windows.  The
224	object supports the following operations: >
225	    :py w = vim.windows[i]	# Indexing (read-only)
226	    :py w in vim.windows	# Membership test
227	    :py n = len(vim.windows)	# Number of elements
228	    :py for w in vim.windows:	# Sequential access
229<	Note: vim.windows object always accesses current tab page.
230	|python-tabpage|.windows objects are bound to parent |python-tabpage|
231	object and always use windows from that tab page (or throw vim.error
232	in case tab page was deleted). You can keep a reference to both
233	without keeping a reference to vim module object or |python-tabpage|,
234	they will not lose their properties in this case.
235
236vim.tabpages						*python-tabpages*
237	A sequence object providing access to the list of vim tab pages. The
238	object supports the following operations: >
239	    :py t = vim.tabpages[i]	# Indexing (read-only)
240	    :py t in vim.tabpages	# Membership test
241	    :py n = len(vim.tabpages)	# Number of elements
242	    :py for t in vim.tabpages:	# Sequential access
243<
244vim.current						*python-current*
245	An object providing access (via specific attributes) to various
246	"current" objects available in vim:
247		vim.current.line	The current line (RW)		String
248		vim.current.buffer	The current buffer (RW)		Buffer
249		vim.current.window	The current window (RW)		Window
250		vim.current.tabpage	The current tab page (RW)	TabPage
251		vim.current.range	The current line range (RO)	Range
252
253	The last case deserves a little explanation.  When the :python or
254	:pyfile command specifies a range, this range of lines becomes the
255	"current range".  A range is a bit like a buffer, but with all access
256	restricted to a subset of lines.  See |python-range| for more details.
257
258	Note: When assigning to vim.current.{buffer,window,tabpage} it expects
259	valid |python-buffer|, |python-window| or |python-tabpage| objects
260	respectively. Assigning triggers normal (with |autocommand|s)
261	switching to given buffer, window or tab page. It is the only way to
262	switch UI objects in python: you can't assign to
263	|python-tabpage|.window attribute. To switch without triggering
264	autocommands use >
265	    py << EOF
266	    saved_eventignore = vim.options['eventignore']
267	    vim.options['eventignore'] = 'all'
268	    try:
269	        vim.current.buffer = vim.buffers[2] # Switch to buffer 2
270	    finally:
271	        vim.options['eventignore'] = saved_eventignore
272	    EOF
273<
274vim.vars						*python-vars*
275vim.vvars						*python-vvars*
276	Dictionary-like objects holding dictionaries with global (|g:|) and
277	vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
278	but faster.
279
280vim.options						*python-options*
281	Object partly supporting mapping protocol (supports setting and
282	getting items) providing a read-write access to global options.
283	Note: unlike |:set| this provides access only to global options. You
284	cannot use this object to obtain or set local options' values or
285	access local-only options in any fashion. Raises KeyError if no global
286	option with such name exists (i.e. does not raise KeyError for
287	|global-local| options and global only options, but does for window-
288	and buffer-local ones).  Use |python-buffer| objects to access to
289	buffer-local options and |python-window| objects to access to
290	window-local options.
291
292	Type of this object is available via "Options" attribute of vim
293	module.
294
295Output from Python					*python-output*
296	Vim displays all Python code output in the Vim message area.  Normal
297	output appears as information messages, and error output appears as
298	error messages.
299
300	In implementation terms, this means that all output to sys.stdout
301	(including the output from print statements) appears as information
302	messages, and all output to sys.stderr (including error tracebacks)
303	appears as error messages.
304
305							*python-input*
306	Input (via sys.stdin, including input() and raw_input()) is not
307	supported, and may cause the program to crash.  This should probably be
308	fixed.
309
310		    *python2-directory* *python3-directory* *pythonx-directory*
311Python 'runtimepath' handling				*python-special-path*
312
313In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
314the list of paths found in 'runtimepath': with this directory in sys.path and
315vim.path_hooks in sys.path_hooks python will try to load module from
316{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
317each {rtp} found in 'runtimepath'.
318
319Implementation is similar to the following, but written in C: >
320
321    from imp import find_module, load_module
322    import vim
323    import sys
324
325    class VimModuleLoader(object):
326        def __init__(self, module):
327            self.module = module
328
329        def load_module(self, fullname, path=None):
330            return self.module
331
332    def _find_module(fullname, oldtail, path):
333        idx = oldtail.find('.')
334        if idx > 0:
335            name = oldtail[:idx]
336            tail = oldtail[idx+1:]
337            fmr = find_module(name, path)
338            module = load_module(fullname[:-len(oldtail)] + name, *fmr)
339            return _find_module(fullname, tail, module.__path__)
340        else:
341            fmr = find_module(fullname, path)
342            return load_module(fullname, *fmr)
343
344    # It uses vim module itself in place of VimPathFinder class: it does not
345    # matter for python which object has find_module function attached to as
346    # an attribute.
347    class VimPathFinder(object):
348        @classmethod
349        def find_module(cls, fullname, path=None):
350            try:
351                return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
352            except ImportError:
353                return None
354
355        @classmethod
356        def load_module(cls, fullname, path=None):
357            return _find_module(fullname, fullname, path or vim._get_paths())
358
359    def hook(path):
360        if path == vim.VIM_SPECIAL_PATH:
361            return VimPathFinder
362        else:
363            raise ImportError
364
365    sys.path_hooks.append(hook)
366
367vim.VIM_SPECIAL_PATH					*python-VIM_SPECIAL_PATH*
368	String constant used in conjunction with vim path hook. If path hook
369	installed by vim is requested to handle anything but path equal to
370	vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
371	case it uses special loader.
372
373	Note: you must not use value of this constant directly, always use
374	      vim.VIM_SPECIAL_PATH object.
375
376vim.find_module(...)					*python-find_module*
377vim.path_hook(path)					*python-path_hook*
378	Methods or objects used to implement path loading as described above.
379	You should not be using any of these directly except for vim.path_hook
380	in case you need to do something with sys.meta_path. It is not
381	guaranteed that any of the objects will exist in the future vim
382	versions.
383
384vim._get_paths						*python-_get_paths*
385	Methods returning a list of paths which will be searched for by path
386	hook. You should not rely on this method being present in future
387	versions, but can use it for debugging.
388
389	It returns a list of {rtp}/python2 (or {rtp}/python3) and
390	{rtp}/pythonx directories for each {rtp} in 'runtimepath'.
391
392==============================================================================
3933. Buffer objects					*python-buffer*
394
395Buffer objects represent vim buffers.  You can obtain them in a number of ways:
396	- via vim.current.buffer (|python-current|)
397	- from indexing vim.buffers (|python-buffers|)
398	- from the "buffer" attribute of a window (|python-window|)
399
400Buffer objects have two read-only attributes - name - the full file name for
401the buffer, and number - the buffer number.  They also have three methods
402(append, mark, and range; see below).
403
404You can also treat buffer objects as sequence objects.  In this context, they
405act as if they were lists (yes, they are mutable) of strings, with each
406element being a line of the buffer.  All of the usual sequence operations,
407including indexing, index assignment, slicing and slice assignment, work as
408you would expect.  Note that the result of indexing (slicing) a buffer is a
409string (list of strings).  This has one unusual consequence - b[:] is different
410from b.  In particular, "b[:] = None" deletes the whole of the buffer, whereas
411"b = None" merely updates the variable b, with no effect on the buffer.
412
413Buffer indexes start at zero, as is normal in Python.  This differs from vim
414line numbers, which start from 1.  This is particularly relevant when dealing
415with marks (see below) which use vim line numbers.
416
417The buffer object attributes are:
418	b.vars		Dictionary-like object used to access
419			|buffer-variable|s.
420	b.options	Mapping object (supports item getting, setting and
421			deleting) that provides access to buffer-local options
422			and buffer-local values of |global-local| options. Use
423			|python-window|.options if option is window-local,
424			this object will raise KeyError. If option is
425			|global-local| and local value is missing getting it
426			will return None.
427	b.name		String, RW. Contains buffer name (full path).
428			Note: when assigning to b.name |BufFilePre| and
429			|BufFilePost| autocommands are launched.
430	b.number	Buffer number. Can be used as |python-buffers| key.
431			Read-only.
432	b.valid		True or False. Buffer object becomes invalid when
433			corresponding buffer is wiped out.
434
435The buffer object methods are:
436	b.append(str)	Append a line to the buffer
437	b.append(str, nr)  Idem, below line "nr"
438	b.append(list)	Append a list of lines to the buffer
439			Note that the option of supplying a list of strings to
440			the append method differs from the equivalent method
441			for Python's built-in list objects.
442	b.append(list, nr)  Idem, below line "nr"
443	b.mark(name)	Return a tuple (row,col) representing the position
444			of the named mark (can also get the []"<> marks)
445	b.range(s,e)	Return a range object (see |python-range|) which
446			represents the part of the given buffer between line
447			numbers s and e |inclusive|.
448
449Note that when adding a line it must not contain a line break character '\n'.
450A trailing '\n' is allowed and ignored, so that you can do: >
451	:py b.append(f.readlines())
452
453Buffer object type is available using "Buffer" attribute of vim module.
454
455Examples (assume b is the current buffer) >
456	:py print b.name		# write the buffer file name
457	:py b[0] = "hello!!!"		# replace the top line
458	:py b[:] = None			# delete the whole buffer
459	:py del b[:]			# delete the whole buffer
460	:py b[0:0] = [ "a line" ]	# add a line at the top
461	:py del b[2]			# delete a line (the third)
462	:py b.append("bottom")		# add a line at the bottom
463	:py n = len(b)			# number of lines
464	:py (row,col) = b.mark('a')	# named mark
465	:py r = b.range(1,5)		# a sub-range of the buffer
466	:py b.vars["foo"] = "bar"	# assign b:foo variable
467	:py b.options["ff"] = "dos"	# set fileformat
468	:py del b.options["ar"]		# same as :set autoread<
469
470==============================================================================
4714. Range objects					*python-range*
472
473Range objects represent a part of a vim buffer.  You can obtain them in a
474number of ways:
475	- via vim.current.range (|python-current|)
476	- from a buffer's range() method (|python-buffer|)
477
478A range object is almost identical in operation to a buffer object.  However,
479all operations are restricted to the lines within the range (this line range
480can, of course, change as a result of slice assignments, line deletions, or
481the range.append() method).
482
483The range object attributes are:
484	r.start		Index of first line into the buffer
485	r.end		Index of last line into the buffer
486
487The range object methods are:
488	r.append(str)	Append a line to the range
489	r.append(str, nr)  Idem, after line "nr"
490	r.append(list)	Append a list of lines to the range
491			Note that the option of supplying a list of strings to
492			the append method differs from the equivalent method
493			for Python's built-in list objects.
494	r.append(list, nr)  Idem, after line "nr"
495
496Range object type is available using "Range" attribute of vim module.
497
498Example (assume r is the current range):
499	# Send all lines in a range to the default printer
500	vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
501
502==============================================================================
5035. Window objects					*python-window*
504
505Window objects represent vim windows.  You can obtain them in a number of ways:
506	- via vim.current.window (|python-current|)
507	- from indexing vim.windows (|python-windows|)
508	- from indexing "windows" attribute of a tab page (|python-tabpage|)
509	- from the "window" attribute of a tab page (|python-tabpage|)
510
511You can manipulate window objects only through their attributes.  They have no
512methods, and no sequence or other interface.
513
514Window attributes are:
515	buffer (read-only)	The buffer displayed in this window
516	cursor (read-write)	The current cursor position in the window
517				This is a tuple, (row,col).
518	height (read-write)	The window height, in rows
519	width (read-write)	The window width, in columns
520	vars (read-only)	The window |w:| variables. Attribute is
521				unassignable, but you can change window
522				variables this way
523	options (read-only)	The window-local options. Attribute is
524				unassignable, but you can change window
525				options this way. Provides access only to
526				window-local options, for buffer-local use
527				|python-buffer| and for global ones use
528				|python-options|. If option is |global-local|
529				and local value is missing getting it will
530				return None.
531	number (read-only)	Window number.  The first window has number 1.
532				This is zero in case it cannot be determined
533				(e.g. when the window object belongs to other
534				tab page).
535	row, col (read-only)	On-screen window position in display cells.
536				First position is zero.
537	tabpage (read-only)	Window tab page.
538	valid (read-write)	True or False. Window object becomes invalid
539				when corresponding window is closed.
540
541The height attribute is writable only if the screen is split horizontally.
542The width attribute is writable only if the screen is split vertically.
543
544Window object type is available using "Window" attribute of vim module.
545
546==============================================================================
5476. Tab page objects					*python-tabpage*
548
549Tab page objects represent vim tab pages. You can obtain them in a number of
550ways:
551	- via vim.current.tabpage (|python-current|)
552	- from indexing vim.tabpages (|python-tabpages|)
553
554You can use this object to access tab page windows. They have no methods and
555no sequence or other interfaces.
556
557Tab page attributes are:
558	number		The tab page number like the one returned by
559			|tabpagenr()|.
560	windows		Like |python-windows|, but for current tab page.
561	vars		The tab page |t:| variables.
562	window		Current tabpage window.
563	valid		True or False. Tab page object becomes invalid when
564			corresponding tab page is closed.
565
566TabPage object type is available using "TabPage" attribute of vim module.
567
568==============================================================================
5697. vim.bindeval objects				*python-bindeval-objects*
570
571vim.Dictionary object				*python-Dictionary*
572    Dictionary-like object providing access to vim |Dictionary| type.
573    Attributes:
574        Attribute  Description ~
575        locked     One of                       *python-.locked*
576                    Value           Description ~
577                    zero            Variable is not locked
578                    vim.VAR_LOCKED  Variable is locked, but can be unlocked
579                    vim.VAR_FIXED   Variable is locked and can't be unlocked
580                   Read-write. You can unlock locked variable by assigning
581                   `True` or `False` to this attribute. No recursive locking
582                   is supported.
583        scope      One of
584                    Value              Description ~
585                    zero               Dictionary is not a scope one
586                    vim.VAR_DEF_SCOPE  |g:| or |l:| dictionary
587                    vim.VAR_SCOPE      Other scope dictionary,
588                                       see |internal-variables|
589    Methods (note: methods do not support keyword arguments):
590        Method      Description ~
591        keys()      Returns a list with dictionary keys.
592        values()    Returns a list with dictionary values.
593        items()     Returns a list of 2-tuples with dictionary contents.
594        update(iterable), update(dictionary), update(**kwargs)
595                    Adds keys to dictionary.
596        get(key[, default=None])
597                    Obtain key from dictionary, returning the default if it is
598                    not present.
599        pop(key[, default])
600                    Remove specified key from dictionary and return
601                    corresponding value. If key is not found and default is
602                    given returns the default, otherwise raises KeyError.
603        popitem()
604                    Remove random key from dictionary and return (key, value)
605                    pair.
606        has_key(key)
607                    Check whether dictionary contains specified key, similar
608                    to `key in dict`.
609
610        __new__(), __new__(iterable), __new__(dictionary), __new__(update)
611                    You can use `vim.Dictionary()` to create new vim
612                    dictionaries. `d=vim.Dictionary(arg)` is the same as
613                    `d=vim.bindeval('{}');d.update(arg)`. Without arguments
614                    constructs empty dictionary.
615
616    Examples: >
617        d = vim.Dictionary(food="bar")		# Constructor
618        d['a'] = 'b'				# Item assignment
619        print d['a']				# getting item
620        d.update({'c': 'd'})			# .update(dictionary)
621        d.update(e='f')				# .update(**kwargs)
622        d.update((('g', 'h'), ('i', 'j')))	# .update(iterable)
623        for key in d.keys():			# .keys()
624        for val in d.values():			# .values()
625        for key, val in d.items():		# .items()
626        print isinstance(d, vim.Dictionary)	# True
627        for key in d:				# Iteration over keys
628        class Dict(vim.Dictionary):		# Subclassing
629<
630    Note: when iterating over keys you should not modify dictionary.
631
632vim.List object					*python-List*
633    Sequence-like object providing access to vim |List| type.
634    Supports `.locked` attribute, see |python-.locked|. Also supports the
635    following methods:
636        Method          Description ~
637        extend(item)    Add items to the list.
638
639        __new__(), __new__(iterable)
640                        You can use `vim.List()` to create new vim lists.
641                        `l=vim.List(iterable)` is the same as
642                        `l=vim.bindeval('[]');l.extend(iterable)`. Without
643                        arguments constructs empty list.
644    Examples: >
645        l = vim.List("abc")		# Constructor, result: ['a', 'b', 'c']
646        l.extend(['abc', 'def'])	# .extend() method
647        print l[1:]			# slicing
648        l[:0] = ['ghi', 'jkl']		# slice assignment
649        print l[0]			# getting item
650        l[0] = 'mno'			# assignment
651        for i in l:			# iteration
652        print isinstance(l, vim.List)	# True
653        class List(vim.List):		# Subclassing
654
655vim.Function object				*python-Function*
656    Function-like object, acting like vim |Funcref| object. Supports `.name`
657    attribute and is callable. Accepts special keyword argument `self`, see
658    |Dictionary-function|. You can also use `vim.Function(name)` constructor,
659    it is the same as `vim.bindeval('function(%s)'%json.dumps(name))`.
660
661    Examples: >
662        f = vim.Function('tr')			# Constructor
663        print f('abc', 'a', 'b')		# Calls tr('abc', 'a', 'b')
664        vim.command('''
665            function DictFun() dict
666                return self
667            endfunction
668        ''')
669        f = vim.bindeval('function("DictFun")')
670        print f(self={})			# Like call('DictFun', [], {})
671        print isinstance(f, vim.Function)	# True
672
673==============================================================================
6748. pyeval() and py3eval() Vim functions			*python-pyeval*
675
676To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
677functions to evaluate Python expressions and pass their values to VimL.
678
679==============================================================================
6809. Dynamic loading					*python-dynamic*
681
682On MS-Windows and Unix the Python library can be loaded dynamically.  The
683|:version| output then includes |+python/dyn| or |+python3/dyn|.
684
685This means that Vim will search for the Python DLL or shared library file only
686when needed.  When you don't use the Python interface you don't need it, thus
687you can use Vim without this file.
688
689On MS-Windows to use the Python interface the Python DLL must be in your search
690path.  In a console window type "path" to see what directories are used.
691
692The name of the DLL must match the Python version Vim was compiled with.
693Currently the name is "python24.dll".  That is for Python 2.4.  To know for
694sure edit "gvim.exe" and search for "python\d*.dll\c".
695
696On Unix the 'pythondll' or 'pythonthreedll' option can be used to specify the
697Python shared library file instead of DYNAMIC_PYTHON_DLL or
698DYNAMIC_PYTHON3_DLL file what were specified at compile time.  The version of
699the shared library must match the Python 2.x or Python 3 version Vim was
700compiled with.
701
702==============================================================================
70310. Python 3						*python3*
704
705							*:py3* *:python3*
706The `:py3` and `:python3` commands work similar to `:python`.  A simple check
707if the `:py3` command is working: >
708	:py3 print("Hello")
709<							*:py3file*
710The `:py3file` command works similar to `:pyfile`.
711							*:py3do* *E863*
712The `:py3do` command works similar to `:pydo`.
713
714
715Vim can be built in four ways (:version output):
7161. No Python support	    (-python, -python3)
7172. Python 2 support only    (+python or +python/dyn, -python3)
7183. Python 3 support only    (-python, +python3 or +python3/dyn)
7194. Python 2 and 3 support   (+python/dyn, +python3/dyn)
720
721Some more details on the special case 4:  *python-2-and-3*
722
723When Python 2 and Python 3 are both supported they must be loaded dynamically.
724
725When doing this on Linux/Unix systems and importing global symbols, this leads
726to a crash when the second Python version is used.  So either global symbols
727are loaded but only one Python version is activated, or no global symbols are
728loaded. The latter makes Python's "import" fail on libraries that expect the
729symbols to be provided by Vim.
730							*E836* *E837*
731Vim's configuration script makes a guess for all libraries based on one
732standard Python library (termios).  If importing this library succeeds for
733both Python versions, then both will be made available in Vim at the same
734time.  If not, only the version first used in a session will be enabled.
735When trying to use the other one you will get the E836 or E837 error message.
736
737Here Vim's behavior depends on the system in which it was configured.  In a
738system where both versions of Python were configured with --enable-shared,
739both versions of Python will be activated at the same time.  There will still
740be problems with other third party libraries that were not linked to
741libPython.
742
743To work around such problems there are these options:
7441. The problematic library is recompiled to link to the according
745   libpython.so.
7462. Vim is recompiled for only one Python version.
7473. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
748   may crash Vim though.
749
750							*E880*
751Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
752	:py vim.command("qall!")
753<
754
755							*has-python*
756You can test what Python version is available with: >
757	if has('python')
758	  echo 'there is Python 2.x'
759  	elseif has('python3')
760	  echo 'there is Python 3.x'
761	endif
762
763Note however, that when Python 2 and 3 are both available and loaded
764dynamically, these has() calls will try to load them.  If only one can be
765loaded at a time, just checking if Python 2 or 3 are available will prevent
766the other one from being available.
767
768==============================================================================
769 vim:tw=78:ts=8:ft=help:norl:
770