blob: 9e2d3017ce61ecff0032662b90bdeee7a5b15470 [file] [log] [blame]
Bram Moolenaar25c9c682019-05-05 18:13:34 +02001*if_pyth.txt* For Vim version 8.1. Last change: 2019 May 04
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
Bram Moolenaar368373e2010-07-19 20:46:22 +020022The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000023|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020024The Python 3 interface is available only when Vim was compiled with the
25|+python3| feature.
Bram Moolenaar9ba7e172013-07-17 22:37:26 +020026Both can be available at the same time, but read |python-2-and-3|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000027
28==============================================================================
291. Commands *python-commands*
30
Bram Moolenaardbc28022014-07-26 13:40:44 +020031 *:python* *:py* *E263* *E264* *E887*
Bram Moolenaar071d4272004-06-13 20:20:40 +000032:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020033 Execute Python statement {stmt}. A simple check if
34 the `:python` command is working: >
35 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000036
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
Bram Moolenaar64d8e252016-09-06 22:12:34 +020059
60To see what version of Python you have: >
Bram Moolenaar64d8e252016-09-06 22:12:34 +020061 :python print(sys.version)
62
Bram Moolenaar95bafa22018-10-02 13:26:25 +020063There is no need to import sys, it's done by default.
64
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010065Note: Python is very sensitive to the indenting. Make sure the "class" line
66and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000067
Bram Moolenaard620aa92013-05-17 16:40:06 +020068 *:pydo*
69:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
70 {body}" for each line in the [range], with the
71 function arguments being set to the text of each line
72 in turn, without a trailing <EOL>, and the current
73 line number. The function should return a string or
74 None. If a string is returned, it becomes the text of
75 the line in the current turn. The default for [range]
76 is the whole file: "1,$".
Bram Moolenaard620aa92013-05-17 16:40:06 +020077
78Examples:
79>
80 :pydo return "%s\t%d" % (line[::-1], len(line))
81 :pydo if line: return "%4d: %s" % (linenr, line)
82<
Bram Moolenaar20aac6c2018-09-02 21:07:30 +020083One can use `:pydo` in possible conjunction with `:py` to filter a range using
84python. For example: >
85
86 :py3 << EOF
87 needle = vim.eval('@a')
88 replacement = vim.eval('@b')
89
90 def py_vim_string_replace(str):
91 return str.replace(needle, replacement)
92 EOF
93 :'<,'>py3do return py_vim_string_replace(line)
94<
Bram Moolenaar071d4272004-06-13 20:20:40 +000095 *:pyfile* *:pyf*
96:[range]pyf[ile] {file}
97 Execute the Python script in {file}. The whole
Bram Moolenaar25c9c682019-05-05 18:13:34 +020098 argument is used as a single file name.
Bram Moolenaar071d4272004-06-13 20:20:40 +000099
100Both of these commands do essentially the same thing - they execute a piece of
101Python code, with the "current range" |python-range| set to the given line
102range.
103
104In the case of :python, the code to execute is in the command-line.
105In the case of :pyfile, the code to execute is the contents of the given file.
106
107Python commands cannot be used in the |sandbox|.
108
109To pass arguments you need to set sys.argv[] explicitly. Example: >
110
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111 :python sys.argv = ["foo", "bar"]
112 :pyfile myscript.py
113
114Here are some examples *python-examples* >
115
116 :python from vim import *
117 :python from string import upper
118 :python current.line = upper(current.line)
119 :python print "Hello"
120 :python str = current.buffer[42]
121
122(Note that changes - like the imports - persist from one command to the next,
123just like in the Python interpreter.)
124
125==============================================================================
1262. The vim module *python-vim*
127
128Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000129|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130methods, three constants, and one error object. You need to import the vim
131module before using it: >
132 :python import vim
133
134Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000135 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100136 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000137 :py w = vim.windows[n] # gets window "n"
138 :py cw = vim.current.window # gets the current window
139 :py b = vim.buffers[n] # gets buffer "n"
140 :py cb = vim.current.buffer # gets the current buffer
141 :py w.height = lines # sets the window height
142 :py w.cursor = (row, col) # sets the window cursor position
143 :py pos = w.cursor # gets a tuple (row, col)
144 :py name = b.name # gets the buffer file name
145 :py line = b[n] # gets a line from the buffer
146 :py lines = b[n:m] # gets a list of lines
147 :py num = len(b) # gets the number of lines
148 :py b[n] = str # sets a line in the buffer
149 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
150 :py del b[n] # deletes a line
151 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152
153
154Methods of the "vim" module
155
156vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000157 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000159 :py vim.command("set tw=72")
160 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161< The following definition executes Normal mode commands: >
162 def normal(str):
163 vim.command("normal "+str)
164 # Note the use of single quotes to delimit a string containing
165 # double quotes
166 normal('"a2dd"aP')
167< *E659*
168 The ":python" command cannot be used recursively with Python 2.2 and
169 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000170 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171
172vim.eval(str) *python-eval*
173 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000174 evaluator (see |expression|). Returns the expression result as:
175 - a string if the Vim expression evaluates to a string or number
176 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000177 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000178 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179 Examples: >
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200180 :" value of the 'textwidth' option
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000181 :py text_width = vim.eval("&tw")
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200182 :
183 :" contents of the 'a' register
184 :py a_reg = vim.eval("@a")
185 :
186 :" Result is a string! Use string.atoi() to convert to a number.
187 :py str = vim.eval("12+12")
188 :
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000189 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000190< The latter will return a python list of python dicts, for instance:
Bram Moolenaar214641f2017-03-05 17:04:09 +0100191 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
192 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000193
Bram Moolenaar30b65812012-07-12 22:01:11 +0200194vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200195 Like |python-eval|, but returns special objects described in
196 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200197 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000198
Bram Moolenaarbc411962013-06-02 17:46:40 +0200199vim.strwidth(str) *python-strwidth*
200 Like |strwidth()|: returns number of display cells str occupies, tab
201 is counted as one cell.
202
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200203vim.foreach_rtp(callable) *python-foreach_rtp*
204 Call the given callable for each path in 'runtimepath' until either
205 callable returns something but None, the exception is raised or there
206 are no longer paths. If stopped in case callable returned non-None,
207 vim.foreach_rtp function returns the value returned by callable.
208
Bram Moolenaarf4258302013-06-02 18:20:17 +0200209vim.chdir(*args, **kwargs) *python-chdir*
210vim.fchdir(*args, **kwargs) *python-fchdir*
211 Run os.chdir or os.fchdir, then all appropriate vim stuff.
212 Note: you should not use these functions directly, use os.chdir and
213 os.fchdir instead. Behavior of vim.fchdir is undefined in case
214 os.fchdir does not exist.
215
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216Error object of the "vim" module
217
218vim.error *python-error*
219 Upon encountering a Vim error, Python raises an exception of type
220 vim.error.
221 Example: >
222 try:
223 vim.command("put a")
224 except vim.error:
225 # nothing in register a
226
227Constants of the "vim" module
228
229 Note that these are not actually constants - you could reassign them.
230 But this is silly, as you would then lose access to the vim objects
231 to which the variables referred.
232
233vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200234 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000236 :py b = vim.buffers[i] # Indexing (read-only)
237 :py b in vim.buffers # Membership test
238 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200239 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240<
241vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000242 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000244 :py w = vim.windows[i] # Indexing (read-only)
245 :py w in vim.windows # Membership test
246 :py n = len(vim.windows) # Number of elements
247 :py for w in vim.windows: # Sequential access
Bram Moolenaarde71b562013-06-02 17:41:54 +0200248< Note: vim.windows object always accesses current tab page.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200249 |python-tabpage|.windows objects are bound to parent |python-tabpage|
250 object and always use windows from that tab page (or throw vim.error
251 in case tab page was deleted). You can keep a reference to both
252 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200253 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200254
255vim.tabpages *python-tabpages*
256 A sequence object providing access to the list of vim tab pages. The
257 object supports the following operations: >
258 :py t = vim.tabpages[i] # Indexing (read-only)
259 :py t in vim.tabpages # Membership test
260 :py n = len(vim.tabpages) # Number of elements
261 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262<
263vim.current *python-current*
264 An object providing access (via specific attributes) to various
265 "current" objects available in vim:
266 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200267 vim.current.buffer The current buffer (RW) Buffer
268 vim.current.window The current window (RW) Window
269 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000270 vim.current.range The current line range (RO) Range
271
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000272 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000274 "current range". A range is a bit like a buffer, but with all access
275 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276
Bram Moolenaare7614592013-05-15 15:51:08 +0200277 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
278 valid |python-buffer|, |python-window| or |python-tabpage| objects
279 respectively. Assigning triggers normal (with |autocommand|s)
280 switching to given buffer, window or tab page. It is the only way to
281 switch UI objects in python: you can't assign to
282 |python-tabpage|.window attribute. To switch without triggering
283 autocommands use >
284 py << EOF
285 saved_eventignore = vim.options['eventignore']
286 vim.options['eventignore'] = 'all'
287 try:
288 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
289 finally:
290 vim.options['eventignore'] = saved_eventignore
291 EOF
292<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200293vim.vars *python-vars*
294vim.vvars *python-vvars*
295 Dictionary-like objects holding dictionaries with global (|g:|) and
296 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
297 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000298
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200299vim.options *python-options*
300 Object partly supporting mapping protocol (supports setting and
301 getting items) providing a read-write access to global options.
302 Note: unlike |:set| this provides access only to global options. You
303 cannot use this object to obtain or set local options' values or
304 access local-only options in any fashion. Raises KeyError if no global
305 option with such name exists (i.e. does not raise KeyError for
306 |global-local| options and global only options, but does for window-
307 and buffer-local ones). Use |python-buffer| objects to access to
308 buffer-local options and |python-window| objects to access to
309 window-local options.
310
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200311 Type of this object is available via "Options" attribute of vim
312 module.
313
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314Output from Python *python-output*
315 Vim displays all Python code output in the Vim message area. Normal
316 output appears as information messages, and error output appears as
317 error messages.
318
319 In implementation terms, this means that all output to sys.stdout
320 (including the output from print statements) appears as information
321 messages, and all output to sys.stderr (including error tracebacks)
322 appears as error messages.
323
324 *python-input*
325 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000326 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000327 fixed.
328
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200329 *python2-directory* *python3-directory* *pythonx-directory*
330Python 'runtimepath' handling *python-special-path*
331
332In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
333the list of paths found in 'runtimepath': with this directory in sys.path and
334vim.path_hooks in sys.path_hooks python will try to load module from
335{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
336each {rtp} found in 'runtimepath'.
337
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200338Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200339
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200340 from imp import find_module, load_module
341 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200342 import sys
343
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200344 class VimModuleLoader(object):
345 def __init__(self, module):
346 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200347
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200348 def load_module(self, fullname, path=None):
349 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200350
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200351 def _find_module(fullname, oldtail, path):
352 idx = oldtail.find('.')
353 if idx > 0:
354 name = oldtail[:idx]
355 tail = oldtail[idx+1:]
356 fmr = find_module(name, path)
357 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
358 return _find_module(fullname, tail, module.__path__)
359 else:
360 fmr = find_module(fullname, path)
361 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200362
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200363 # It uses vim module itself in place of VimPathFinder class: it does not
364 # matter for python which object has find_module function attached to as
365 # an attribute.
366 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200367 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200368 def find_module(cls, fullname, path=None):
369 try:
370 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
371 except ImportError:
372 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200373
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200374 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200375 def load_module(cls, fullname, path=None):
376 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200377
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200378 def hook(path):
379 if path == vim.VIM_SPECIAL_PATH:
380 return VimPathFinder
381 else:
382 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200383
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200384 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200385
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200386vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
387 String constant used in conjunction with vim path hook. If path hook
388 installed by vim is requested to handle anything but path equal to
389 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
390 case it uses special loader.
391
392 Note: you must not use value of this constant directly, always use
393 vim.VIM_SPECIAL_PATH object.
394
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200395vim.find_module(...) *python-find_module*
396vim.path_hook(path) *python-path_hook*
397 Methods or objects used to implement path loading as described above.
398 You should not be using any of these directly except for vim.path_hook
399 in case you need to do something with sys.meta_path. It is not
400 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200401 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200402
403vim._get_paths *python-_get_paths*
404 Methods returning a list of paths which will be searched for by path
405 hook. You should not rely on this method being present in future
406 versions, but can use it for debugging.
407
408 It returns a list of {rtp}/python2 (or {rtp}/python3) and
409 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
410
Bram Moolenaar071d4272004-06-13 20:20:40 +0000411==============================================================================
4123. Buffer objects *python-buffer*
413
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000414Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415 - via vim.current.buffer (|python-current|)
416 - from indexing vim.buffers (|python-buffers|)
417 - from the "buffer" attribute of a window (|python-window|)
418
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100419Buffer objects have two read-only attributes - name - the full file name for
420the buffer, and number - the buffer number. They also have three methods
421(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000422
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000423You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000425element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000426including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000427you would expect. Note that the result of indexing (slicing) a buffer is a
428string (list of strings). This has one unusual consequence - b[:] is different
429from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430"b = None" merely updates the variable b, with no effect on the buffer.
431
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000432Buffer indexes start at zero, as is normal in Python. This differs from vim
433line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434with marks (see below) which use vim line numbers.
435
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200436The buffer object attributes are:
437 b.vars Dictionary-like object used to access
438 |buffer-variable|s.
439 b.options Mapping object (supports item getting, setting and
440 deleting) that provides access to buffer-local options
441 and buffer-local values of |global-local| options. Use
442 |python-window|.options if option is window-local,
443 this object will raise KeyError. If option is
444 |global-local| and local value is missing getting it
445 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200446 b.name String, RW. Contains buffer name (full path).
447 Note: when assigning to b.name |BufFilePre| and
448 |BufFilePost| autocommands are launched.
449 b.number Buffer number. Can be used as |python-buffers| key.
450 Read-only.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200451 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200452 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200453
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454The buffer object methods are:
455 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200456 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000457 b.append(list) Append a list of lines to the buffer
458 Note that the option of supplying a list of strings to
459 the append method differs from the equivalent method
460 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200461 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000462 b.mark(name) Return a tuple (row,col) representing the position
463 of the named mark (can also get the []"<> marks)
464 b.range(s,e) Return a range object (see |python-range|) which
465 represents the part of the given buffer between line
466 numbers s and e |inclusive|.
467
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000468Note that when adding a line it must not contain a line break character '\n'.
469A trailing '\n' is allowed and ignored, so that you can do: >
470 :py b.append(f.readlines())
471
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200472Buffer object type is available using "Buffer" attribute of vim module.
473
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000475 :py print b.name # write the buffer file name
476 :py b[0] = "hello!!!" # replace the top line
477 :py b[:] = None # delete the whole buffer
478 :py del b[:] # delete the whole buffer
479 :py b[0:0] = [ "a line" ] # add a line at the top
480 :py del b[2] # delete a line (the third)
481 :py b.append("bottom") # add a line at the bottom
482 :py n = len(b) # number of lines
483 :py (row,col) = b.mark('a') # named mark
484 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200485 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200486 :py b.options["ff"] = "dos" # set fileformat
487 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000488
489==============================================================================
4904. Range objects *python-range*
491
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000492Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000493number of ways:
494 - via vim.current.range (|python-current|)
495 - from a buffer's range() method (|python-buffer|)
496
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000497A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000498all operations are restricted to the lines within the range (this line range
499can, of course, change as a result of slice assignments, line deletions, or
500the range.append() method).
501
502The range object attributes are:
503 r.start Index of first line into the buffer
504 r.end Index of last line into the buffer
505
506The range object methods are:
507 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200508 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000509 r.append(list) Append a list of lines to the range
510 Note that the option of supplying a list of strings to
511 the append method differs from the equivalent method
512 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200513 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000514
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200515Range object type is available using "Range" attribute of vim module.
516
Bram Moolenaar071d4272004-06-13 20:20:40 +0000517Example (assume r is the current range):
518 # Send all lines in a range to the default printer
519 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
520
521==============================================================================
5225. Window objects *python-window*
523
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000524Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000525 - via vim.current.window (|python-current|)
526 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200527 - from indexing "windows" attribute of a tab page (|python-tabpage|)
528 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000529
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000530You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000531methods, and no sequence or other interface.
532
533Window attributes are:
534 buffer (read-only) The buffer displayed in this window
535 cursor (read-write) The current cursor position in the window
536 This is a tuple, (row,col).
537 height (read-write) The window height, in rows
538 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200539 vars (read-only) The window |w:| variables. Attribute is
540 unassignable, but you can change window
541 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200542 options (read-only) The window-local options. Attribute is
543 unassignable, but you can change window
544 options this way. Provides access only to
545 window-local options, for buffer-local use
546 |python-buffer| and for global ones use
547 |python-options|. If option is |global-local|
548 and local value is missing getting it will
549 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200550 number (read-only) Window number. The first window has number 1.
551 This is zero in case it cannot be determined
552 (e.g. when the window object belongs to other
553 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200554 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200555 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200556 tabpage (read-only) Window tab page.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200557 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200558 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200559
Bram Moolenaar071d4272004-06-13 20:20:40 +0000560The height attribute is writable only if the screen is split horizontally.
561The width attribute is writable only if the screen is split vertically.
562
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200563Window object type is available using "Window" attribute of vim module.
564
Bram Moolenaar071d4272004-06-13 20:20:40 +0000565==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005666. Tab page objects *python-tabpage*
567
568Tab page objects represent vim tab pages. You can obtain them in a number of
569ways:
570 - via vim.current.tabpage (|python-current|)
571 - from indexing vim.tabpages (|python-tabpages|)
572
573You can use this object to access tab page windows. They have no methods and
574no sequence or other interfaces.
575
576Tab page attributes are:
577 number The tab page number like the one returned by
578 |tabpagenr()|.
579 windows Like |python-windows|, but for current tab page.
580 vars The tab page |t:| variables.
581 window Current tabpage window.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200582 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200583 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200584
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200585TabPage object type is available using "TabPage" attribute of vim module.
586
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200587==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005887. vim.bindeval objects *python-bindeval-objects*
589
590vim.Dictionary object *python-Dictionary*
591 Dictionary-like object providing access to vim |Dictionary| type.
592 Attributes:
593 Attribute Description ~
594 locked One of *python-.locked*
595 Value Description ~
596 zero Variable is not locked
597 vim.VAR_LOCKED Variable is locked, but can be unlocked
598 vim.VAR_FIXED Variable is locked and can't be unlocked
599 Read-write. You can unlock locked variable by assigning
600 `True` or `False` to this attribute. No recursive locking
601 is supported.
602 scope One of
603 Value Description ~
604 zero Dictionary is not a scope one
605 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
606 vim.VAR_SCOPE Other scope dictionary,
607 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200608 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200609 Method Description ~
610 keys() Returns a list with dictionary keys.
611 values() Returns a list with dictionary values.
612 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200613 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200614 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200615 get(key[, default=None])
616 Obtain key from dictionary, returning the default if it is
617 not present.
618 pop(key[, default])
619 Remove specified key from dictionary and return
620 corresponding value. If key is not found and default is
621 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200622 popitem()
623 Remove random key from dictionary and return (key, value)
624 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200625 has_key(key)
626 Check whether dictionary contains specified key, similar
627 to `key in dict`.
628
629 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
630 You can use `vim.Dictionary()` to create new vim
631 dictionaries. `d=vim.Dictionary(arg)` is the same as
632 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
633 constructs empty dictionary.
634
Bram Moolenaara9922d62013-05-30 13:01:18 +0200635 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200636 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200637 d['a'] = 'b' # Item assignment
638 print d['a'] # getting item
639 d.update({'c': 'd'}) # .update(dictionary)
640 d.update(e='f') # .update(**kwargs)
641 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
642 for key in d.keys(): # .keys()
643 for val in d.values(): # .values()
644 for key, val in d.items(): # .items()
645 print isinstance(d, vim.Dictionary) # True
646 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200647 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200648<
649 Note: when iterating over keys you should not modify dictionary.
650
651vim.List object *python-List*
652 Sequence-like object providing access to vim |List| type.
653 Supports `.locked` attribute, see |python-.locked|. Also supports the
654 following methods:
655 Method Description ~
656 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200657
658 __new__(), __new__(iterable)
659 You can use `vim.List()` to create new vim lists.
660 `l=vim.List(iterable)` is the same as
661 `l=vim.bindeval('[]');l.extend(iterable)`. Without
662 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200663 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200664 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200665 l.extend(['abc', 'def']) # .extend() method
666 print l[1:] # slicing
667 l[:0] = ['ghi', 'jkl'] # slice assignment
668 print l[0] # getting item
669 l[0] = 'mno' # assignment
670 for i in l: # iteration
671 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200672 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200673
674vim.Function object *python-Function*
Bram Moolenaar8110a092016-04-14 15:56:09 +0200675 Function-like object, acting like vim |Funcref| object. Accepts special
676 keyword argument `self`, see |Dictionary-function|. You can also use
677 `vim.Function(name)` constructor, it is the same as
678 `vim.bindeval('function(%s)'%json.dumps(name))`.
679
680 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200681 Attribute Description ~
682 name Function name.
683 args `None` or a |python-List| object with arguments. Note
684 that this is a copy of the arguments list, constructed
685 each time you request this attribute. Modifications made
686 to the list will be ignored (but not to the containers
687 inside argument list: this is like |copy()| and not
688 |deepcopy()|).
689 self `None` or a |python-Dictionary| object with self
690 dictionary. Note that explicit `self` keyword used when
691 calling resulting object overrides this attribute.
692 auto_rebind Boolean. True if partial created from this Python object
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100693 and stored in the Vim script dictionary should be
694 automatically rebound to the dictionary it is stored in
695 when this dictionary is indexed. Exposes Vim internal
696 difference between `dict.func` (auto_rebind=True) and
697 `function(dict.func,dict)` (auto_rebind=False). This
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200698 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200699
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200700 Constructor additionally accepts `args`, `self` and `auto_rebind`
701 keywords. If `args` and/or `self` argument is given then it constructs
702 a partial, see |function()|. `auto_rebind` is only used when `self`
703 argument is given, otherwise it is assumed to be `True` regardless of
704 whether it was given or not. If `self` is given then it defaults to
705 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200706
Bram Moolenaara9922d62013-05-30 13:01:18 +0200707 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200708 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200709 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
710 vim.command('''
711 function DictFun() dict
712 return self
713 endfunction
714 ''')
715 f = vim.bindeval('function("DictFun")')
716 print f(self={}) # Like call('DictFun', [], {})
717 print isinstance(f, vim.Function) # True
718
Bram Moolenaar8110a092016-04-14 15:56:09 +0200719 p = vim.Function('DictFun', self={})
720 print f()
721 p = vim.Function('tr', args=['abc', 'a'])
722 print f('b')
723
Bram Moolenaara9922d62013-05-30 13:01:18 +0200724==============================================================================
7258. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200726
727To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100728functions to evaluate Python expressions and pass their values to Vim script.
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100729|pyxeval()| is also available.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200730
Bram Moolenaarde323092017-11-09 19:56:08 +0100731The Python value "None" is converted to v:none.
732
Bram Moolenaar30b65812012-07-12 22:01:11 +0200733==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007349. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000735
Bram Moolenaard94464e2015-11-02 15:28:18 +0100736On MS-Windows and Unix the Python library can be loaded dynamically. The
737|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000738
Bram Moolenaard94464e2015-11-02 15:28:18 +0100739This means that Vim will search for the Python DLL or shared library file only
740when needed. When you don't use the Python interface you don't need it, thus
741you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000742
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100743
744MS-Windows ~
745
746To use the Python interface the Python DLL must be in your search path. In a
747console window type "path" to see what directories are used. The 'pythondll'
748or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000749
Bram Moolenaar3df01732017-02-17 22:47:16 +0100750The name of the DLL should match the Python version Vim was compiled with.
751Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
Bram Moolenaar59eb0162017-12-10 18:17:44 +0100752That is the default value for 'pythondll'. For Python 3 it is python36.dll
753(Python 3.6). To know for sure edit "gvim.exe" and search for
Bram Moolenaar3df01732017-02-17 22:47:16 +0100754"python\d*.dll\c".
Bram Moolenaara5792f52005-11-23 21:25:05 +0000755
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100756
757Unix ~
758
759The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
760shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
761what were specified at compile time. The version of the shared library must
762match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100763
Bram Moolenaara5792f52005-11-23 21:25:05 +0000764==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020076510. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200766
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200767 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200768The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100769if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200770 :py3 print("Hello")
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200771
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200772To see what version of Python you have: >
773 :py3 import sys
774 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200775< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200776The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200777 *:py3do*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200778The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200779
Bram Moolenaar30b65812012-07-12 22:01:11 +0200780
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200781Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007821. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007832. Python 2 support only (+python or +python/dyn, -python3)
7843. Python 3 support only (-python, +python3 or +python3/dyn)
7854. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200786
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200787Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200788
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200789When Python 2 and Python 3 are both supported they must be loaded dynamically.
790
791When doing this on Linux/Unix systems and importing global symbols, this leads
792to a crash when the second Python version is used. So either global symbols
793are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200794loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200795symbols to be provided by Vim.
796 *E836* *E837*
797Vim's configuration script makes a guess for all libraries based on one
798standard Python library (termios). If importing this library succeeds for
799both Python versions, then both will be made available in Vim at the same
800time. If not, only the version first used in a session will be enabled.
801When trying to use the other one you will get the E836 or E837 error message.
802
803Here Vim's behavior depends on the system in which it was configured. In a
804system where both versions of Python were configured with --enable-shared,
805both versions of Python will be activated at the same time. There will still
806be problems with other third party libraries that were not linked to
807libPython.
808
809To work around such problems there are these options:
8101. The problematic library is recompiled to link to the according
811 libpython.so.
8122. Vim is recompiled for only one Python version.
8133. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
814 may crash Vim though.
815
Bram Moolenaar41009372013-07-01 22:03:04 +0200816 *E880*
817Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
818 :py vim.command("qall!")
819<
820
Bram Moolenaar446beb42011-05-10 17:18:44 +0200821 *has-python*
822You can test what Python version is available with: >
823 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200824 echo 'there is Python 2.x'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100825 endif
826 if has('python3')
Bram Moolenaar446beb42011-05-10 17:18:44 +0200827 echo 'there is Python 3.x'
828 endif
829
830Note however, that when Python 2 and 3 are both available and loaded
831dynamically, these has() calls will try to load them. If only one can be
832loaded at a time, just checking if Python 2 or 3 are available will prevent
833the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200834
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100835To avoid loading the dynamic library, only check if Vim was compiled with
836python support: >
837 if has('python_compiled')
838 echo 'compiled with Python 2.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100839 if has('python_dynamic')
840 echo 'Python 2.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100841 endif
842 endif
843 if has('python3_compiled')
844 echo 'compiled with Python 3.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100845 if has('python3_dynamic')
846 echo 'Python 3.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100847 endif
848 endif
849
850This also tells you whether Python is dynamically loaded, which will fail if
851the runtime library cannot be found.
852
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200853==============================================================================
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010085411. Python X *python_x* *pythonx*
855
856Because most python code can be written so that it works with python 2.6+ and
Bram Moolenaar214641f2017-03-05 17:04:09 +0100857python 3 the pyx* functions and commands have been written. They work exactly
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100858the same as the Python 2 and 3 variants, but select the Python version using
859the 'pyxversion' setting.
860
861You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
862for Python commands. If you change this setting at runtime you may risk that
863state of plugins (such as initialization) may be lost.
864
865If you want to use a module, you can put it in the {rtp}/pythonx directory.
866See |pythonx-directory|.
867
868 *:pyx* *:pythonx*
869The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
870if the `:pyx` command is working: >
871 :pyx print("Hello")
872
873To see what version of Python is being used: >
874 :pyx import sys
875 :pyx print(sys.version)
876<
877 *:pyxfile* *python_x-special-comments*
878The `:pyxfile` command works similar to `:pyfile`. However you can add one of
879these comments to force Vim using `:pyfile` or `:py3file`: >
880 #!/any string/python2 " Shebang. Must be the first line of the file.
881 #!/any string/python3 " Shebang. Must be the first line of the file.
882 # requires python 2.x " Maximum lines depend on 'modelines'.
883 # requires python 3.x " Maximum lines depend on 'modelines'.
884Unlike normal modelines, the bottom of the file is not checked.
885If none of them are found, the 'pyxversion' setting is used.
886 *W20* *W21*
887If Vim does not support the selected Python version a silent message will be
888printed. Use `:messages` to read them.
889
890 *:pyxdo*
891The `:pyxdo` command works similar to `:pydo`.
892
893 *has-pythonx*
894You can test if pyx* commands are available with: >
895 if has('pythonx')
896 echo 'pyx* commands are available. (Python ' . &pyx . ')'
897 endif
898
899When compiled with only one of |+python| or |+python3|, the has() returns 1.
900When compiled with both |+python| and |+python3|, the test depends on the
901'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
902it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
903Python 2 or 3 respectively.
904
Bram Moolenaar214641f2017-03-05 17:04:09 +0100905Note that for `has('pythonx')` to work it may try to dynamically load Python 3
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100906or 2. This may have side effects, especially when Vim can only load one of
907the two.
908
909If a user prefers Python 2 and want to fallback to Python 3, he needs to set
910'pyxversion' explicitly in his |.vimrc|. E.g.: >
911 if has('python')
912 set pyx=2
913 elseif has('python3')
914 set pyx=3
915 endif
916
917==============================================================================
Bram Moolenaar036986f2017-03-16 17:41:02 +010091812. Building with Python support *python-building*
919
920A few hints for building with Python 2 or 3 support.
921
922UNIX
923
924See src/Makefile for how to enable including the Python interface.
925
926On Ubuntu you will want to install these packages for Python 2:
927 python
928 python-dev
929For Python 3:
930 python3
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200931 python3-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100932For Python 3.6:
933 python3.6
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200934 python3.6-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100935
936If you have more than one version of Python 3, you need to link python3 to the
937one you prefer, before running configure.
938
939==============================================================================
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200940 vim:tw=78:ts=8:noet:ft=help:norl: