blob: 6969c5db1a6176db31e37c0273856c116ab8f47f [file] [log] [blame]
Bram Moolenaar40962ec2018-01-28 22:47:25 +01001*if_pyth.txt* For Vim version 8.0. Last change: 2018 Jan 28
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Paul Moore
5
6
7The Python Interface to Vim *python* *Python*
8
Bram Moolenaar30b65812012-07-12 22:01:11 +020091. Commands |python-commands|
102. The vim module |python-vim|
113. Buffer objects |python-buffer|
124. Range objects |python-range|
135. Window objects |python-window|
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200146. Tab page objects |python-tabpage|
Bram Moolenaara9922d62013-05-30 13:01:18 +0200157. vim.bindeval objects |python-bindeval-objects|
168. pyeval(), py3eval() Vim functions |python-pyeval|
179. Dynamic loading |python-dynamic|
1810. Python 3 |python3|
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01001911. Python X |python_x|
Bram Moolenaar036986f2017-03-16 17:41:02 +01002012. Building with Python support |python-building|
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
22{Vi does not have any of these commands}
23
Bram Moolenaar368373e2010-07-19 20:46:22 +020024The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000025|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020026The Python 3 interface is available only when Vim was compiled with the
27|+python3| feature.
Bram Moolenaar9ba7e172013-07-17 22:37:26 +020028Both can be available at the same time, but read |python-2-and-3|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000029
30==============================================================================
311. Commands *python-commands*
32
Bram Moolenaardbc28022014-07-26 13:40:44 +020033 *:python* *:py* *E263* *E264* *E887*
Bram Moolenaar071d4272004-06-13 20:20:40 +000034:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020035 Execute Python statement {stmt}. A simple check if
36 the `:python` command is working: >
37 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000038
39:[range]py[thon] << {endmarker}
40{script}
41{endmarker}
42 Execute Python script {script}.
43 Note: This command doesn't work when the Python
44 feature wasn't compiled in. To avoid errors, see
45 |script-here|.
46
47{endmarker} must NOT be preceded by any white space. If {endmarker} is
48omitted from after the "<<", a dot '.' must be used after {script}, like
49for the |:append| and |:insert| commands.
50This form of the |:python| command is mainly useful for including python code
51in Vim scripts.
52
53Example: >
54 function! IcecreamInitialize()
55 python << EOF
56 class StrawberryIcecream:
57 def __call__(self):
58 print 'EAT ME'
59 EOF
60 endfunction
Bram Moolenaar64d8e252016-09-06 22:12:34 +020061
62To see what version of Python you have: >
63 :python import sys
64 :python print(sys.version)
65
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010066Note: Python is very sensitive to the indenting. Make sure the "class" line
67and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000068
Bram Moolenaard620aa92013-05-17 16:40:06 +020069 *:pydo*
70:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
71 {body}" for each line in the [range], with the
72 function arguments being set to the text of each line
73 in turn, without a trailing <EOL>, and the current
74 line number. The function should return a string or
75 None. If a string is returned, it becomes the text of
76 the line in the current turn. The default for [range]
77 is the whole file: "1,$".
78 {not in Vi}
79
80Examples:
81>
82 :pydo return "%s\t%d" % (line[::-1], len(line))
83 :pydo if line: return "%4d: %s" % (linenr, line)
84<
Bram Moolenaar071d4272004-06-13 20:20:40 +000085 *:pyfile* *:pyf*
86:[range]pyf[ile] {file}
87 Execute the Python script in {file}. The whole
88 argument is used as a single file name. {not in Vi}
89
90Both of these commands do essentially the same thing - they execute a piece of
91Python code, with the "current range" |python-range| set to the given line
92range.
93
94In the case of :python, the code to execute is in the command-line.
95In the case of :pyfile, the code to execute is the contents of the given file.
96
97Python commands cannot be used in the |sandbox|.
98
99To pass arguments you need to set sys.argv[] explicitly. Example: >
100
101 :python import sys
102 :python sys.argv = ["foo", "bar"]
103 :pyfile myscript.py
104
105Here are some examples *python-examples* >
106
107 :python from vim import *
108 :python from string import upper
109 :python current.line = upper(current.line)
110 :python print "Hello"
111 :python str = current.buffer[42]
112
113(Note that changes - like the imports - persist from one command to the next,
114just like in the Python interpreter.)
115
116==============================================================================
1172. The vim module *python-vim*
118
119Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000120|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121methods, three constants, and one error object. You need to import the vim
122module before using it: >
123 :python import vim
124
125Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000126 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100127 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000128 :py w = vim.windows[n] # gets window "n"
129 :py cw = vim.current.window # gets the current window
130 :py b = vim.buffers[n] # gets buffer "n"
131 :py cb = vim.current.buffer # gets the current buffer
132 :py w.height = lines # sets the window height
133 :py w.cursor = (row, col) # sets the window cursor position
134 :py pos = w.cursor # gets a tuple (row, col)
135 :py name = b.name # gets the buffer file name
136 :py line = b[n] # gets a line from the buffer
137 :py lines = b[n:m] # gets a list of lines
138 :py num = len(b) # gets the number of lines
139 :py b[n] = str # sets a line in the buffer
140 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
141 :py del b[n] # deletes a line
142 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143
144
145Methods of the "vim" module
146
147vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000148 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000150 :py vim.command("set tw=72")
151 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152< The following definition executes Normal mode commands: >
153 def normal(str):
154 vim.command("normal "+str)
155 # Note the use of single quotes to delimit a string containing
156 # double quotes
157 normal('"a2dd"aP')
158< *E659*
159 The ":python" command cannot be used recursively with Python 2.2 and
160 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000161 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162
163vim.eval(str) *python-eval*
164 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000165 evaluator (see |expression|). Returns the expression result as:
166 - a string if the Vim expression evaluates to a string or number
167 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000168 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000169 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000170 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000171 :py text_width = vim.eval("&tw")
172 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173 # string.atoi() to convert to
174 # a number.
175
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000176 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000177< The latter will return a python list of python dicts, for instance:
Bram Moolenaar214641f2017-03-05 17:04:09 +0100178 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
179 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000180
Bram Moolenaar30b65812012-07-12 22:01:11 +0200181vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200182 Like |python-eval|, but returns special objects described in
183 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200184 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000185
Bram Moolenaarbc411962013-06-02 17:46:40 +0200186vim.strwidth(str) *python-strwidth*
187 Like |strwidth()|: returns number of display cells str occupies, tab
188 is counted as one cell.
189
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200190vim.foreach_rtp(callable) *python-foreach_rtp*
191 Call the given callable for each path in 'runtimepath' until either
192 callable returns something but None, the exception is raised or there
193 are no longer paths. If stopped in case callable returned non-None,
194 vim.foreach_rtp function returns the value returned by callable.
195
Bram Moolenaarf4258302013-06-02 18:20:17 +0200196vim.chdir(*args, **kwargs) *python-chdir*
197vim.fchdir(*args, **kwargs) *python-fchdir*
198 Run os.chdir or os.fchdir, then all appropriate vim stuff.
199 Note: you should not use these functions directly, use os.chdir and
200 os.fchdir instead. Behavior of vim.fchdir is undefined in case
201 os.fchdir does not exist.
202
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203Error object of the "vim" module
204
205vim.error *python-error*
206 Upon encountering a Vim error, Python raises an exception of type
207 vim.error.
208 Example: >
209 try:
210 vim.command("put a")
211 except vim.error:
212 # nothing in register a
213
214Constants of the "vim" module
215
216 Note that these are not actually constants - you could reassign them.
217 But this is silly, as you would then lose access to the vim objects
218 to which the variables referred.
219
220vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200221 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000223 :py b = vim.buffers[i] # Indexing (read-only)
224 :py b in vim.buffers # Membership test
225 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200226 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227<
228vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000229 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000230 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000231 :py w = vim.windows[i] # Indexing (read-only)
232 :py w in vim.windows # Membership test
233 :py n = len(vim.windows) # Number of elements
234 :py for w in vim.windows: # Sequential access
Bram Moolenaarde71b562013-06-02 17:41:54 +0200235< Note: vim.windows object always accesses current tab page.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200236 |python-tabpage|.windows objects are bound to parent |python-tabpage|
237 object and always use windows from that tab page (or throw vim.error
238 in case tab page was deleted). You can keep a reference to both
239 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200240 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200241
242vim.tabpages *python-tabpages*
243 A sequence object providing access to the list of vim tab pages. The
244 object supports the following operations: >
245 :py t = vim.tabpages[i] # Indexing (read-only)
246 :py t in vim.tabpages # Membership test
247 :py n = len(vim.tabpages) # Number of elements
248 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249<
250vim.current *python-current*
251 An object providing access (via specific attributes) to various
252 "current" objects available in vim:
253 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200254 vim.current.buffer The current buffer (RW) Buffer
255 vim.current.window The current window (RW) Window
256 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257 vim.current.range The current line range (RO) Range
258
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000259 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000260 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000261 "current range". A range is a bit like a buffer, but with all access
262 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263
Bram Moolenaare7614592013-05-15 15:51:08 +0200264 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
265 valid |python-buffer|, |python-window| or |python-tabpage| objects
266 respectively. Assigning triggers normal (with |autocommand|s)
267 switching to given buffer, window or tab page. It is the only way to
268 switch UI objects in python: you can't assign to
269 |python-tabpage|.window attribute. To switch without triggering
270 autocommands use >
271 py << EOF
272 saved_eventignore = vim.options['eventignore']
273 vim.options['eventignore'] = 'all'
274 try:
275 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
276 finally:
277 vim.options['eventignore'] = saved_eventignore
278 EOF
279<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200280vim.vars *python-vars*
281vim.vvars *python-vvars*
282 Dictionary-like objects holding dictionaries with global (|g:|) and
283 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
284 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000285
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200286vim.options *python-options*
287 Object partly supporting mapping protocol (supports setting and
288 getting items) providing a read-write access to global options.
289 Note: unlike |:set| this provides access only to global options. You
290 cannot use this object to obtain or set local options' values or
291 access local-only options in any fashion. Raises KeyError if no global
292 option with such name exists (i.e. does not raise KeyError for
293 |global-local| options and global only options, but does for window-
294 and buffer-local ones). Use |python-buffer| objects to access to
295 buffer-local options and |python-window| objects to access to
296 window-local options.
297
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200298 Type of this object is available via "Options" attribute of vim
299 module.
300
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301Output from Python *python-output*
302 Vim displays all Python code output in the Vim message area. Normal
303 output appears as information messages, and error output appears as
304 error messages.
305
306 In implementation terms, this means that all output to sys.stdout
307 (including the output from print statements) appears as information
308 messages, and all output to sys.stderr (including error tracebacks)
309 appears as error messages.
310
311 *python-input*
312 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000313 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314 fixed.
315
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200316 *python2-directory* *python3-directory* *pythonx-directory*
317Python 'runtimepath' handling *python-special-path*
318
319In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
320the list of paths found in 'runtimepath': with this directory in sys.path and
321vim.path_hooks in sys.path_hooks python will try to load module from
322{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
323each {rtp} found in 'runtimepath'.
324
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200325Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200326
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200327 from imp import find_module, load_module
328 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200329 import sys
330
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200331 class VimModuleLoader(object):
332 def __init__(self, module):
333 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200334
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200335 def load_module(self, fullname, path=None):
336 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200337
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200338 def _find_module(fullname, oldtail, path):
339 idx = oldtail.find('.')
340 if idx > 0:
341 name = oldtail[:idx]
342 tail = oldtail[idx+1:]
343 fmr = find_module(name, path)
344 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
345 return _find_module(fullname, tail, module.__path__)
346 else:
347 fmr = find_module(fullname, path)
348 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200349
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200350 # It uses vim module itself in place of VimPathFinder class: it does not
351 # matter for python which object has find_module function attached to as
352 # an attribute.
353 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200354 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200355 def find_module(cls, fullname, path=None):
356 try:
357 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
358 except ImportError:
359 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200360
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200361 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200362 def load_module(cls, fullname, path=None):
363 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200364
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200365 def hook(path):
366 if path == vim.VIM_SPECIAL_PATH:
367 return VimPathFinder
368 else:
369 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200370
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200371 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200372
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200373vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
374 String constant used in conjunction with vim path hook. If path hook
375 installed by vim is requested to handle anything but path equal to
376 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
377 case it uses special loader.
378
379 Note: you must not use value of this constant directly, always use
380 vim.VIM_SPECIAL_PATH object.
381
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200382vim.find_module(...) *python-find_module*
383vim.path_hook(path) *python-path_hook*
384 Methods or objects used to implement path loading as described above.
385 You should not be using any of these directly except for vim.path_hook
386 in case you need to do something with sys.meta_path. It is not
387 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200388 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200389
390vim._get_paths *python-_get_paths*
391 Methods returning a list of paths which will be searched for by path
392 hook. You should not rely on this method being present in future
393 versions, but can use it for debugging.
394
395 It returns a list of {rtp}/python2 (or {rtp}/python3) and
396 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
397
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398==============================================================================
3993. Buffer objects *python-buffer*
400
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000401Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000402 - via vim.current.buffer (|python-current|)
403 - from indexing vim.buffers (|python-buffers|)
404 - from the "buffer" attribute of a window (|python-window|)
405
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100406Buffer objects have two read-only attributes - name - the full file name for
407the buffer, and number - the buffer number. They also have three methods
408(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000410You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000411act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000412element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000413including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000414you would expect. Note that the result of indexing (slicing) a buffer is a
415string (list of strings). This has one unusual consequence - b[:] is different
416from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417"b = None" merely updates the variable b, with no effect on the buffer.
418
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000419Buffer indexes start at zero, as is normal in Python. This differs from vim
420line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421with marks (see below) which use vim line numbers.
422
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200423The buffer object attributes are:
424 b.vars Dictionary-like object used to access
425 |buffer-variable|s.
426 b.options Mapping object (supports item getting, setting and
427 deleting) that provides access to buffer-local options
428 and buffer-local values of |global-local| options. Use
429 |python-window|.options if option is window-local,
430 this object will raise KeyError. If option is
431 |global-local| and local value is missing getting it
432 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200433 b.name String, RW. Contains buffer name (full path).
434 Note: when assigning to b.name |BufFilePre| and
435 |BufFilePost| autocommands are launched.
436 b.number Buffer number. Can be used as |python-buffers| key.
437 Read-only.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200438 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200439 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200440
Bram Moolenaar071d4272004-06-13 20:20:40 +0000441The buffer object methods are:
442 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200443 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000444 b.append(list) Append a list of lines to the buffer
445 Note that the option of supplying a list of strings to
446 the append method differs from the equivalent method
447 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200448 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000449 b.mark(name) Return a tuple (row,col) representing the position
450 of the named mark (can also get the []"<> marks)
451 b.range(s,e) Return a range object (see |python-range|) which
452 represents the part of the given buffer between line
453 numbers s and e |inclusive|.
454
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000455Note that when adding a line it must not contain a line break character '\n'.
456A trailing '\n' is allowed and ignored, so that you can do: >
457 :py b.append(f.readlines())
458
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200459Buffer object type is available using "Buffer" attribute of vim module.
460
Bram Moolenaar071d4272004-06-13 20:20:40 +0000461Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000462 :py print b.name # write the buffer file name
463 :py b[0] = "hello!!!" # replace the top line
464 :py b[:] = None # delete the whole buffer
465 :py del b[:] # delete the whole buffer
466 :py b[0:0] = [ "a line" ] # add a line at the top
467 :py del b[2] # delete a line (the third)
468 :py b.append("bottom") # add a line at the bottom
469 :py n = len(b) # number of lines
470 :py (row,col) = b.mark('a') # named mark
471 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200472 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200473 :py b.options["ff"] = "dos" # set fileformat
474 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000475
476==============================================================================
4774. Range objects *python-range*
478
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000479Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000480number of ways:
481 - via vim.current.range (|python-current|)
482 - from a buffer's range() method (|python-buffer|)
483
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000484A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000485all operations are restricted to the lines within the range (this line range
486can, of course, change as a result of slice assignments, line deletions, or
487the range.append() method).
488
489The range object attributes are:
490 r.start Index of first line into the buffer
491 r.end Index of last line into the buffer
492
493The range object methods are:
494 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200495 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000496 r.append(list) Append a list of lines to the range
497 Note that the option of supplying a list of strings to
498 the append method differs from the equivalent method
499 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200500 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200502Range object type is available using "Range" attribute of vim module.
503
Bram Moolenaar071d4272004-06-13 20:20:40 +0000504Example (assume r is the current range):
505 # Send all lines in a range to the default printer
506 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
507
508==============================================================================
5095. Window objects *python-window*
510
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000511Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000512 - via vim.current.window (|python-current|)
513 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200514 - from indexing "windows" attribute of a tab page (|python-tabpage|)
515 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000516
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000517You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000518methods, and no sequence or other interface.
519
520Window attributes are:
521 buffer (read-only) The buffer displayed in this window
522 cursor (read-write) The current cursor position in the window
523 This is a tuple, (row,col).
524 height (read-write) The window height, in rows
525 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200526 vars (read-only) The window |w:| variables. Attribute is
527 unassignable, but you can change window
528 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200529 options (read-only) The window-local options. Attribute is
530 unassignable, but you can change window
531 options this way. Provides access only to
532 window-local options, for buffer-local use
533 |python-buffer| and for global ones use
534 |python-options|. If option is |global-local|
535 and local value is missing getting it will
536 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200537 number (read-only) Window number. The first window has number 1.
538 This is zero in case it cannot be determined
539 (e.g. when the window object belongs to other
540 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200541 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200542 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200543 tabpage (read-only) Window tab page.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200544 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200545 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200546
Bram Moolenaar071d4272004-06-13 20:20:40 +0000547The height attribute is writable only if the screen is split horizontally.
548The width attribute is writable only if the screen is split vertically.
549
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200550Window object type is available using "Window" attribute of vim module.
551
Bram Moolenaar071d4272004-06-13 20:20:40 +0000552==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005536. Tab page objects *python-tabpage*
554
555Tab page objects represent vim tab pages. You can obtain them in a number of
556ways:
557 - via vim.current.tabpage (|python-current|)
558 - from indexing vim.tabpages (|python-tabpages|)
559
560You can use this object to access tab page windows. They have no methods and
561no sequence or other interfaces.
562
563Tab page attributes are:
564 number The tab page number like the one returned by
565 |tabpagenr()|.
566 windows Like |python-windows|, but for current tab page.
567 vars The tab page |t:| variables.
568 window Current tabpage window.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200569 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200570 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200571
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200572TabPage object type is available using "TabPage" attribute of vim module.
573
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200574==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005757. vim.bindeval objects *python-bindeval-objects*
576
577vim.Dictionary object *python-Dictionary*
578 Dictionary-like object providing access to vim |Dictionary| type.
579 Attributes:
580 Attribute Description ~
581 locked One of *python-.locked*
582 Value Description ~
583 zero Variable is not locked
584 vim.VAR_LOCKED Variable is locked, but can be unlocked
585 vim.VAR_FIXED Variable is locked and can't be unlocked
586 Read-write. You can unlock locked variable by assigning
587 `True` or `False` to this attribute. No recursive locking
588 is supported.
589 scope One of
590 Value Description ~
591 zero Dictionary is not a scope one
592 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
593 vim.VAR_SCOPE Other scope dictionary,
594 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200595 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200596 Method Description ~
597 keys() Returns a list with dictionary keys.
598 values() Returns a list with dictionary values.
599 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200600 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200601 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200602 get(key[, default=None])
603 Obtain key from dictionary, returning the default if it is
604 not present.
605 pop(key[, default])
606 Remove specified key from dictionary and return
607 corresponding value. If key is not found and default is
608 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200609 popitem()
610 Remove random key from dictionary and return (key, value)
611 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200612 has_key(key)
613 Check whether dictionary contains specified key, similar
614 to `key in dict`.
615
616 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
617 You can use `vim.Dictionary()` to create new vim
618 dictionaries. `d=vim.Dictionary(arg)` is the same as
619 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
620 constructs empty dictionary.
621
Bram Moolenaara9922d62013-05-30 13:01:18 +0200622 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200623 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200624 d['a'] = 'b' # Item assignment
625 print d['a'] # getting item
626 d.update({'c': 'd'}) # .update(dictionary)
627 d.update(e='f') # .update(**kwargs)
628 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
629 for key in d.keys(): # .keys()
630 for val in d.values(): # .values()
631 for key, val in d.items(): # .items()
632 print isinstance(d, vim.Dictionary) # True
633 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200634 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200635<
636 Note: when iterating over keys you should not modify dictionary.
637
638vim.List object *python-List*
639 Sequence-like object providing access to vim |List| type.
640 Supports `.locked` attribute, see |python-.locked|. Also supports the
641 following methods:
642 Method Description ~
643 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200644
645 __new__(), __new__(iterable)
646 You can use `vim.List()` to create new vim lists.
647 `l=vim.List(iterable)` is the same as
648 `l=vim.bindeval('[]');l.extend(iterable)`. Without
649 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200650 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200651 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200652 l.extend(['abc', 'def']) # .extend() method
653 print l[1:] # slicing
654 l[:0] = ['ghi', 'jkl'] # slice assignment
655 print l[0] # getting item
656 l[0] = 'mno' # assignment
657 for i in l: # iteration
658 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200659 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200660
661vim.Function object *python-Function*
Bram Moolenaar8110a092016-04-14 15:56:09 +0200662 Function-like object, acting like vim |Funcref| object. Accepts special
663 keyword argument `self`, see |Dictionary-function|. You can also use
664 `vim.Function(name)` constructor, it is the same as
665 `vim.bindeval('function(%s)'%json.dumps(name))`.
666
667 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200668 Attribute Description ~
669 name Function name.
670 args `None` or a |python-List| object with arguments. Note
671 that this is a copy of the arguments list, constructed
672 each time you request this attribute. Modifications made
673 to the list will be ignored (but not to the containers
674 inside argument list: this is like |copy()| and not
675 |deepcopy()|).
676 self `None` or a |python-Dictionary| object with self
677 dictionary. Note that explicit `self` keyword used when
678 calling resulting object overrides this attribute.
679 auto_rebind Boolean. True if partial created from this Python object
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100680 and stored in the Vim script dictionary should be
681 automatically rebound to the dictionary it is stored in
682 when this dictionary is indexed. Exposes Vim internal
683 difference between `dict.func` (auto_rebind=True) and
684 `function(dict.func,dict)` (auto_rebind=False). This
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200685 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200686
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200687 Constructor additionally accepts `args`, `self` and `auto_rebind`
688 keywords. If `args` and/or `self` argument is given then it constructs
689 a partial, see |function()|. `auto_rebind` is only used when `self`
690 argument is given, otherwise it is assumed to be `True` regardless of
691 whether it was given or not. If `self` is given then it defaults to
692 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200693
Bram Moolenaara9922d62013-05-30 13:01:18 +0200694 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200695 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200696 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
697 vim.command('''
698 function DictFun() dict
699 return self
700 endfunction
701 ''')
702 f = vim.bindeval('function("DictFun")')
703 print f(self={}) # Like call('DictFun', [], {})
704 print isinstance(f, vim.Function) # True
705
Bram Moolenaar8110a092016-04-14 15:56:09 +0200706 p = vim.Function('DictFun', self={})
707 print f()
708 p = vim.Function('tr', args=['abc', 'a'])
709 print f('b')
710
Bram Moolenaara9922d62013-05-30 13:01:18 +0200711==============================================================================
7128. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200713
714To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100715functions to evaluate Python expressions and pass their values to Vim script.
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100716|pyxeval()| is also available.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200717
Bram Moolenaarde323092017-11-09 19:56:08 +0100718The Python value "None" is converted to v:none.
719
Bram Moolenaar30b65812012-07-12 22:01:11 +0200720==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007219. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000722
Bram Moolenaard94464e2015-11-02 15:28:18 +0100723On MS-Windows and Unix the Python library can be loaded dynamically. The
724|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000725
Bram Moolenaard94464e2015-11-02 15:28:18 +0100726This means that Vim will search for the Python DLL or shared library file only
727when needed. When you don't use the Python interface you don't need it, thus
728you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000729
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100730
731MS-Windows ~
732
733To use the Python interface the Python DLL must be in your search path. In a
734console window type "path" to see what directories are used. The 'pythondll'
735or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000736
Bram Moolenaar3df01732017-02-17 22:47:16 +0100737The name of the DLL should match the Python version Vim was compiled with.
738Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
Bram Moolenaar59eb0162017-12-10 18:17:44 +0100739That is the default value for 'pythondll'. For Python 3 it is python36.dll
740(Python 3.6). To know for sure edit "gvim.exe" and search for
Bram Moolenaar3df01732017-02-17 22:47:16 +0100741"python\d*.dll\c".
Bram Moolenaara5792f52005-11-23 21:25:05 +0000742
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100743
744Unix ~
745
746The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
747shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
748what were specified at compile time. The version of the shared library must
749match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100750
Bram Moolenaara5792f52005-11-23 21:25:05 +0000751==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020075210. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200753
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200754 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200755The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100756if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200757 :py3 print("Hello")
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200758
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200759To see what version of Python you have: >
760 :py3 import sys
761 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200762< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200763The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200764 *:py3do*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200765The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200766
Bram Moolenaar30b65812012-07-12 22:01:11 +0200767
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200768Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007691. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007702. Python 2 support only (+python or +python/dyn, -python3)
7713. Python 3 support only (-python, +python3 or +python3/dyn)
7724. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200773
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200774Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200775
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200776When Python 2 and Python 3 are both supported they must be loaded dynamically.
777
778When doing this on Linux/Unix systems and importing global symbols, this leads
779to a crash when the second Python version is used. So either global symbols
780are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200781loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200782symbols to be provided by Vim.
783 *E836* *E837*
784Vim's configuration script makes a guess for all libraries based on one
785standard Python library (termios). If importing this library succeeds for
786both Python versions, then both will be made available in Vim at the same
787time. If not, only the version first used in a session will be enabled.
788When trying to use the other one you will get the E836 or E837 error message.
789
790Here Vim's behavior depends on the system in which it was configured. In a
791system where both versions of Python were configured with --enable-shared,
792both versions of Python will be activated at the same time. There will still
793be problems with other third party libraries that were not linked to
794libPython.
795
796To work around such problems there are these options:
7971. The problematic library is recompiled to link to the according
798 libpython.so.
7992. Vim is recompiled for only one Python version.
8003. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
801 may crash Vim though.
802
Bram Moolenaar41009372013-07-01 22:03:04 +0200803 *E880*
804Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
805 :py vim.command("qall!")
806<
807
Bram Moolenaar446beb42011-05-10 17:18:44 +0200808 *has-python*
809You can test what Python version is available with: >
810 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200811 echo 'there is Python 2.x'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100812 endif
813 if has('python3')
Bram Moolenaar446beb42011-05-10 17:18:44 +0200814 echo 'there is Python 3.x'
815 endif
816
817Note however, that when Python 2 and 3 are both available and loaded
818dynamically, these has() calls will try to load them. If only one can be
819loaded at a time, just checking if Python 2 or 3 are available will prevent
820the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200821
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100822To avoid loading the dynamic library, only check if Vim was compiled with
823python support: >
824 if has('python_compiled')
825 echo 'compiled with Python 2.x support'
826 if has('python_dynamic
827 echo 'Python 2.x dynamically loaded
828 endif
829 endif
830 if has('python3_compiled')
831 echo 'compiled with Python 3.x support'
832 if has('python3_dynamic
833 echo 'Python 3.x dynamically loaded
834 endif
835 endif
836
837This also tells you whether Python is dynamically loaded, which will fail if
838the runtime library cannot be found.
839
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200840==============================================================================
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010084111. Python X *python_x* *pythonx*
842
843Because most python code can be written so that it works with python 2.6+ and
Bram Moolenaar214641f2017-03-05 17:04:09 +0100844python 3 the pyx* functions and commands have been written. They work exactly
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100845the same as the Python 2 and 3 variants, but select the Python version using
846the 'pyxversion' setting.
847
848You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
849for Python commands. If you change this setting at runtime you may risk that
850state of plugins (such as initialization) may be lost.
851
852If you want to use a module, you can put it in the {rtp}/pythonx directory.
853See |pythonx-directory|.
854
855 *:pyx* *:pythonx*
856The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
857if the `:pyx` command is working: >
858 :pyx print("Hello")
859
860To see what version of Python is being used: >
861 :pyx import sys
862 :pyx print(sys.version)
863<
864 *:pyxfile* *python_x-special-comments*
865The `:pyxfile` command works similar to `:pyfile`. However you can add one of
866these comments to force Vim using `:pyfile` or `:py3file`: >
867 #!/any string/python2 " Shebang. Must be the first line of the file.
868 #!/any string/python3 " Shebang. Must be the first line of the file.
869 # requires python 2.x " Maximum lines depend on 'modelines'.
870 # requires python 3.x " Maximum lines depend on 'modelines'.
871Unlike normal modelines, the bottom of the file is not checked.
872If none of them are found, the 'pyxversion' setting is used.
873 *W20* *W21*
874If Vim does not support the selected Python version a silent message will be
875printed. Use `:messages` to read them.
876
877 *:pyxdo*
878The `:pyxdo` command works similar to `:pydo`.
879
880 *has-pythonx*
881You can test if pyx* commands are available with: >
882 if has('pythonx')
883 echo 'pyx* commands are available. (Python ' . &pyx . ')'
884 endif
885
886When compiled with only one of |+python| or |+python3|, the has() returns 1.
887When compiled with both |+python| and |+python3|, the test depends on the
888'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
889it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
890Python 2 or 3 respectively.
891
Bram Moolenaar214641f2017-03-05 17:04:09 +0100892Note that for `has('pythonx')` to work it may try to dynamically load Python 3
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100893or 2. This may have side effects, especially when Vim can only load one of
894the two.
895
896If a user prefers Python 2 and want to fallback to Python 3, he needs to set
897'pyxversion' explicitly in his |.vimrc|. E.g.: >
898 if has('python')
899 set pyx=2
900 elseif has('python3')
901 set pyx=3
902 endif
903
904==============================================================================
Bram Moolenaar036986f2017-03-16 17:41:02 +010090512. Building with Python support *python-building*
906
907A few hints for building with Python 2 or 3 support.
908
909UNIX
910
911See src/Makefile for how to enable including the Python interface.
912
913On Ubuntu you will want to install these packages for Python 2:
914 python
915 python-dev
916For Python 3:
917 python3
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200918 python3-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100919For Python 3.6:
920 python3.6
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200921 python3.6-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100922
923If you have more than one version of Python 3, you need to link python3 to the
924one you prefer, before running configure.
925
926==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000927 vim:tw=78:ts=8:ft=help:norl: