blob: d21de4b469d2ad60d3fc4e8458b4981153089e13 [file] [log] [blame]
Bram Moolenaarb1c91982018-05-17 17:04:55 +02001*if_pyth.txt* For Vim version 8.1. Last change: 2018 Jan 30
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 Moolenaar036986f2017-03-16 17:41:02 +01002012. Building with Python support |python-building|
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
22{Vi does not have any of these commands}
23
Bram Moolenaar368373e2010-07-19 20:46:22 +020024The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000025|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020026The Python 3 interface is available only when Vim was compiled with the
27|+python3| feature.
Bram Moolenaar9ba7e172013-07-17 22:37:26 +020028Both can be available at the same time, but read |python-2-and-3|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000029
30==============================================================================
311. Commands *python-commands*
32
Bram Moolenaardbc28022014-07-26 13:40:44 +020033 *:python* *:py* *E263* *E264* *E887*
Bram Moolenaar071d4272004-06-13 20:20:40 +000034:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020035 Execute Python statement {stmt}. A simple check if
36 the `:python` command is working: >
37 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000038
39:[range]py[thon] << {endmarker}
40{script}
41{endmarker}
42 Execute Python script {script}.
43 Note: This command doesn't work when the Python
44 feature wasn't compiled in. To avoid errors, see
45 |script-here|.
46
47{endmarker} must NOT be preceded by any white space. If {endmarker} is
48omitted from after the "<<", a dot '.' must be used after {script}, like
49for the |:append| and |:insert| commands.
50This form of the |:python| command is mainly useful for including python code
51in Vim scripts.
52
53Example: >
54 function! IcecreamInitialize()
55 python << EOF
56 class StrawberryIcecream:
57 def __call__(self):
58 print 'EAT ME'
59 EOF
60 endfunction
Bram Moolenaar64d8e252016-09-06 22:12:34 +020061
62To see what version of Python you have: >
63 :python import sys
64 :python print(sys.version)
65
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010066Note: Python is very sensitive to the indenting. Make sure the "class" line
67and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000068
Bram Moolenaard620aa92013-05-17 16:40:06 +020069 *:pydo*
70:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
71 {body}" for each line in the [range], with the
72 function arguments being set to the text of each line
73 in turn, without a trailing <EOL>, and the current
74 line number. The function should return a string or
75 None. If a string is returned, it becomes the text of
76 the line in the current turn. The default for [range]
77 is the whole file: "1,$".
78 {not in Vi}
79
80Examples:
81>
82 :pydo return "%s\t%d" % (line[::-1], len(line))
83 :pydo if line: return "%4d: %s" % (linenr, line)
84<
Bram Moolenaar071d4272004-06-13 20:20:40 +000085 *:pyfile* *:pyf*
86:[range]pyf[ile] {file}
87 Execute the Python script in {file}. The whole
88 argument is used as a single file name. {not in Vi}
89
90Both of these commands do essentially the same thing - they execute a piece of
91Python code, with the "current range" |python-range| set to the given line
92range.
93
94In the case of :python, the code to execute is in the command-line.
95In the case of :pyfile, the code to execute is the contents of the given file.
96
97Python commands cannot be used in the |sandbox|.
98
99To pass arguments you need to set sys.argv[] explicitly. Example: >
100
101 :python import sys
102 :python sys.argv = ["foo", "bar"]
103 :pyfile myscript.py
104
105Here are some examples *python-examples* >
106
107 :python from vim import *
108 :python from string import upper
109 :python current.line = upper(current.line)
110 :python print "Hello"
111 :python str = current.buffer[42]
112
113(Note that changes - like the imports - persist from one command to the next,
114just like in the Python interpreter.)
115
116==============================================================================
1172. The vim module *python-vim*
118
119Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000120|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121methods, three constants, and one error object. You need to import the vim
122module before using it: >
123 :python import vim
124
125Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000126 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100127 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000128 :py w = vim.windows[n] # gets window "n"
129 :py cw = vim.current.window # gets the current window
130 :py b = vim.buffers[n] # gets buffer "n"
131 :py cb = vim.current.buffer # gets the current buffer
132 :py w.height = lines # sets the window height
133 :py w.cursor = (row, col) # sets the window cursor position
134 :py pos = w.cursor # gets a tuple (row, col)
135 :py name = b.name # gets the buffer file name
136 :py line = b[n] # gets a line from the buffer
137 :py lines = b[n:m] # gets a list of lines
138 :py num = len(b) # gets the number of lines
139 :py b[n] = str # sets a line in the buffer
140 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
141 :py del b[n] # deletes a line
142 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143
144
145Methods of the "vim" module
146
147vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000148 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000150 :py vim.command("set tw=72")
151 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152< The following definition executes Normal mode commands: >
153 def normal(str):
154 vim.command("normal "+str)
155 # Note the use of single quotes to delimit a string containing
156 # double quotes
157 normal('"a2dd"aP')
158< *E659*
159 The ":python" command cannot be used recursively with Python 2.2 and
160 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000161 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162
163vim.eval(str) *python-eval*
164 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000165 evaluator (see |expression|). Returns the expression result as:
166 - a string if the Vim expression evaluates to a string or number
167 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000168 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000169 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170 Examples: >
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200171 :" value of the 'textwidth' option
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000172 :py text_width = vim.eval("&tw")
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200173 :
174 :" contents of the 'a' register
175 :py a_reg = vim.eval("@a")
176 :
177 :" Result is a string! Use string.atoi() to convert to a number.
178 :py str = vim.eval("12+12")
179 :
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000180 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000181< The latter will return a python list of python dicts, for instance:
Bram Moolenaar214641f2017-03-05 17:04:09 +0100182 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
183 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000184
Bram Moolenaar30b65812012-07-12 22:01:11 +0200185vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200186 Like |python-eval|, but returns special objects described in
187 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200188 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000189
Bram Moolenaarbc411962013-06-02 17:46:40 +0200190vim.strwidth(str) *python-strwidth*
191 Like |strwidth()|: returns number of display cells str occupies, tab
192 is counted as one cell.
193
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200194vim.foreach_rtp(callable) *python-foreach_rtp*
195 Call the given callable for each path in 'runtimepath' until either
196 callable returns something but None, the exception is raised or there
197 are no longer paths. If stopped in case callable returned non-None,
198 vim.foreach_rtp function returns the value returned by callable.
199
Bram Moolenaarf4258302013-06-02 18:20:17 +0200200vim.chdir(*args, **kwargs) *python-chdir*
201vim.fchdir(*args, **kwargs) *python-fchdir*
202 Run os.chdir or os.fchdir, then all appropriate vim stuff.
203 Note: you should not use these functions directly, use os.chdir and
204 os.fchdir instead. Behavior of vim.fchdir is undefined in case
205 os.fchdir does not exist.
206
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207Error object of the "vim" module
208
209vim.error *python-error*
210 Upon encountering a Vim error, Python raises an exception of type
211 vim.error.
212 Example: >
213 try:
214 vim.command("put a")
215 except vim.error:
216 # nothing in register a
217
218Constants of the "vim" module
219
220 Note that these are not actually constants - you could reassign them.
221 But this is silly, as you would then lose access to the vim objects
222 to which the variables referred.
223
224vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200225 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000227 :py b = vim.buffers[i] # Indexing (read-only)
228 :py b in vim.buffers # Membership test
229 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200230 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231<
232vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000233 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000234 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000235 :py w = vim.windows[i] # Indexing (read-only)
236 :py w in vim.windows # Membership test
237 :py n = len(vim.windows) # Number of elements
238 :py for w in vim.windows: # Sequential access
Bram Moolenaarde71b562013-06-02 17:41:54 +0200239< Note: vim.windows object always accesses current tab page.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200240 |python-tabpage|.windows objects are bound to parent |python-tabpage|
241 object and always use windows from that tab page (or throw vim.error
242 in case tab page was deleted). You can keep a reference to both
243 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200244 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200245
246vim.tabpages *python-tabpages*
247 A sequence object providing access to the list of vim tab pages. The
248 object supports the following operations: >
249 :py t = vim.tabpages[i] # Indexing (read-only)
250 :py t in vim.tabpages # Membership test
251 :py n = len(vim.tabpages) # Number of elements
252 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253<
254vim.current *python-current*
255 An object providing access (via specific attributes) to various
256 "current" objects available in vim:
257 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200258 vim.current.buffer The current buffer (RW) Buffer
259 vim.current.window The current window (RW) Window
260 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 vim.current.range The current line range (RO) Range
262
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000263 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000265 "current range". A range is a bit like a buffer, but with all access
266 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267
Bram Moolenaare7614592013-05-15 15:51:08 +0200268 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
269 valid |python-buffer|, |python-window| or |python-tabpage| objects
270 respectively. Assigning triggers normal (with |autocommand|s)
271 switching to given buffer, window or tab page. It is the only way to
272 switch UI objects in python: you can't assign to
273 |python-tabpage|.window attribute. To switch without triggering
274 autocommands use >
275 py << EOF
276 saved_eventignore = vim.options['eventignore']
277 vim.options['eventignore'] = 'all'
278 try:
279 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
280 finally:
281 vim.options['eventignore'] = saved_eventignore
282 EOF
283<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200284vim.vars *python-vars*
285vim.vvars *python-vvars*
286 Dictionary-like objects holding dictionaries with global (|g:|) and
287 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
288 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000289
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200290vim.options *python-options*
291 Object partly supporting mapping protocol (supports setting and
292 getting items) providing a read-write access to global options.
293 Note: unlike |:set| this provides access only to global options. You
294 cannot use this object to obtain or set local options' values or
295 access local-only options in any fashion. Raises KeyError if no global
296 option with such name exists (i.e. does not raise KeyError for
297 |global-local| options and global only options, but does for window-
298 and buffer-local ones). Use |python-buffer| objects to access to
299 buffer-local options and |python-window| objects to access to
300 window-local options.
301
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200302 Type of this object is available via "Options" attribute of vim
303 module.
304
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305Output from Python *python-output*
306 Vim displays all Python code output in the Vim message area. Normal
307 output appears as information messages, and error output appears as
308 error messages.
309
310 In implementation terms, this means that all output to sys.stdout
311 (including the output from print statements) appears as information
312 messages, and all output to sys.stderr (including error tracebacks)
313 appears as error messages.
314
315 *python-input*
316 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000317 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000318 fixed.
319
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200320 *python2-directory* *python3-directory* *pythonx-directory*
321Python 'runtimepath' handling *python-special-path*
322
323In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
324the list of paths found in 'runtimepath': with this directory in sys.path and
325vim.path_hooks in sys.path_hooks python will try to load module from
326{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
327each {rtp} found in 'runtimepath'.
328
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200329Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200330
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200331 from imp import find_module, load_module
332 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200333 import sys
334
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200335 class VimModuleLoader(object):
336 def __init__(self, module):
337 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200338
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200339 def load_module(self, fullname, path=None):
340 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200341
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200342 def _find_module(fullname, oldtail, path):
343 idx = oldtail.find('.')
344 if idx > 0:
345 name = oldtail[:idx]
346 tail = oldtail[idx+1:]
347 fmr = find_module(name, path)
348 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
349 return _find_module(fullname, tail, module.__path__)
350 else:
351 fmr = find_module(fullname, path)
352 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200353
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200354 # It uses vim module itself in place of VimPathFinder class: it does not
355 # matter for python which object has find_module function attached to as
356 # an attribute.
357 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200358 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200359 def find_module(cls, fullname, path=None):
360 try:
361 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
362 except ImportError:
363 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200364
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200365 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200366 def load_module(cls, fullname, path=None):
367 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200368
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200369 def hook(path):
370 if path == vim.VIM_SPECIAL_PATH:
371 return VimPathFinder
372 else:
373 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200374
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200375 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200376
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200377vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
378 String constant used in conjunction with vim path hook. If path hook
379 installed by vim is requested to handle anything but path equal to
380 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
381 case it uses special loader.
382
383 Note: you must not use value of this constant directly, always use
384 vim.VIM_SPECIAL_PATH object.
385
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200386vim.find_module(...) *python-find_module*
387vim.path_hook(path) *python-path_hook*
388 Methods or objects used to implement path loading as described above.
389 You should not be using any of these directly except for vim.path_hook
390 in case you need to do something with sys.meta_path. It is not
391 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200392 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200393
394vim._get_paths *python-_get_paths*
395 Methods returning a list of paths which will be searched for by path
396 hook. You should not rely on this method being present in future
397 versions, but can use it for debugging.
398
399 It returns a list of {rtp}/python2 (or {rtp}/python3) and
400 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
401
Bram Moolenaar071d4272004-06-13 20:20:40 +0000402==============================================================================
4033. Buffer objects *python-buffer*
404
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000405Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406 - via vim.current.buffer (|python-current|)
407 - from indexing vim.buffers (|python-buffers|)
408 - from the "buffer" attribute of a window (|python-window|)
409
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100410Buffer objects have two read-only attributes - name - the full file name for
411the buffer, and number - the buffer number. They also have three methods
412(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000413
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000414You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000416element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000418you would expect. Note that the result of indexing (slicing) a buffer is a
419string (list of strings). This has one unusual consequence - b[:] is different
420from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421"b = None" merely updates the variable b, with no effect on the buffer.
422
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000423Buffer indexes start at zero, as is normal in Python. This differs from vim
424line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000425with marks (see below) which use vim line numbers.
426
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200427The buffer object attributes are:
428 b.vars Dictionary-like object used to access
429 |buffer-variable|s.
430 b.options Mapping object (supports item getting, setting and
431 deleting) that provides access to buffer-local options
432 and buffer-local values of |global-local| options. Use
433 |python-window|.options if option is window-local,
434 this object will raise KeyError. If option is
435 |global-local| and local value is missing getting it
436 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200437 b.name String, RW. Contains buffer name (full path).
438 Note: when assigning to b.name |BufFilePre| and
439 |BufFilePost| autocommands are launched.
440 b.number Buffer number. Can be used as |python-buffers| key.
441 Read-only.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200442 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200443 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200444
Bram Moolenaar071d4272004-06-13 20:20:40 +0000445The buffer object methods are:
446 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200447 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000448 b.append(list) Append a list of lines to the buffer
449 Note that the option of supplying a list of strings to
450 the append method differs from the equivalent method
451 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200452 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000453 b.mark(name) Return a tuple (row,col) representing the position
454 of the named mark (can also get the []"<> marks)
455 b.range(s,e) Return a range object (see |python-range|) which
456 represents the part of the given buffer between line
457 numbers s and e |inclusive|.
458
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000459Note that when adding a line it must not contain a line break character '\n'.
460A trailing '\n' is allowed and ignored, so that you can do: >
461 :py b.append(f.readlines())
462
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200463Buffer object type is available using "Buffer" attribute of vim module.
464
Bram Moolenaar071d4272004-06-13 20:20:40 +0000465Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000466 :py print b.name # write the buffer file name
467 :py b[0] = "hello!!!" # replace the top line
468 :py b[:] = None # delete the whole buffer
469 :py del b[:] # delete the whole buffer
470 :py b[0:0] = [ "a line" ] # add a line at the top
471 :py del b[2] # delete a line (the third)
472 :py b.append("bottom") # add a line at the bottom
473 :py n = len(b) # number of lines
474 :py (row,col) = b.mark('a') # named mark
475 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200476 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200477 :py b.options["ff"] = "dos" # set fileformat
478 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000479
480==============================================================================
4814. Range objects *python-range*
482
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000483Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000484number of ways:
485 - via vim.current.range (|python-current|)
486 - from a buffer's range() method (|python-buffer|)
487
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000488A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000489all operations are restricted to the lines within the range (this line range
490can, of course, change as a result of slice assignments, line deletions, or
491the range.append() method).
492
493The range object attributes are:
494 r.start Index of first line into the buffer
495 r.end Index of last line into the buffer
496
497The range object methods are:
498 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200499 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000500 r.append(list) Append a list of lines to the range
501 Note that the option of supplying a list of strings to
502 the append method differs from the equivalent method
503 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200504 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000505
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200506Range object type is available using "Range" attribute of vim module.
507
Bram Moolenaar071d4272004-06-13 20:20:40 +0000508Example (assume r is the current range):
509 # Send all lines in a range to the default printer
510 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
511
512==============================================================================
5135. Window objects *python-window*
514
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000515Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000516 - via vim.current.window (|python-current|)
517 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200518 - from indexing "windows" attribute of a tab page (|python-tabpage|)
519 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000520
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000521You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000522methods, and no sequence or other interface.
523
524Window attributes are:
525 buffer (read-only) The buffer displayed in this window
526 cursor (read-write) The current cursor position in the window
527 This is a tuple, (row,col).
528 height (read-write) The window height, in rows
529 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200530 vars (read-only) The window |w:| variables. Attribute is
531 unassignable, but you can change window
532 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200533 options (read-only) The window-local options. Attribute is
534 unassignable, but you can change window
535 options this way. Provides access only to
536 window-local options, for buffer-local use
537 |python-buffer| and for global ones use
538 |python-options|. If option is |global-local|
539 and local value is missing getting it will
540 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200541 number (read-only) Window number. The first window has number 1.
542 This is zero in case it cannot be determined
543 (e.g. when the window object belongs to other
544 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200545 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200546 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200547 tabpage (read-only) Window tab page.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200548 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200549 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200550
Bram Moolenaar071d4272004-06-13 20:20:40 +0000551The height attribute is writable only if the screen is split horizontally.
552The width attribute is writable only if the screen is split vertically.
553
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200554Window object type is available using "Window" attribute of vim module.
555
Bram Moolenaar071d4272004-06-13 20:20:40 +0000556==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005576. Tab page objects *python-tabpage*
558
559Tab page objects represent vim tab pages. You can obtain them in a number of
560ways:
561 - via vim.current.tabpage (|python-current|)
562 - from indexing vim.tabpages (|python-tabpages|)
563
564You can use this object to access tab page windows. They have no methods and
565no sequence or other interfaces.
566
567Tab page attributes are:
568 number The tab page number like the one returned by
569 |tabpagenr()|.
570 windows Like |python-windows|, but for current tab page.
571 vars The tab page |t:| variables.
572 window Current tabpage window.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200573 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200574 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200575
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200576TabPage object type is available using "TabPage" attribute of vim module.
577
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200578==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005797. vim.bindeval objects *python-bindeval-objects*
580
581vim.Dictionary object *python-Dictionary*
582 Dictionary-like object providing access to vim |Dictionary| type.
583 Attributes:
584 Attribute Description ~
585 locked One of *python-.locked*
586 Value Description ~
587 zero Variable is not locked
588 vim.VAR_LOCKED Variable is locked, but can be unlocked
589 vim.VAR_FIXED Variable is locked and can't be unlocked
590 Read-write. You can unlock locked variable by assigning
591 `True` or `False` to this attribute. No recursive locking
592 is supported.
593 scope One of
594 Value Description ~
595 zero Dictionary is not a scope one
596 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
597 vim.VAR_SCOPE Other scope dictionary,
598 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200599 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200600 Method Description ~
601 keys() Returns a list with dictionary keys.
602 values() Returns a list with dictionary values.
603 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200604 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200605 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200606 get(key[, default=None])
607 Obtain key from dictionary, returning the default if it is
608 not present.
609 pop(key[, default])
610 Remove specified key from dictionary and return
611 corresponding value. If key is not found and default is
612 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200613 popitem()
614 Remove random key from dictionary and return (key, value)
615 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200616 has_key(key)
617 Check whether dictionary contains specified key, similar
618 to `key in dict`.
619
620 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
621 You can use `vim.Dictionary()` to create new vim
622 dictionaries. `d=vim.Dictionary(arg)` is the same as
623 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
624 constructs empty dictionary.
625
Bram Moolenaara9922d62013-05-30 13:01:18 +0200626 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200627 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200628 d['a'] = 'b' # Item assignment
629 print d['a'] # getting item
630 d.update({'c': 'd'}) # .update(dictionary)
631 d.update(e='f') # .update(**kwargs)
632 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
633 for key in d.keys(): # .keys()
634 for val in d.values(): # .values()
635 for key, val in d.items(): # .items()
636 print isinstance(d, vim.Dictionary) # True
637 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200638 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200639<
640 Note: when iterating over keys you should not modify dictionary.
641
642vim.List object *python-List*
643 Sequence-like object providing access to vim |List| type.
644 Supports `.locked` attribute, see |python-.locked|. Also supports the
645 following methods:
646 Method Description ~
647 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200648
649 __new__(), __new__(iterable)
650 You can use `vim.List()` to create new vim lists.
651 `l=vim.List(iterable)` is the same as
652 `l=vim.bindeval('[]');l.extend(iterable)`. Without
653 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200654 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200655 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200656 l.extend(['abc', 'def']) # .extend() method
657 print l[1:] # slicing
658 l[:0] = ['ghi', 'jkl'] # slice assignment
659 print l[0] # getting item
660 l[0] = 'mno' # assignment
661 for i in l: # iteration
662 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200663 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200664
665vim.Function object *python-Function*
Bram Moolenaar8110a092016-04-14 15:56:09 +0200666 Function-like object, acting like vim |Funcref| object. Accepts special
667 keyword argument `self`, see |Dictionary-function|. You can also use
668 `vim.Function(name)` constructor, it is the same as
669 `vim.bindeval('function(%s)'%json.dumps(name))`.
670
671 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200672 Attribute Description ~
673 name Function name.
674 args `None` or a |python-List| object with arguments. Note
675 that this is a copy of the arguments list, constructed
676 each time you request this attribute. Modifications made
677 to the list will be ignored (but not to the containers
678 inside argument list: this is like |copy()| and not
679 |deepcopy()|).
680 self `None` or a |python-Dictionary| object with self
681 dictionary. Note that explicit `self` keyword used when
682 calling resulting object overrides this attribute.
683 auto_rebind Boolean. True if partial created from this Python object
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100684 and stored in the Vim script dictionary should be
685 automatically rebound to the dictionary it is stored in
686 when this dictionary is indexed. Exposes Vim internal
687 difference between `dict.func` (auto_rebind=True) and
688 `function(dict.func,dict)` (auto_rebind=False). This
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200689 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200690
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200691 Constructor additionally accepts `args`, `self` and `auto_rebind`
692 keywords. If `args` and/or `self` argument is given then it constructs
693 a partial, see |function()|. `auto_rebind` is only used when `self`
694 argument is given, otherwise it is assumed to be `True` regardless of
695 whether it was given or not. If `self` is given then it defaults to
696 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200697
Bram Moolenaara9922d62013-05-30 13:01:18 +0200698 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200699 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200700 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
701 vim.command('''
702 function DictFun() dict
703 return self
704 endfunction
705 ''')
706 f = vim.bindeval('function("DictFun")')
707 print f(self={}) # Like call('DictFun', [], {})
708 print isinstance(f, vim.Function) # True
709
Bram Moolenaar8110a092016-04-14 15:56:09 +0200710 p = vim.Function('DictFun', self={})
711 print f()
712 p = vim.Function('tr', args=['abc', 'a'])
713 print f('b')
714
Bram Moolenaara9922d62013-05-30 13:01:18 +0200715==============================================================================
7168. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200717
718To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100719functions to evaluate Python expressions and pass their values to Vim script.
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100720|pyxeval()| is also available.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200721
Bram Moolenaarde323092017-11-09 19:56:08 +0100722The Python value "None" is converted to v:none.
723
Bram Moolenaar30b65812012-07-12 22:01:11 +0200724==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007259. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000726
Bram Moolenaard94464e2015-11-02 15:28:18 +0100727On MS-Windows and Unix the Python library can be loaded dynamically. The
728|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000729
Bram Moolenaard94464e2015-11-02 15:28:18 +0100730This means that Vim will search for the Python DLL or shared library file only
731when needed. When you don't use the Python interface you don't need it, thus
732you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000733
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100734
735MS-Windows ~
736
737To use the Python interface the Python DLL must be in your search path. In a
738console window type "path" to see what directories are used. The 'pythondll'
739or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000740
Bram Moolenaar3df01732017-02-17 22:47:16 +0100741The name of the DLL should match the Python version Vim was compiled with.
742Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
Bram Moolenaar59eb0162017-12-10 18:17:44 +0100743That is the default value for 'pythondll'. For Python 3 it is python36.dll
744(Python 3.6). To know for sure edit "gvim.exe" and search for
Bram Moolenaar3df01732017-02-17 22:47:16 +0100745"python\d*.dll\c".
Bram Moolenaara5792f52005-11-23 21:25:05 +0000746
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100747
748Unix ~
749
750The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
751shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
752what were specified at compile time. The version of the shared library must
753match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100754
Bram Moolenaara5792f52005-11-23 21:25:05 +0000755==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020075610. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200757
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200758 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200759The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100760if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200761 :py3 print("Hello")
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200762
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200763To see what version of Python you have: >
764 :py3 import sys
765 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200766< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200767The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200768 *:py3do*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200769The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200770
Bram Moolenaar30b65812012-07-12 22:01:11 +0200771
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200772Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007731. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007742. Python 2 support only (+python or +python/dyn, -python3)
7753. Python 3 support only (-python, +python3 or +python3/dyn)
7764. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200777
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200778Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200779
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200780When Python 2 and Python 3 are both supported they must be loaded dynamically.
781
782When doing this on Linux/Unix systems and importing global symbols, this leads
783to a crash when the second Python version is used. So either global symbols
784are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200785loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200786symbols to be provided by Vim.
787 *E836* *E837*
788Vim's configuration script makes a guess for all libraries based on one
789standard Python library (termios). If importing this library succeeds for
790both Python versions, then both will be made available in Vim at the same
791time. If not, only the version first used in a session will be enabled.
792When trying to use the other one you will get the E836 or E837 error message.
793
794Here Vim's behavior depends on the system in which it was configured. In a
795system where both versions of Python were configured with --enable-shared,
796both versions of Python will be activated at the same time. There will still
797be problems with other third party libraries that were not linked to
798libPython.
799
800To work around such problems there are these options:
8011. The problematic library is recompiled to link to the according
802 libpython.so.
8032. Vim is recompiled for only one Python version.
8043. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
805 may crash Vim though.
806
Bram Moolenaar41009372013-07-01 22:03:04 +0200807 *E880*
808Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
809 :py vim.command("qall!")
810<
811
Bram Moolenaar446beb42011-05-10 17:18:44 +0200812 *has-python*
813You can test what Python version is available with: >
814 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200815 echo 'there is Python 2.x'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100816 endif
817 if has('python3')
Bram Moolenaar446beb42011-05-10 17:18:44 +0200818 echo 'there is Python 3.x'
819 endif
820
821Note however, that when Python 2 and 3 are both available and loaded
822dynamically, these has() calls will try to load them. If only one can be
823loaded at a time, just checking if Python 2 or 3 are available will prevent
824the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200825
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100826To avoid loading the dynamic library, only check if Vim was compiled with
827python support: >
828 if has('python_compiled')
829 echo 'compiled with Python 2.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100830 if has('python_dynamic')
831 echo 'Python 2.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100832 endif
833 endif
834 if has('python3_compiled')
835 echo 'compiled with Python 3.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100836 if has('python3_dynamic')
837 echo 'Python 3.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100838 endif
839 endif
840
841This also tells you whether Python is dynamically loaded, which will fail if
842the runtime library cannot be found.
843
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200844==============================================================================
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010084511. Python X *python_x* *pythonx*
846
847Because most python code can be written so that it works with python 2.6+ and
Bram Moolenaar214641f2017-03-05 17:04:09 +0100848python 3 the pyx* functions and commands have been written. They work exactly
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100849the same as the Python 2 and 3 variants, but select the Python version using
850the 'pyxversion' setting.
851
852You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
853for Python commands. If you change this setting at runtime you may risk that
854state of plugins (such as initialization) may be lost.
855
856If you want to use a module, you can put it in the {rtp}/pythonx directory.
857See |pythonx-directory|.
858
859 *:pyx* *:pythonx*
860The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
861if the `:pyx` command is working: >
862 :pyx print("Hello")
863
864To see what version of Python is being used: >
865 :pyx import sys
866 :pyx print(sys.version)
867<
868 *:pyxfile* *python_x-special-comments*
869The `:pyxfile` command works similar to `:pyfile`. However you can add one of
870these comments to force Vim using `:pyfile` or `:py3file`: >
871 #!/any string/python2 " Shebang. Must be the first line of the file.
872 #!/any string/python3 " Shebang. Must be the first line of the file.
873 # requires python 2.x " Maximum lines depend on 'modelines'.
874 # requires python 3.x " Maximum lines depend on 'modelines'.
875Unlike normal modelines, the bottom of the file is not checked.
876If none of them are found, the 'pyxversion' setting is used.
877 *W20* *W21*
878If Vim does not support the selected Python version a silent message will be
879printed. Use `:messages` to read them.
880
881 *:pyxdo*
882The `:pyxdo` command works similar to `:pydo`.
883
884 *has-pythonx*
885You can test if pyx* commands are available with: >
886 if has('pythonx')
887 echo 'pyx* commands are available. (Python ' . &pyx . ')'
888 endif
889
890When compiled with only one of |+python| or |+python3|, the has() returns 1.
891When compiled with both |+python| and |+python3|, the test depends on the
892'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
893it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
894Python 2 or 3 respectively.
895
Bram Moolenaar214641f2017-03-05 17:04:09 +0100896Note that for `has('pythonx')` to work it may try to dynamically load Python 3
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100897or 2. This may have side effects, especially when Vim can only load one of
898the two.
899
900If a user prefers Python 2 and want to fallback to Python 3, he needs to set
901'pyxversion' explicitly in his |.vimrc|. E.g.: >
902 if has('python')
903 set pyx=2
904 elseif has('python3')
905 set pyx=3
906 endif
907
908==============================================================================
Bram Moolenaar036986f2017-03-16 17:41:02 +010090912. Building with Python support *python-building*
910
911A few hints for building with Python 2 or 3 support.
912
913UNIX
914
915See src/Makefile for how to enable including the Python interface.
916
917On Ubuntu you will want to install these packages for Python 2:
918 python
919 python-dev
920For Python 3:
921 python3
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200922 python3-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100923For Python 3.6:
924 python3.6
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200925 python3.6-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100926
927If you have more than one version of Python 3, you need to link python3 to the
928one you prefer, before running configure.
929
930==============================================================================
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200931 vim:tw=78:ts=8:noet:ft=help:norl: