blob: 4f04199d5eaf6c2277277ed55a659cefe0f79143 [file] [log] [blame]
Bram Moolenaar54775062019-07-31 21:07:14 +02001*if_pyth.txt* For Vim version 8.1. Last change: 2019 Jul 21
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
Bram Moolenaar54775062019-07-31 21:07:14 +020037:[range]py[thon] << [endmarker]
Bram Moolenaar071d4272004-06-13 20:20:40 +000038{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
Bram Moolenaar54775062019-07-31 21:07:14 +020045The {endmarker} below the {script} must NOT be preceded by any white space.
46
47If [endmarker] is omitted from after the "<<", a dot '.' must be used after
48{script}, like for the |:append| and |:insert| commands.
49
Bram Moolenaar071d4272004-06-13 20:20:40 +000050This 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: >
Bram Moolenaar64d8e252016-09-06 22:12:34 +020063 :python print(sys.version)
64
Bram Moolenaar95bafa22018-10-02 13:26:25 +020065There is no need to import sys, it's done by default.
66
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010067Note: Python is very sensitive to the indenting. Make sure the "class" line
68and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000069
Bram Moolenaard620aa92013-05-17 16:40:06 +020070 *:pydo*
71:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
72 {body}" for each line in the [range], with the
73 function arguments being set to the text of each line
74 in turn, without a trailing <EOL>, and the current
75 line number. The function should return a string or
76 None. If a string is returned, it becomes the text of
77 the line in the current turn. The default for [range]
78 is the whole file: "1,$".
Bram Moolenaard620aa92013-05-17 16:40:06 +020079
80Examples:
81>
82 :pydo return "%s\t%d" % (line[::-1], len(line))
83 :pydo if line: return "%4d: %s" % (linenr, line)
84<
Bram Moolenaar20aac6c2018-09-02 21:07:30 +020085One can use `:pydo` in possible conjunction with `:py` to filter a range using
86python. For example: >
87
88 :py3 << EOF
89 needle = vim.eval('@a')
90 replacement = vim.eval('@b')
91
92 def py_vim_string_replace(str):
93 return str.replace(needle, replacement)
94 EOF
95 :'<,'>py3do return py_vim_string_replace(line)
96<
Bram Moolenaar071d4272004-06-13 20:20:40 +000097 *:pyfile* *:pyf*
98:[range]pyf[ile] {file}
99 Execute the Python script in {file}. The whole
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200100 argument is used as a single file name.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101
102Both of these commands do essentially the same thing - they execute a piece of
103Python code, with the "current range" |python-range| set to the given line
104range.
105
106In the case of :python, the code to execute is in the command-line.
107In the case of :pyfile, the code to execute is the contents of the given file.
108
109Python commands cannot be used in the |sandbox|.
110
111To pass arguments you need to set sys.argv[] explicitly. Example: >
112
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113 :python sys.argv = ["foo", "bar"]
114 :pyfile myscript.py
115
116Here are some examples *python-examples* >
117
118 :python from vim import *
119 :python from string import upper
120 :python current.line = upper(current.line)
121 :python print "Hello"
122 :python str = current.buffer[42]
123
124(Note that changes - like the imports - persist from one command to the next,
125just like in the Python interpreter.)
126
127==============================================================================
1282. The vim module *python-vim*
129
130Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000131|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132methods, three constants, and one error object. You need to import the vim
133module before using it: >
134 :python import vim
135
136Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000137 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100138 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000139 :py w = vim.windows[n] # gets window "n"
140 :py cw = vim.current.window # gets the current window
141 :py b = vim.buffers[n] # gets buffer "n"
142 :py cb = vim.current.buffer # gets the current buffer
143 :py w.height = lines # sets the window height
144 :py w.cursor = (row, col) # sets the window cursor position
145 :py pos = w.cursor # gets a tuple (row, col)
146 :py name = b.name # gets the buffer file name
147 :py line = b[n] # gets a line from the buffer
148 :py lines = b[n:m] # gets a list of lines
149 :py num = len(b) # gets the number of lines
150 :py b[n] = str # sets a line in the buffer
151 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
152 :py del b[n] # deletes a line
153 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154
155
156Methods of the "vim" module
157
158vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000159 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000161 :py vim.command("set tw=72")
162 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000163< The following definition executes Normal mode commands: >
164 def normal(str):
165 vim.command("normal "+str)
166 # Note the use of single quotes to delimit a string containing
167 # double quotes
168 normal('"a2dd"aP')
169< *E659*
170 The ":python" command cannot be used recursively with Python 2.2 and
171 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000172 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173
174vim.eval(str) *python-eval*
175 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000176 evaluator (see |expression|). Returns the expression result as:
177 - a string if the Vim expression evaluates to a string or number
178 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000179 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000180 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181 Examples: >
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200182 :" value of the 'textwidth' option
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000183 :py text_width = vim.eval("&tw")
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200184 :
185 :" contents of the 'a' register
186 :py a_reg = vim.eval("@a")
187 :
188 :" Result is a string! Use string.atoi() to convert to a number.
189 :py str = vim.eval("12+12")
190 :
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000191 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000192< The latter will return a python list of python dicts, for instance:
Bram Moolenaar214641f2017-03-05 17:04:09 +0100193 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
194 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000195
Bram Moolenaar30b65812012-07-12 22:01:11 +0200196vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200197 Like |python-eval|, but returns special objects described in
198 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200199 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000200
Bram Moolenaarbc411962013-06-02 17:46:40 +0200201vim.strwidth(str) *python-strwidth*
202 Like |strwidth()|: returns number of display cells str occupies, tab
203 is counted as one cell.
204
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200205vim.foreach_rtp(callable) *python-foreach_rtp*
206 Call the given callable for each path in 'runtimepath' until either
207 callable returns something but None, the exception is raised or there
208 are no longer paths. If stopped in case callable returned non-None,
209 vim.foreach_rtp function returns the value returned by callable.
210
Bram Moolenaarf4258302013-06-02 18:20:17 +0200211vim.chdir(*args, **kwargs) *python-chdir*
212vim.fchdir(*args, **kwargs) *python-fchdir*
213 Run os.chdir or os.fchdir, then all appropriate vim stuff.
214 Note: you should not use these functions directly, use os.chdir and
215 os.fchdir instead. Behavior of vim.fchdir is undefined in case
216 os.fchdir does not exist.
217
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218Error object of the "vim" module
219
220vim.error *python-error*
221 Upon encountering a Vim error, Python raises an exception of type
222 vim.error.
223 Example: >
224 try:
225 vim.command("put a")
226 except vim.error:
227 # nothing in register a
228
229Constants of the "vim" module
230
231 Note that these are not actually constants - you could reassign them.
232 But this is silly, as you would then lose access to the vim objects
233 to which the variables referred.
234
235vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200236 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000238 :py b = vim.buffers[i] # Indexing (read-only)
239 :py b in vim.buffers # Membership test
240 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200241 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242<
243vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000244 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000246 :py w = vim.windows[i] # Indexing (read-only)
247 :py w in vim.windows # Membership test
248 :py n = len(vim.windows) # Number of elements
249 :py for w in vim.windows: # Sequential access
Bram Moolenaarde71b562013-06-02 17:41:54 +0200250< Note: vim.windows object always accesses current tab page.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200251 |python-tabpage|.windows objects are bound to parent |python-tabpage|
252 object and always use windows from that tab page (or throw vim.error
253 in case tab page was deleted). You can keep a reference to both
254 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200255 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200256
257vim.tabpages *python-tabpages*
258 A sequence object providing access to the list of vim tab pages. The
259 object supports the following operations: >
260 :py t = vim.tabpages[i] # Indexing (read-only)
261 :py t in vim.tabpages # Membership test
262 :py n = len(vim.tabpages) # Number of elements
263 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264<
265vim.current *python-current*
266 An object providing access (via specific attributes) to various
267 "current" objects available in vim:
268 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200269 vim.current.buffer The current buffer (RW) Buffer
270 vim.current.window The current window (RW) Window
271 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272 vim.current.range The current line range (RO) Range
273
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000274 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000275 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000276 "current range". A range is a bit like a buffer, but with all access
277 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278
Bram Moolenaare7614592013-05-15 15:51:08 +0200279 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
280 valid |python-buffer|, |python-window| or |python-tabpage| objects
281 respectively. Assigning triggers normal (with |autocommand|s)
282 switching to given buffer, window or tab page. It is the only way to
283 switch UI objects in python: you can't assign to
284 |python-tabpage|.window attribute. To switch without triggering
285 autocommands use >
286 py << EOF
287 saved_eventignore = vim.options['eventignore']
288 vim.options['eventignore'] = 'all'
289 try:
290 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
291 finally:
292 vim.options['eventignore'] = saved_eventignore
293 EOF
294<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200295vim.vars *python-vars*
296vim.vvars *python-vvars*
297 Dictionary-like objects holding dictionaries with global (|g:|) and
298 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
299 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000300
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200301vim.options *python-options*
302 Object partly supporting mapping protocol (supports setting and
303 getting items) providing a read-write access to global options.
304 Note: unlike |:set| this provides access only to global options. You
305 cannot use this object to obtain or set local options' values or
306 access local-only options in any fashion. Raises KeyError if no global
307 option with such name exists (i.e. does not raise KeyError for
308 |global-local| options and global only options, but does for window-
309 and buffer-local ones). Use |python-buffer| objects to access to
310 buffer-local options and |python-window| objects to access to
311 window-local options.
312
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200313 Type of this object is available via "Options" attribute of vim
314 module.
315
Bram Moolenaar071d4272004-06-13 20:20:40 +0000316Output from Python *python-output*
317 Vim displays all Python code output in the Vim message area. Normal
318 output appears as information messages, and error output appears as
319 error messages.
320
321 In implementation terms, this means that all output to sys.stdout
322 (including the output from print statements) appears as information
323 messages, and all output to sys.stderr (including error tracebacks)
324 appears as error messages.
325
326 *python-input*
327 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000328 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329 fixed.
330
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200331 *python2-directory* *python3-directory* *pythonx-directory*
332Python 'runtimepath' handling *python-special-path*
333
334In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
335the list of paths found in 'runtimepath': with this directory in sys.path and
336vim.path_hooks in sys.path_hooks python will try to load module from
337{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
338each {rtp} found in 'runtimepath'.
339
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200340Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200341
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200342 from imp import find_module, load_module
343 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200344 import sys
345
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200346 class VimModuleLoader(object):
347 def __init__(self, module):
348 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200349
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200350 def load_module(self, fullname, path=None):
351 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200352
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200353 def _find_module(fullname, oldtail, path):
354 idx = oldtail.find('.')
355 if idx > 0:
356 name = oldtail[:idx]
357 tail = oldtail[idx+1:]
358 fmr = find_module(name, path)
359 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
360 return _find_module(fullname, tail, module.__path__)
361 else:
362 fmr = find_module(fullname, path)
363 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200364
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200365 # It uses vim module itself in place of VimPathFinder class: it does not
366 # matter for python which object has find_module function attached to as
367 # an attribute.
368 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200369 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200370 def find_module(cls, fullname, path=None):
371 try:
372 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
373 except ImportError:
374 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200375
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200376 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200377 def load_module(cls, fullname, path=None):
378 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200379
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200380 def hook(path):
381 if path == vim.VIM_SPECIAL_PATH:
382 return VimPathFinder
383 else:
384 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200385
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200386 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200387
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200388vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
389 String constant used in conjunction with vim path hook. If path hook
390 installed by vim is requested to handle anything but path equal to
391 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
392 case it uses special loader.
393
394 Note: you must not use value of this constant directly, always use
395 vim.VIM_SPECIAL_PATH object.
396
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200397vim.find_module(...) *python-find_module*
398vim.path_hook(path) *python-path_hook*
399 Methods or objects used to implement path loading as described above.
400 You should not be using any of these directly except for vim.path_hook
401 in case you need to do something with sys.meta_path. It is not
402 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200403 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200404
405vim._get_paths *python-_get_paths*
406 Methods returning a list of paths which will be searched for by path
407 hook. You should not rely on this method being present in future
408 versions, but can use it for debugging.
409
410 It returns a list of {rtp}/python2 (or {rtp}/python3) and
411 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
412
Bram Moolenaar071d4272004-06-13 20:20:40 +0000413==============================================================================
4143. Buffer objects *python-buffer*
415
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000416Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417 - via vim.current.buffer (|python-current|)
418 - from indexing vim.buffers (|python-buffers|)
419 - from the "buffer" attribute of a window (|python-window|)
420
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100421Buffer objects have two read-only attributes - name - the full file name for
422the buffer, and number - the buffer number. They also have three methods
423(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000425You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000426act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000427element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000428including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000429you would expect. Note that the result of indexing (slicing) a buffer is a
430string (list of strings). This has one unusual consequence - b[:] is different
431from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000432"b = None" merely updates the variable b, with no effect on the buffer.
433
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000434Buffer indexes start at zero, as is normal in Python. This differs from vim
435line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000436with marks (see below) which use vim line numbers.
437
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200438The buffer object attributes are:
439 b.vars Dictionary-like object used to access
440 |buffer-variable|s.
441 b.options Mapping object (supports item getting, setting and
442 deleting) that provides access to buffer-local options
443 and buffer-local values of |global-local| options. Use
444 |python-window|.options if option is window-local,
445 this object will raise KeyError. If option is
446 |global-local| and local value is missing getting it
447 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200448 b.name String, RW. Contains buffer name (full path).
449 Note: when assigning to b.name |BufFilePre| and
450 |BufFilePost| autocommands are launched.
451 b.number Buffer number. Can be used as |python-buffers| key.
452 Read-only.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200453 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200454 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200455
Bram Moolenaar071d4272004-06-13 20:20:40 +0000456The buffer object methods are:
457 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200458 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000459 b.append(list) Append a list of lines to the buffer
460 Note that the option of supplying a list of strings to
461 the append method differs from the equivalent method
462 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200463 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000464 b.mark(name) Return a tuple (row,col) representing the position
465 of the named mark (can also get the []"<> marks)
466 b.range(s,e) Return a range object (see |python-range|) which
467 represents the part of the given buffer between line
468 numbers s and e |inclusive|.
469
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000470Note that when adding a line it must not contain a line break character '\n'.
471A trailing '\n' is allowed and ignored, so that you can do: >
472 :py b.append(f.readlines())
473
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200474Buffer object type is available using "Buffer" attribute of vim module.
475
Bram Moolenaar071d4272004-06-13 20:20:40 +0000476Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000477 :py print b.name # write the buffer file name
478 :py b[0] = "hello!!!" # replace the top line
479 :py b[:] = None # delete the whole buffer
480 :py del b[:] # delete the whole buffer
481 :py b[0:0] = [ "a line" ] # add a line at the top
482 :py del b[2] # delete a line (the third)
483 :py b.append("bottom") # add a line at the bottom
484 :py n = len(b) # number of lines
485 :py (row,col) = b.mark('a') # named mark
486 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200487 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200488 :py b.options["ff"] = "dos" # set fileformat
489 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490
491==============================================================================
4924. Range objects *python-range*
493
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000494Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000495number of ways:
496 - via vim.current.range (|python-current|)
497 - from a buffer's range() method (|python-buffer|)
498
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000499A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000500all operations are restricted to the lines within the range (this line range
501can, of course, change as a result of slice assignments, line deletions, or
502the range.append() method).
503
504The range object attributes are:
505 r.start Index of first line into the buffer
506 r.end Index of last line into the buffer
507
508The range object methods are:
509 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200510 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000511 r.append(list) Append a list of lines to the range
512 Note that the option of supplying a list of strings to
513 the append method differs from the equivalent method
514 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200515 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000516
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200517Range object type is available using "Range" attribute of vim module.
518
Bram Moolenaar071d4272004-06-13 20:20:40 +0000519Example (assume r is the current range):
520 # Send all lines in a range to the default printer
521 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
522
523==============================================================================
5245. Window objects *python-window*
525
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000526Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000527 - via vim.current.window (|python-current|)
528 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200529 - from indexing "windows" attribute of a tab page (|python-tabpage|)
530 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000531
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000532You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000533methods, and no sequence or other interface.
534
535Window attributes are:
536 buffer (read-only) The buffer displayed in this window
537 cursor (read-write) The current cursor position in the window
538 This is a tuple, (row,col).
539 height (read-write) The window height, in rows
540 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200541 vars (read-only) The window |w:| variables. Attribute is
542 unassignable, but you can change window
543 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200544 options (read-only) The window-local options. Attribute is
545 unassignable, but you can change window
546 options this way. Provides access only to
547 window-local options, for buffer-local use
548 |python-buffer| and for global ones use
549 |python-options|. If option is |global-local|
550 and local value is missing getting it will
551 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200552 number (read-only) Window number. The first window has number 1.
553 This is zero in case it cannot be determined
554 (e.g. when the window object belongs to other
555 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200556 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200557 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200558 tabpage (read-only) Window tab page.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200559 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200560 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200561
Bram Moolenaar071d4272004-06-13 20:20:40 +0000562The height attribute is writable only if the screen is split horizontally.
563The width attribute is writable only if the screen is split vertically.
564
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200565Window object type is available using "Window" attribute of vim module.
566
Bram Moolenaar071d4272004-06-13 20:20:40 +0000567==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005686. Tab page objects *python-tabpage*
569
570Tab page objects represent vim tab pages. You can obtain them in a number of
571ways:
572 - via vim.current.tabpage (|python-current|)
573 - from indexing vim.tabpages (|python-tabpages|)
574
575You can use this object to access tab page windows. They have no methods and
576no sequence or other interfaces.
577
578Tab page attributes are:
579 number The tab page number like the one returned by
580 |tabpagenr()|.
581 windows Like |python-windows|, but for current tab page.
582 vars The tab page |t:| variables.
583 window Current tabpage window.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200584 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200585 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200586
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200587TabPage object type is available using "TabPage" attribute of vim module.
588
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200589==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005907. vim.bindeval objects *python-bindeval-objects*
591
592vim.Dictionary object *python-Dictionary*
593 Dictionary-like object providing access to vim |Dictionary| type.
594 Attributes:
595 Attribute Description ~
596 locked One of *python-.locked*
597 Value Description ~
598 zero Variable is not locked
599 vim.VAR_LOCKED Variable is locked, but can be unlocked
600 vim.VAR_FIXED Variable is locked and can't be unlocked
601 Read-write. You can unlock locked variable by assigning
602 `True` or `False` to this attribute. No recursive locking
603 is supported.
604 scope One of
605 Value Description ~
606 zero Dictionary is not a scope one
607 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
608 vim.VAR_SCOPE Other scope dictionary,
609 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200610 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200611 Method Description ~
612 keys() Returns a list with dictionary keys.
613 values() Returns a list with dictionary values.
614 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200615 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200616 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200617 get(key[, default=None])
618 Obtain key from dictionary, returning the default if it is
619 not present.
620 pop(key[, default])
621 Remove specified key from dictionary and return
622 corresponding value. If key is not found and default is
623 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200624 popitem()
625 Remove random key from dictionary and return (key, value)
626 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200627 has_key(key)
628 Check whether dictionary contains specified key, similar
629 to `key in dict`.
630
631 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
632 You can use `vim.Dictionary()` to create new vim
633 dictionaries. `d=vim.Dictionary(arg)` is the same as
634 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
635 constructs empty dictionary.
636
Bram Moolenaara9922d62013-05-30 13:01:18 +0200637 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200638 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200639 d['a'] = 'b' # Item assignment
640 print d['a'] # getting item
641 d.update({'c': 'd'}) # .update(dictionary)
642 d.update(e='f') # .update(**kwargs)
643 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
644 for key in d.keys(): # .keys()
645 for val in d.values(): # .values()
646 for key, val in d.items(): # .items()
647 print isinstance(d, vim.Dictionary) # True
648 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200649 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200650<
651 Note: when iterating over keys you should not modify dictionary.
652
653vim.List object *python-List*
654 Sequence-like object providing access to vim |List| type.
655 Supports `.locked` attribute, see |python-.locked|. Also supports the
656 following methods:
657 Method Description ~
658 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200659
660 __new__(), __new__(iterable)
661 You can use `vim.List()` to create new vim lists.
662 `l=vim.List(iterable)` is the same as
663 `l=vim.bindeval('[]');l.extend(iterable)`. Without
664 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200665 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200666 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200667 l.extend(['abc', 'def']) # .extend() method
668 print l[1:] # slicing
669 l[:0] = ['ghi', 'jkl'] # slice assignment
670 print l[0] # getting item
671 l[0] = 'mno' # assignment
672 for i in l: # iteration
673 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200674 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200675
676vim.Function object *python-Function*
Bram Moolenaar8110a092016-04-14 15:56:09 +0200677 Function-like object, acting like vim |Funcref| object. Accepts special
678 keyword argument `self`, see |Dictionary-function|. You can also use
679 `vim.Function(name)` constructor, it is the same as
680 `vim.bindeval('function(%s)'%json.dumps(name))`.
681
682 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200683 Attribute Description ~
684 name Function name.
685 args `None` or a |python-List| object with arguments. Note
686 that this is a copy of the arguments list, constructed
687 each time you request this attribute. Modifications made
688 to the list will be ignored (but not to the containers
689 inside argument list: this is like |copy()| and not
690 |deepcopy()|).
691 self `None` or a |python-Dictionary| object with self
692 dictionary. Note that explicit `self` keyword used when
693 calling resulting object overrides this attribute.
694 auto_rebind Boolean. True if partial created from this Python object
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100695 and stored in the Vim script dictionary should be
696 automatically rebound to the dictionary it is stored in
697 when this dictionary is indexed. Exposes Vim internal
698 difference between `dict.func` (auto_rebind=True) and
699 `function(dict.func,dict)` (auto_rebind=False). This
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200700 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200701
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200702 Constructor additionally accepts `args`, `self` and `auto_rebind`
703 keywords. If `args` and/or `self` argument is given then it constructs
704 a partial, see |function()|. `auto_rebind` is only used when `self`
705 argument is given, otherwise it is assumed to be `True` regardless of
706 whether it was given or not. If `self` is given then it defaults to
707 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200708
Bram Moolenaara9922d62013-05-30 13:01:18 +0200709 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200710 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200711 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
712 vim.command('''
713 function DictFun() dict
714 return self
715 endfunction
716 ''')
717 f = vim.bindeval('function("DictFun")')
718 print f(self={}) # Like call('DictFun', [], {})
719 print isinstance(f, vim.Function) # True
720
Bram Moolenaar8110a092016-04-14 15:56:09 +0200721 p = vim.Function('DictFun', self={})
722 print f()
723 p = vim.Function('tr', args=['abc', 'a'])
724 print f('b')
725
Bram Moolenaara9922d62013-05-30 13:01:18 +0200726==============================================================================
7278. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200728
729To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100730functions to evaluate Python expressions and pass their values to Vim script.
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100731|pyxeval()| is also available.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200732
Bram Moolenaarde323092017-11-09 19:56:08 +0100733The Python value "None" is converted to v:none.
734
Bram Moolenaar30b65812012-07-12 22:01:11 +0200735==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007369. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000737
Bram Moolenaard94464e2015-11-02 15:28:18 +0100738On MS-Windows and Unix the Python library can be loaded dynamically. The
739|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000740
Bram Moolenaard94464e2015-11-02 15:28:18 +0100741This means that Vim will search for the Python DLL or shared library file only
742when needed. When you don't use the Python interface you don't need it, thus
743you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000744
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100745
746MS-Windows ~
747
748To use the Python interface the Python DLL must be in your search path. In a
749console window type "path" to see what directories are used. The 'pythondll'
750or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000751
Bram Moolenaar3df01732017-02-17 22:47:16 +0100752The name of the DLL should match the Python version Vim was compiled with.
753Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
Bram Moolenaar59eb0162017-12-10 18:17:44 +0100754That is the default value for 'pythondll'. For Python 3 it is python36.dll
755(Python 3.6). To know for sure edit "gvim.exe" and search for
Bram Moolenaar3df01732017-02-17 22:47:16 +0100756"python\d*.dll\c".
Bram Moolenaara5792f52005-11-23 21:25:05 +0000757
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100758
759Unix ~
760
761The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
762shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
763what were specified at compile time. The version of the shared library must
764match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100765
Bram Moolenaara5792f52005-11-23 21:25:05 +0000766==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020076710. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200768
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200769 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200770The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100771if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200772 :py3 print("Hello")
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200773
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200774To see what version of Python you have: >
775 :py3 import sys
776 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200777< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200778The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200779 *:py3do*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200780The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200781
Bram Moolenaar30b65812012-07-12 22:01:11 +0200782
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200783Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007841. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007852. Python 2 support only (+python or +python/dyn, -python3)
7863. Python 3 support only (-python, +python3 or +python3/dyn)
7874. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200788
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200789Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200790
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200791When Python 2 and Python 3 are both supported they must be loaded dynamically.
792
793When doing this on Linux/Unix systems and importing global symbols, this leads
794to a crash when the second Python version is used. So either global symbols
795are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200796loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200797symbols to be provided by Vim.
798 *E836* *E837*
799Vim's configuration script makes a guess for all libraries based on one
800standard Python library (termios). If importing this library succeeds for
801both Python versions, then both will be made available in Vim at the same
802time. If not, only the version first used in a session will be enabled.
803When trying to use the other one you will get the E836 or E837 error message.
804
805Here Vim's behavior depends on the system in which it was configured. In a
806system where both versions of Python were configured with --enable-shared,
807both versions of Python will be activated at the same time. There will still
808be problems with other third party libraries that were not linked to
809libPython.
810
811To work around such problems there are these options:
8121. The problematic library is recompiled to link to the according
813 libpython.so.
8142. Vim is recompiled for only one Python version.
8153. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
816 may crash Vim though.
817
Bram Moolenaar41009372013-07-01 22:03:04 +0200818 *E880*
819Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
820 :py vim.command("qall!")
821<
822
Bram Moolenaar446beb42011-05-10 17:18:44 +0200823 *has-python*
824You can test what Python version is available with: >
825 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200826 echo 'there is Python 2.x'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100827 endif
828 if has('python3')
Bram Moolenaar446beb42011-05-10 17:18:44 +0200829 echo 'there is Python 3.x'
830 endif
831
832Note however, that when Python 2 and 3 are both available and loaded
833dynamically, these has() calls will try to load them. If only one can be
834loaded at a time, just checking if Python 2 or 3 are available will prevent
835the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200836
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100837To avoid loading the dynamic library, only check if Vim was compiled with
838python support: >
839 if has('python_compiled')
840 echo 'compiled with Python 2.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100841 if has('python_dynamic')
842 echo 'Python 2.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100843 endif
844 endif
845 if has('python3_compiled')
846 echo 'compiled with Python 3.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100847 if has('python3_dynamic')
848 echo 'Python 3.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100849 endif
850 endif
851
852This also tells you whether Python is dynamically loaded, which will fail if
853the runtime library cannot be found.
854
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200855==============================================================================
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010085611. Python X *python_x* *pythonx*
857
858Because most python code can be written so that it works with python 2.6+ and
Bram Moolenaar214641f2017-03-05 17:04:09 +0100859python 3 the pyx* functions and commands have been written. They work exactly
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100860the same as the Python 2 and 3 variants, but select the Python version using
861the 'pyxversion' setting.
862
863You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
864for Python commands. If you change this setting at runtime you may risk that
865state of plugins (such as initialization) may be lost.
866
867If you want to use a module, you can put it in the {rtp}/pythonx directory.
868See |pythonx-directory|.
869
870 *:pyx* *:pythonx*
871The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
872if the `:pyx` command is working: >
873 :pyx print("Hello")
874
875To see what version of Python is being used: >
876 :pyx import sys
877 :pyx print(sys.version)
878<
879 *:pyxfile* *python_x-special-comments*
880The `:pyxfile` command works similar to `:pyfile`. However you can add one of
881these comments to force Vim using `:pyfile` or `:py3file`: >
882 #!/any string/python2 " Shebang. Must be the first line of the file.
883 #!/any string/python3 " Shebang. Must be the first line of the file.
884 # requires python 2.x " Maximum lines depend on 'modelines'.
885 # requires python 3.x " Maximum lines depend on 'modelines'.
886Unlike normal modelines, the bottom of the file is not checked.
887If none of them are found, the 'pyxversion' setting is used.
888 *W20* *W21*
889If Vim does not support the selected Python version a silent message will be
890printed. Use `:messages` to read them.
891
892 *:pyxdo*
893The `:pyxdo` command works similar to `:pydo`.
894
895 *has-pythonx*
896You can test if pyx* commands are available with: >
897 if has('pythonx')
898 echo 'pyx* commands are available. (Python ' . &pyx . ')'
899 endif
900
901When compiled with only one of |+python| or |+python3|, the has() returns 1.
902When compiled with both |+python| and |+python3|, the test depends on the
903'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
904it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
905Python 2 or 3 respectively.
906
Bram Moolenaar214641f2017-03-05 17:04:09 +0100907Note that for `has('pythonx')` to work it may try to dynamically load Python 3
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100908or 2. This may have side effects, especially when Vim can only load one of
909the two.
910
911If a user prefers Python 2 and want to fallback to Python 3, he needs to set
912'pyxversion' explicitly in his |.vimrc|. E.g.: >
913 if has('python')
914 set pyx=2
915 elseif has('python3')
916 set pyx=3
917 endif
918
919==============================================================================
Bram Moolenaar036986f2017-03-16 17:41:02 +010092012. Building with Python support *python-building*
921
922A few hints for building with Python 2 or 3 support.
923
924UNIX
925
926See src/Makefile for how to enable including the Python interface.
927
928On Ubuntu you will want to install these packages for Python 2:
929 python
930 python-dev
931For Python 3:
932 python3
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200933 python3-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100934For Python 3.6:
935 python3.6
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200936 python3.6-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100937
938If you have more than one version of Python 3, you need to link python3 to the
939one you prefer, before running configure.
940
941==============================================================================
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200942 vim:tw=78:ts=8:noet:ft=help:norl: