xref: /vim-8.2.3635/runtime/doc/if_pyth.txt (revision 519cc559)
1*if_pyth.txt*   For Vim version 8.2.  Last change: 2021 Nov 12
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|
1911. Python X					|python_x|
2012. Building with Python support		|python-building|
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] << [trim] [{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
45If [endmarker] is omitted from after the "<<", a dot '.' must be used after
46{script}, like for the |:append| and |:insert| commands.  Refer to
47|:let-heredoc| for more information.
48
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
60
61To see what version of Python you have: >
62	:python print(sys.version)
63
64There is no need to import sys, it's done by default.
65
66							*python-environment*
67Environment variables set in Vim are not always available in Python.  This
68depends on how Vim and Python were build.  Also see
69https://docs.python.org/3/library/os.html#os.environ
70
71Note: Python is very sensitive to the indenting.  Make sure the "class" line
72and "EOF" do not have any indent.
73
74							*:pydo*
75:[range]pydo {body}	Execute Python function "def _vim_pydo(line, linenr):
76			{body}" for each line in the [range], with the
77			function arguments being set to the text of each line
78			in turn, without a trailing <EOL>, and the current
79			line number. The function should return a string or
80			None. If a string is returned, it becomes the text of
81			the line in the current turn. The default for [range]
82			is the whole file: "1,$".
83
84Examples:
85>
86	:pydo return "%s\t%d" % (line[::-1], len(line))
87	:pydo if line: return "%4d: %s" % (linenr, line)
88<
89One can use `:pydo` in possible conjunction with `:py` to filter a range using
90python. For example: >
91
92	:py3 << EOF
93	needle = vim.eval('@a')
94	replacement = vim.eval('@b')
95
96	def py_vim_string_replace(str):
97		return str.replace(needle, replacement)
98	EOF
99	:'<,'>py3do return py_vim_string_replace(line)
100<
101							*:pyfile* *:pyf*
102:[range]pyf[ile] {file}
103			Execute the Python script in {file}.  The whole
104			argument is used as a single file name.
105
106Both of these commands do essentially the same thing - they execute a piece of
107Python code, with the "current range" |python-range| set to the given line
108range.
109
110In the case of :python, the code to execute is in the command-line.
111In the case of :pyfile, the code to execute is the contents of the given file.
112
113Python commands cannot be used in the |sandbox|.
114
115To pass arguments you need to set sys.argv[] explicitly.  Example: >
116
117	:python sys.argv = ["foo", "bar"]
118	:pyfile myscript.py
119
120Here are some examples					*python-examples*  >
121
122	:python from vim import *
123	:python from string import upper
124	:python current.line = upper(current.line)
125	:python print "Hello"
126	:python str = current.buffer[42]
127
128(Note that changes - like the imports - persist from one command to the next,
129just like in the Python interpreter.)
130
131==============================================================================
1322. The vim module					*python-vim*
133
134Python code gets all of its access to vim (with one exception - see
135|python-output| below) via the "vim" module.  The vim module implements two
136methods, three constants, and one error object.  You need to import the vim
137module before using it: >
138	:python import vim
139
140Overview >
141	:py print "Hello"		# displays a message
142	:py vim.command(cmd)		# execute an Ex command
143	:py w = vim.windows[n]		# gets window "n"
144	:py cw = vim.current.window	# gets the current window
145	:py b = vim.buffers[n]		# gets buffer "n"
146	:py cb = vim.current.buffer	# gets the current buffer
147	:py w.height = lines		# sets the window height
148	:py w.cursor = (row, col)	# sets the window cursor position
149	:py pos = w.cursor		# gets a tuple (row, col)
150	:py name = b.name		# gets the buffer file name
151	:py line = b[n]			# gets a line from the buffer
152	:py lines = b[n:m]		# gets a list of lines
153	:py num = len(b)		# gets the number of lines
154	:py b[n] = str			# sets a line in the buffer
155	:py b[n:m] = [str1, str2, str3]	# sets a number of lines at once
156	:py del b[n]			# deletes a line
157	:py del b[n:m]			# deletes a number of lines
158
159
160Methods of the "vim" module
161
162vim.command(str)					*python-command*
163	Executes the vim (ex-mode) command str.  Returns None.
164	Examples: >
165	    :py vim.command("set tw=72")
166	    :py vim.command("%s/aaa/bbb/g")
167<	The following definition executes Normal mode commands: >
168		def normal(str):
169			vim.command("normal "+str)
170		# Note the use of single quotes to delimit a string containing
171		# double quotes
172		normal('"a2dd"aP')
173<								*E659*
174	The ":python" command cannot be used recursively with Python 2.2 and
175	older.  This only works with Python 2.3 and later: >
176	    :py vim.command("python print 'Hello again Python'")
177
178vim.eval(str)						*python-eval*
179	Evaluates the expression str using the vim internal expression
180	evaluator (see |expression|).  Returns the expression result as:
181	- a string if the Vim expression evaluates to a string or number
182	- a list if the Vim expression evaluates to a Vim list
183	- a dictionary if the Vim expression evaluates to a Vim dictionary
184	Dictionaries and lists are recursively expanded.
185	Examples: >
186	    :" value of the 'textwidth' option
187	    :py text_width = vim.eval("&tw")
188	    :
189	    :" contents of the 'a' register
190	    :py a_reg = vim.eval("@a")
191	    :
192	    :" Result is a string! Use string.atoi() to convert to a number.
193	    :py str = vim.eval("12+12")
194	    :
195	    :py tagList = vim.eval('taglist("eval_expr")')
196<	The latter will return a python list of python dicts, for instance:
197	[{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
198	'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~
199
200vim.bindeval(str)					*python-bindeval*
201	Like |python-eval|, but returns special objects described in
202	|python-bindeval-objects|. These python objects let you modify (|List|
203	or |Dictionary|) or call (|Funcref|) vim objects.
204
205vim.strwidth(str)					*python-strwidth*
206	Like |strwidth()|: returns number of display cells str occupies, tab
207	is counted as one cell.
208
209vim.foreach_rtp(callable)				*python-foreach_rtp*
210	Call the given callable for each path in 'runtimepath' until either
211	callable returns something but None, the exception is raised or there
212	are no longer paths. If stopped in case callable returned non-None,
213	vim.foreach_rtp function returns the value returned by callable.
214
215vim.chdir(*args, **kwargs)				*python-chdir*
216vim.fchdir(*args, **kwargs)				*python-fchdir*
217	Run os.chdir or os.fchdir, then all appropriate vim stuff.
218	Note: you should not use these functions directly, use os.chdir and
219	      os.fchdir instead. Behavior of vim.fchdir is undefined in case
220	      os.fchdir does not exist.
221
222Error object of the "vim" module
223
224vim.error						*python-error*
225	Upon encountering a Vim error, Python raises an exception of type
226	vim.error.
227	Example: >
228		try:
229			vim.command("put a")
230		except vim.error:
231			# nothing in register a
232
233Constants of the "vim" module
234
235	Note that these are not actually constants - you could reassign them.
236	But this is silly, as you would then lose access to the vim objects
237	to which the variables referred.
238
239vim.buffers						*python-buffers*
240	A mapping object providing access to the list of vim buffers.  The
241	object supports the following operations: >
242	    :py b = vim.buffers[i]	# Indexing (read-only)
243	    :py b in vim.buffers	# Membership test
244	    :py n = len(vim.buffers)	# Number of elements
245	    :py for b in vim.buffers:	# Iterating over buffer list
246<
247vim.windows						*python-windows*
248	A sequence object providing access to the list of vim windows.  The
249	object supports the following operations: >
250	    :py w = vim.windows[i]	# Indexing (read-only)
251	    :py w in vim.windows	# Membership test
252	    :py n = len(vim.windows)	# Number of elements
253	    :py for w in vim.windows:	# Sequential access
254<	Note: vim.windows object always accesses current tab page.
255	|python-tabpage|.windows objects are bound to parent |python-tabpage|
256	object and always use windows from that tab page (or throw vim.error
257	in case tab page was deleted). You can keep a reference to both
258	without keeping a reference to vim module object or |python-tabpage|,
259	they will not lose their properties in this case.
260
261vim.tabpages						*python-tabpages*
262	A sequence object providing access to the list of vim tab pages. The
263	object supports the following operations: >
264	    :py t = vim.tabpages[i]	# Indexing (read-only)
265	    :py t in vim.tabpages	# Membership test
266	    :py n = len(vim.tabpages)	# Number of elements
267	    :py for t in vim.tabpages:	# Sequential access
268<
269vim.current						*python-current*
270	An object providing access (via specific attributes) to various
271	"current" objects available in vim:
272		vim.current.line	The current line (RW)		String
273		vim.current.buffer	The current buffer (RW)		Buffer
274		vim.current.window	The current window (RW)		Window
275		vim.current.tabpage	The current tab page (RW)	TabPage
276		vim.current.range	The current line range (RO)	Range
277
278	The last case deserves a little explanation.  When the :python or
279	:pyfile command specifies a range, this range of lines becomes the
280	"current range".  A range is a bit like a buffer, but with all access
281	restricted to a subset of lines.  See |python-range| for more details.
282
283	Note: When assigning to vim.current.{buffer,window,tabpage} it expects
284	valid |python-buffer|, |python-window| or |python-tabpage| objects
285	respectively. Assigning triggers normal (with |autocommand|s)
286	switching to given buffer, window or tab page. It is the only way to
287	switch UI objects in python: you can't assign to
288	|python-tabpage|.window attribute. To switch without triggering
289	autocommands use >
290	    py << EOF
291	    saved_eventignore = vim.options['eventignore']
292	    vim.options['eventignore'] = 'all'
293	    try:
294	        vim.current.buffer = vim.buffers[2] # Switch to buffer 2
295	    finally:
296	        vim.options['eventignore'] = saved_eventignore
297	    EOF
298<
299vim.vars						*python-vars*
300vim.vvars						*python-vvars*
301	Dictionary-like objects holding dictionaries with global (|g:|) and
302	vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
303	but faster.
304
305vim.options						*python-options*
306	Object partly supporting mapping protocol (supports setting and
307	getting items) providing a read-write access to global options.
308	Note: unlike |:set| this provides access only to global options. You
309	cannot use this object to obtain or set local options' values or
310	access local-only options in any fashion. Raises KeyError if no global
311	option with such name exists (i.e. does not raise KeyError for
312	|global-local| options and global only options, but does for window-
313	and buffer-local ones).  Use |python-buffer| objects to access to
314	buffer-local options and |python-window| objects to access to
315	window-local options.
316
317	Type of this object is available via "Options" attribute of vim
318	module.
319
320Output from Python					*python-output*
321	Vim displays all Python code output in the Vim message area.  Normal
322	output appears as information messages, and error output appears as
323	error messages.
324
325	In implementation terms, this means that all output to sys.stdout
326	(including the output from print statements) appears as information
327	messages, and all output to sys.stderr (including error tracebacks)
328	appears as error messages.
329
330							*python-input*
331	Input (via sys.stdin, including input() and raw_input()) is not
332	supported, and may cause the program to crash.  This should probably be
333	fixed.
334
335		    *python2-directory* *python3-directory* *pythonx-directory*
336Python 'runtimepath' handling				*python-special-path*
337
338In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
339the list of paths found in 'runtimepath': with this directory in sys.path and
340vim.path_hooks in sys.path_hooks python will try to load module from
341{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
342each {rtp} found in 'runtimepath'.
343
344Implementation is similar to the following, but written in C: >
345
346    from imp import find_module, load_module
347    import vim
348    import sys
349
350    class VimModuleLoader(object):
351        def __init__(self, module):
352            self.module = module
353
354        def load_module(self, fullname, path=None):
355            return self.module
356
357    def _find_module(fullname, oldtail, path):
358        idx = oldtail.find('.')
359        if idx > 0:
360            name = oldtail[:idx]
361            tail = oldtail[idx+1:]
362            fmr = find_module(name, path)
363            module = load_module(fullname[:-len(oldtail)] + name, *fmr)
364            return _find_module(fullname, tail, module.__path__)
365        else:
366            fmr = find_module(fullname, path)
367            return load_module(fullname, *fmr)
368
369    # It uses vim module itself in place of VimPathFinder class: it does not
370    # matter for python which object has find_module function attached to as
371    # an attribute.
372    class VimPathFinder(object):
373        @classmethod
374        def find_module(cls, fullname, path=None):
375            try:
376                return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
377            except ImportError:
378                return None
379
380        @classmethod
381        def load_module(cls, fullname, path=None):
382            return _find_module(fullname, fullname, path or vim._get_paths())
383
384    def hook(path):
385        if path == vim.VIM_SPECIAL_PATH:
386            return VimPathFinder
387        else:
388            raise ImportError
389
390    sys.path_hooks.append(hook)
391
392vim.VIM_SPECIAL_PATH					*python-VIM_SPECIAL_PATH*
393	String constant used in conjunction with vim path hook. If path hook
394	installed by vim is requested to handle anything but path equal to
395	vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
396	case it uses special loader.
397
398	Note: you must not use value of this constant directly, always use
399	      vim.VIM_SPECIAL_PATH object.
400
401vim.find_module(...)					*python-find_module*
402vim.path_hook(path)					*python-path_hook*
403	Methods or objects used to implement path loading as described above.
404	You should not be using any of these directly except for vim.path_hook
405	in case you need to do something with sys.meta_path. It is not
406	guaranteed that any of the objects will exist in the future vim
407	versions.
408
409vim._get_paths						*python-_get_paths*
410	Methods returning a list of paths which will be searched for by path
411	hook. You should not rely on this method being present in future
412	versions, but can use it for debugging.
413
414	It returns a list of {rtp}/python2 (or {rtp}/python3) and
415	{rtp}/pythonx directories for each {rtp} in 'runtimepath'.
416
417==============================================================================
4183. Buffer objects					*python-buffer*
419
420Buffer objects represent vim buffers.  You can obtain them in a number of ways:
421	- via vim.current.buffer (|python-current|)
422	- from indexing vim.buffers (|python-buffers|)
423	- from the "buffer" attribute of a window (|python-window|)
424
425Buffer objects have two read-only attributes - name - the full file name for
426the buffer, and number - the buffer number.  They also have three methods
427(append, mark, and range; see below).
428
429You can also treat buffer objects as sequence objects.  In this context, they
430act as if they were lists (yes, they are mutable) of strings, with each
431element being a line of the buffer.  All of the usual sequence operations,
432including indexing, index assignment, slicing and slice assignment, work as
433you would expect.  Note that the result of indexing (slicing) a buffer is a
434string (list of strings).  This has one unusual consequence - b[:] is different
435from b.  In particular, "b[:] = None" deletes the whole of the buffer, whereas
436"b = None" merely updates the variable b, with no effect on the buffer.
437
438Buffer indexes start at zero, as is normal in Python.  This differs from vim
439line numbers, which start from 1.  This is particularly relevant when dealing
440with marks (see below) which use vim line numbers.
441
442The buffer object attributes are:
443	b.vars		Dictionary-like object used to access
444			|buffer-variable|s.
445	b.options	Mapping object (supports item getting, setting and
446			deleting) that provides access to buffer-local options
447			and buffer-local values of |global-local| options. Use
448			|python-window|.options if option is window-local,
449			this object will raise KeyError. If option is
450			|global-local| and local value is missing getting it
451			will return None.
452	b.name		String, RW. Contains buffer name (full path).
453			Note: when assigning to b.name |BufFilePre| and
454			|BufFilePost| autocommands are launched.
455	b.number	Buffer number. Can be used as |python-buffers| key.
456			Read-only.
457	b.valid		True or False. Buffer object becomes invalid when
458			corresponding buffer is wiped out.
459
460The buffer object methods are:
461	b.append(str)	Append a line to the buffer
462	b.append(str, nr)  Idem, below line "nr"
463	b.append(list)	Append a list of lines to the buffer
464			Note that the option of supplying a list of strings to
465			the append method differs from the equivalent method
466			for Python's built-in list objects.
467	b.append(list, nr)  Idem, below line "nr"
468	b.mark(name)	Return a tuple (row,col) representing the position
469			of the named mark (can also get the []"<> marks)
470	b.range(s,e)	Return a range object (see |python-range|) which
471			represents the part of the given buffer between line
472			numbers s and e |inclusive|.
473
474Note that when adding a line it must not contain a line break character '\n'.
475A trailing '\n' is allowed and ignored, so that you can do: >
476	:py b.append(f.readlines())
477
478Buffer object type is available using "Buffer" attribute of vim module.
479
480Examples (assume b is the current buffer) >
481	:py print b.name		# write the buffer file name
482	:py b[0] = "hello!!!"		# replace the top line
483	:py b[:] = None			# delete the whole buffer
484	:py del b[:]			# delete the whole buffer
485	:py b[0:0] = [ "a line" ]	# add a line at the top
486	:py del b[2]			# delete a line (the third)
487	:py b.append("bottom")		# add a line at the bottom
488	:py n = len(b)			# number of lines
489	:py (row,col) = b.mark('a')	# named mark
490	:py r = b.range(1,5)		# a sub-range of the buffer
491	:py b.vars["foo"] = "bar"	# assign b:foo variable
492	:py b.options["ff"] = "dos"	# set fileformat
493	:py del b.options["ar"]		# same as :set autoread<
494
495==============================================================================
4964. Range objects					*python-range*
497
498Range objects represent a part of a vim buffer.  You can obtain them in a
499number of ways:
500	- via vim.current.range (|python-current|)
501	- from a buffer's range() method (|python-buffer|)
502
503A range object is almost identical in operation to a buffer object.  However,
504all operations are restricted to the lines within the range (this line range
505can, of course, change as a result of slice assignments, line deletions, or
506the range.append() method).
507
508The range object attributes are:
509	r.start		Index of first line into the buffer
510	r.end		Index of last line into the buffer
511
512The range object methods are:
513	r.append(str)	Append a line to the range
514	r.append(str, nr)  Idem, after line "nr"
515	r.append(list)	Append a list of lines to the range
516			Note that the option of supplying a list of strings to
517			the append method differs from the equivalent method
518			for Python's built-in list objects.
519	r.append(list, nr)  Idem, after line "nr"
520
521Range object type is available using "Range" attribute of vim module.
522
523Example (assume r is the current range):
524	# Send all lines in a range to the default printer
525	vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
526
527==============================================================================
5285. Window objects					*python-window*
529
530Window objects represent vim windows.  You can obtain them in a number of ways:
531	- via vim.current.window (|python-current|)
532	- from indexing vim.windows (|python-windows|)
533	- from indexing "windows" attribute of a tab page (|python-tabpage|)
534	- from the "window" attribute of a tab page (|python-tabpage|)
535
536You can manipulate window objects only through their attributes.  They have no
537methods, and no sequence or other interface.
538
539Window attributes are:
540	buffer (read-only)	The buffer displayed in this window
541	cursor (read-write)	The current cursor position in the window
542				This is a tuple, (row,col).
543	height (read-write)	The window height, in rows
544	width (read-write)	The window width, in columns
545	vars (read-only)	The window |w:| variables. Attribute is
546				unassignable, but you can change window
547				variables this way
548	options (read-only)	The window-local options. Attribute is
549				unassignable, but you can change window
550				options this way. Provides access only to
551				window-local options, for buffer-local use
552				|python-buffer| and for global ones use
553				|python-options|. If option is |global-local|
554				and local value is missing getting it will
555				return None.
556	number (read-only)	Window number.  The first window has number 1.
557				This is zero in case it cannot be determined
558				(e.g. when the window object belongs to other
559				tab page).
560	row, col (read-only)	On-screen window position in display cells.
561				First position is zero.
562	tabpage (read-only)	Window tab page.
563	valid (read-write)	True or False. Window object becomes invalid
564				when corresponding window is closed.
565
566The height attribute is writable only if the screen is split horizontally.
567The width attribute is writable only if the screen is split vertically.
568
569Window object type is available using "Window" attribute of vim module.
570
571==============================================================================
5726. Tab page objects					*python-tabpage*
573
574Tab page objects represent vim tab pages. You can obtain them in a number of
575ways:
576	- via vim.current.tabpage (|python-current|)
577	- from indexing vim.tabpages (|python-tabpages|)
578
579You can use this object to access tab page windows. They have no methods and
580no sequence or other interfaces.
581
582Tab page attributes are:
583	number		The tab page number like the one returned by
584			|tabpagenr()|.
585	windows		Like |python-windows|, but for current tab page.
586	vars		The tab page |t:| variables.
587	window		Current tabpage window.
588	valid		True or False. Tab page object becomes invalid when
589			corresponding tab page is closed.
590
591TabPage object type is available using "TabPage" attribute of vim module.
592
593==============================================================================
5947. vim.bindeval objects				*python-bindeval-objects*
595
596vim.Dictionary object				*python-Dictionary*
597    Dictionary-like object providing access to vim |Dictionary| type.
598    Attributes:
599        Attribute  Description ~
600        locked     One of                       *python-.locked*
601                    Value           Description ~
602                    zero            Variable is not locked
603                    vim.VAR_LOCKED  Variable is locked, but can be unlocked
604                    vim.VAR_FIXED   Variable is locked and can't be unlocked
605                   Read-write. You can unlock locked variable by assigning
606                   `True` or `False` to this attribute. No recursive locking
607                   is supported.
608        scope      One of
609                    Value              Description ~
610                    zero               Dictionary is not a scope one
611                    vim.VAR_DEF_SCOPE  |g:| or |l:| dictionary
612                    vim.VAR_SCOPE      Other scope dictionary,
613                                       see |internal-variables|
614    Methods (note: methods do not support keyword arguments):
615        Method      Description ~
616        keys()      Returns a list with dictionary keys.
617        values()    Returns a list with dictionary values.
618        items()     Returns a list of 2-tuples with dictionary contents.
619        update(iterable), update(dictionary), update(**kwargs)
620                    Adds keys to dictionary.
621        get(key[, default=None])
622                    Obtain key from dictionary, returning the default if it is
623                    not present.
624        pop(key[, default])
625                    Remove specified key from dictionary and return
626                    corresponding value. If key is not found and default is
627                    given returns the default, otherwise raises KeyError.
628        popitem()
629                    Remove random key from dictionary and return (key, value)
630                    pair.
631        has_key(key)
632                    Check whether dictionary contains specified key, similar
633                    to `key in dict`.
634
635        __new__(), __new__(iterable), __new__(dictionary), __new__(update)
636                    You can use `vim.Dictionary()` to create new vim
637                    dictionaries. `d=vim.Dictionary(arg)` is the same as
638                    `d=vim.bindeval('{}');d.update(arg)`. Without arguments
639                    constructs empty dictionary.
640
641    Examples: >
642        d = vim.Dictionary(food="bar")		# Constructor
643        d['a'] = 'b'				# Item assignment
644        print d['a']				# getting item
645        d.update({'c': 'd'})			# .update(dictionary)
646        d.update(e='f')				# .update(**kwargs)
647        d.update((('g', 'h'), ('i', 'j')))	# .update(iterable)
648        for key in d.keys():			# .keys()
649        for val in d.values():			# .values()
650        for key, val in d.items():		# .items()
651        print isinstance(d, vim.Dictionary)	# True
652        for key in d:				# Iteration over keys
653        class Dict(vim.Dictionary):		# Subclassing
654<
655    Note: when iterating over keys you should not modify dictionary.
656
657vim.List object					*python-List*
658    Sequence-like object providing access to vim |List| type.
659    Supports `.locked` attribute, see |python-.locked|. Also supports the
660    following methods:
661        Method          Description ~
662        extend(item)    Add items to the list.
663
664        __new__(), __new__(iterable)
665                        You can use `vim.List()` to create new vim lists.
666                        `l=vim.List(iterable)` is the same as
667                        `l=vim.bindeval('[]');l.extend(iterable)`. Without
668                        arguments constructs empty list.
669    Examples: >
670        l = vim.List("abc")		# Constructor, result: ['a', 'b', 'c']
671        l.extend(['abc', 'def'])	# .extend() method
672        print l[1:]			# slicing
673        l[:0] = ['ghi', 'jkl']		# slice assignment
674        print l[0]			# getting item
675        l[0] = 'mno'			# assignment
676        for i in l:			# iteration
677        print isinstance(l, vim.List)	# True
678        class List(vim.List):		# Subclassing
679
680vim.Function object				*python-Function*
681    Function-like object, acting like vim |Funcref| object. Accepts special
682    keyword argument `self`, see |Dictionary-function|. You can also use
683    `vim.Function(name)` constructor, it is the same as
684    `vim.bindeval('function(%s)'%json.dumps(name))`.
685
686    Attributes (read-only):
687        Attribute    Description ~
688        name         Function name.
689        args         `None` or a |python-List| object with arguments.  Note
690                     that this is a copy of the arguments list, constructed
691                     each time you request this attribute. Modifications made
692                     to the list will be ignored (but not to the containers
693                     inside argument list: this is like |copy()| and not
694                     |deepcopy()|).
695        self         `None` or a |python-Dictionary| object with self
696                     dictionary. Note that explicit `self` keyword used when
697                     calling resulting object overrides this attribute.
698        auto_rebind  Boolean. True if partial created from this Python object
699                     and stored in the Vim script dictionary should be
700                     automatically rebound to the dictionary it is stored in
701                     when this dictionary is indexed. Exposes Vim internal
702                     difference between `dict.func` (auto_rebind=True) and
703                     `function(dict.func,dict)` (auto_rebind=False). This
704                     attribute makes no sense if `self` attribute is `None`.
705
706    Constructor additionally accepts `args`, `self` and `auto_rebind`
707    keywords.  If `args` and/or `self` argument is given then it constructs
708    a partial, see |function()|.  `auto_rebind` is only used when `self`
709    argument is given, otherwise it is assumed to be `True` regardless of
710    whether it was given or not.  If `self` is given then it defaults to
711    `False`.
712
713    Examples: >
714        f = vim.Function('tr')			# Constructor
715        print f('abc', 'a', 'b')		# Calls tr('abc', 'a', 'b')
716        vim.command('''
717            function DictFun() dict
718                return self
719            endfunction
720        ''')
721        f = vim.bindeval('function("DictFun")')
722        print f(self={})			# Like call('DictFun', [], {})
723        print isinstance(f, vim.Function)	# True
724
725        p = vim.Function('DictFun', self={})
726        print f()
727        p = vim.Function('tr', args=['abc', 'a'])
728        print f('b')
729
730==============================================================================
7318. pyeval() and py3eval() Vim functions			*python-pyeval*
732
733To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
734functions to evaluate Python expressions and pass their values to Vim script.
735|pyxeval()| is also available.
736
737The Python value "None" is converted to v:none.
738
739==============================================================================
7409. Dynamic loading					*python-dynamic*
741
742On MS-Windows and Unix the Python library can be loaded dynamically.  The
743|:version| output then includes |+python/dyn| or |+python3/dyn|.
744
745This means that Vim will search for the Python DLL or shared library file only
746when needed.  When you don't use the Python interface you don't need it, thus
747you can use Vim without this file.
748
749
750MS-Windows ~
751
752To use the Python interface the Python DLL must be in your search path.  In a
753console window type "path" to see what directories are used.  The 'pythondll'
754or 'pythonthreedll' option can be also used to specify the Python DLL.
755
756The name of the DLL should match the Python version Vim was compiled with.
757Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
758That is the default value for 'pythondll'.  For Python 3 it is python36.dll
759(Python 3.6).  To know for sure edit "gvim.exe" and search for
760"python\d*.dll\c".
761
762
763Unix ~
764
765The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
766shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
767what were specified at compile time.  The version of the shared library must
768match the Python 2.x or Python 3 version Vim was compiled with.
769
770==============================================================================
77110. Python 3						*python3*
772
773							*:py3* *:python3*
774:[range]py3 {stmt}
775:[range]py3 << [trim] [{endmarker}]
776{script}
777{endmarker}
778
779:[range]python3 {stmt}
780:[range]python3 << [trim] [{endmarker}]
781{script}
782{endmarker}
783	The `:py3` and `:python3` commands work similar to `:python`.  A
784	simple check if the `:py3` command is working: >
785		:py3 print("Hello")
786<
787	To see what version of Python you have: >
788		:py3 import sys
789		:py3 print(sys.version)
790<							*:py3file*
791:[range]py3f[ile] {file}
792	The `:py3file` command works similar to `:pyfile`.
793							*:py3do*
794:[range]py3do {body}
795	The `:py3do` command works similar to `:pydo`.
796
797
798Vim can be built in four ways (:version output):
7991. No Python support	    (-python, -python3)
8002. Python 2 support only    (+python or +python/dyn, -python3)
8013. Python 3 support only    (-python, +python3 or +python3/dyn)
8024. Python 2 and 3 support   (+python/dyn, +python3/dyn)
803
804Some more details on the special case 4:  *python-2-and-3*
805
806When Python 2 and Python 3 are both supported they must be loaded dynamically.
807
808When doing this on Linux/Unix systems and importing global symbols, this leads
809to a crash when the second Python version is used.  So either global symbols
810are loaded but only one Python version is activated, or no global symbols are
811loaded. The latter makes Python's "import" fail on libraries that expect the
812symbols to be provided by Vim.
813							*E836* *E837*
814Vim's configuration script makes a guess for all libraries based on one
815standard Python library (termios).  If importing this library succeeds for
816both Python versions, then both will be made available in Vim at the same
817time.  If not, only the version first used in a session will be enabled.
818When trying to use the other one you will get the E836 or E837 error message.
819
820Here Vim's behavior depends on the system in which it was configured.  In a
821system where both versions of Python were configured with --enable-shared,
822both versions of Python will be activated at the same time.  There will still
823be problems with other third party libraries that were not linked to
824libPython.
825
826To work around such problems there are these options:
8271. The problematic library is recompiled to link to the according
828   libpython.so.
8292. Vim is recompiled for only one Python version.
8303. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
831   may crash Vim though.
832
833							*E880*
834Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
835	:py vim.command("qall!")
836<
837
838							*has-python*
839You can test what Python version is available with: >
840	if has('python')
841	  echo 'there is Python 2.x'
842	endif
843  	if has('python3')
844	  echo 'there is Python 3.x'
845	endif
846
847Note however, that when Python 2 and 3 are both available and loaded
848dynamically, these has() calls will try to load them.  If only one can be
849loaded at a time, just checking if Python 2 or 3 are available will prevent
850the other one from being available.
851
852To avoid loading the dynamic library, only check if Vim was compiled with
853python support: >
854	if has('python_compiled')
855	  echo 'compiled with Python 2.x support'
856	  if has('python_dynamic')
857	    echo 'Python 2.x dynamically loaded'
858	  endif
859	endif
860  	if has('python3_compiled')
861	  echo 'compiled with Python 3.x support'
862	  if has('python3_dynamic')
863	    echo 'Python 3.x dynamically loaded'
864	  endif
865	endif
866
867This also tells you whether Python is dynamically loaded, which will fail if
868the runtime library cannot be found.
869
870==============================================================================
87111. Python X						*python_x* *pythonx*
872
873Because most python code can be written so that it works with python 2.6+ and
874python 3 the pyx* functions and commands have been written.  They work exactly
875the same as the Python 2 and 3 variants, but select the Python version using
876the 'pyxversion' setting.
877
878You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
879for Python commands. If you change this setting at runtime you may risk that
880state of plugins (such as initialization) may be lost.
881
882If you want to use a module, you can put it in the {rtp}/pythonx directory.
883See |pythonx-directory|.
884
885							*:pyx* *:pythonx*
886The `:pyx` and `:pythonx` commands work similar to `:python`.  A simple check
887if the `:pyx` command is working: >
888	:pyx print("Hello")
889
890To see what version of Python is being used: >
891	:pyx import sys
892	:pyx print(sys.version)
893<
894					*:pyxfile* *python_x-special-comments*
895The `:pyxfile` command works similar to `:pyfile`.  However you can add one of
896these comments to force Vim using `:pyfile` or `:py3file`: >
897  #!/any string/python2		" Shebang. Must be the first line of the file.
898  #!/any string/python3		" Shebang. Must be the first line of the file.
899  # requires python 2.x		" Maximum lines depend on 'modelines'.
900  # requires python 3.x		" Maximum lines depend on 'modelines'.
901Unlike normal modelines, the bottom of the file is not checked.
902If none of them are found, the 'pyxversion' setting is used.
903							*W20* *W21*
904If Vim does not support the selected Python version a silent message will be
905printed.  Use `:messages` to read them.
906
907							*:pyxdo*
908The `:pyxdo` command works similar to `:pydo`.
909
910							*has-pythonx*
911You can test if pyx* commands are available with: >
912	if has('pythonx')
913	  echo 'pyx* commands are available. (Python ' . &pyx . ')'
914	endif
915
916When compiled with only one of |+python| or |+python3|, the has() returns 1.
917When compiled with both |+python| and |+python3|, the test depends on the
918'pyxversion' setting.  If 'pyxversion' is 0, it tests Python 3 first, and if
919it is not available then Python 2.  If 'pyxversion' is 2 or 3, it tests only
920Python 2 or 3 respectively.
921
922Note that for `has('pythonx')` to work it may try to dynamically load Python 3
923or 2.  This may have side effects, especially when Vim can only load one of
924the two.
925
926If a user prefers Python 2 and want to fallback to Python 3, he needs to set
927'pyxversion' explicitly in his |.vimrc|.  E.g.: >
928	if has('python')
929	  set pyx=2
930	elseif has('python3')
931	  set pyx=3
932	endif
933
934==============================================================================
93512. Building with Python support			*python-building*
936
937A few hints for building with Python 2 or 3 support.
938
939UNIX
940
941See src/Makefile for how to enable including the Python interface.
942
943On Ubuntu you will want to install these packages for Python 2:
944	python
945	python-dev
946For Python 3:
947	python3
948	python3-dev
949For Python 3.6:
950	python3.6
951	python3.6-dev
952
953If you have more than one version of Python 3, you need to link python3 to the
954one you prefer, before running configure.
955
956==============================================================================
957 vim:tw=78:ts=8:noet:ft=help:norl:
958