blob: 572e6bf7bff7d83c37360c37772dd7422a3a0534 [file] [log] [blame]
Bram Moolenaar98056532019-12-12 14:18:35 +01001*if_pyth.txt* For Vim version 8.2. Last change: 2019 Dec 07
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 Moolenaar6c2b7b82020-04-14 20:15:49 +020037:[range]py[thon] << [trim] [{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 +020045If [endmarker] is omitted from after the "<<", a dot '.' must be used after
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +020046{script}, like for the |:append| and |:insert| commands. Refer to
47|:let-heredoc| for more information.
Bram Moolenaar54775062019-07-31 21:07:14 +020048
Bram Moolenaar071d4272004-06-13 20:20:40 +000049This form of the |:python| command is mainly useful for including python code
50in Vim scripts.
51
52Example: >
53 function! IcecreamInitialize()
54 python << EOF
55 class StrawberryIcecream:
56 def __call__(self):
57 print 'EAT ME'
58 EOF
59 endfunction
Bram Moolenaar64d8e252016-09-06 22:12:34 +020060
61To see what version of Python you have: >
Bram Moolenaar64d8e252016-09-06 22:12:34 +020062 :python print(sys.version)
63
Bram Moolenaar95bafa22018-10-02 13:26:25 +020064There is no need to import sys, it's done by default.
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,$".
Bram Moolenaard620aa92013-05-17 16:40:06 +020078
79Examples:
80>
81 :pydo return "%s\t%d" % (line[::-1], len(line))
82 :pydo if line: return "%4d: %s" % (linenr, line)
83<
Bram Moolenaar20aac6c2018-09-02 21:07:30 +020084One can use `:pydo` in possible conjunction with `:py` to filter a range using
85python. For example: >
86
87 :py3 << EOF
88 needle = vim.eval('@a')
89 replacement = vim.eval('@b')
90
91 def py_vim_string_replace(str):
92 return str.replace(needle, replacement)
93 EOF
94 :'<,'>py3do return py_vim_string_replace(line)
95<
Bram Moolenaar071d4272004-06-13 20:20:40 +000096 *:pyfile* *:pyf*
97:[range]pyf[ile] {file}
98 Execute the Python script in {file}. The whole
Bram Moolenaar25c9c682019-05-05 18:13:34 +020099 argument is used as a single file name.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100
101Both of these commands do essentially the same thing - they execute a piece of
102Python code, with the "current range" |python-range| set to the given line
103range.
104
105In the case of :python, the code to execute is in the command-line.
106In the case of :pyfile, the code to execute is the contents of the given file.
107
108Python commands cannot be used in the |sandbox|.
109
110To pass arguments you need to set sys.argv[] explicitly. Example: >
111
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112 :python sys.argv = ["foo", "bar"]
113 :pyfile myscript.py
114
115Here are some examples *python-examples* >
116
117 :python from vim import *
118 :python from string import upper
119 :python current.line = upper(current.line)
120 :python print "Hello"
121 :python str = current.buffer[42]
122
123(Note that changes - like the imports - persist from one command to the next,
124just like in the Python interpreter.)
125
126==============================================================================
1272. The vim module *python-vim*
128
129Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000130|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131methods, three constants, and one error object. You need to import the vim
132module before using it: >
133 :python import vim
134
135Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000136 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100137 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000138 :py w = vim.windows[n] # gets window "n"
139 :py cw = vim.current.window # gets the current window
140 :py b = vim.buffers[n] # gets buffer "n"
141 :py cb = vim.current.buffer # gets the current buffer
142 :py w.height = lines # sets the window height
143 :py w.cursor = (row, col) # sets the window cursor position
144 :py pos = w.cursor # gets a tuple (row, col)
145 :py name = b.name # gets the buffer file name
146 :py line = b[n] # gets a line from the buffer
147 :py lines = b[n:m] # gets a list of lines
148 :py num = len(b) # gets the number of lines
149 :py b[n] = str # sets a line in the buffer
150 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
151 :py del b[n] # deletes a line
152 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153
154
155Methods of the "vim" module
156
157vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000158 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000160 :py vim.command("set tw=72")
161 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162< The following definition executes Normal mode commands: >
163 def normal(str):
164 vim.command("normal "+str)
165 # Note the use of single quotes to delimit a string containing
166 # double quotes
167 normal('"a2dd"aP')
168< *E659*
169 The ":python" command cannot be used recursively with Python 2.2 and
170 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000171 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000172
173vim.eval(str) *python-eval*
174 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000175 evaluator (see |expression|). Returns the expression result as:
176 - a string if the Vim expression evaluates to a string or number
177 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000178 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000179 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180 Examples: >
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200181 :" value of the 'textwidth' option
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000182 :py text_width = vim.eval("&tw")
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200183 :
184 :" contents of the 'a' register
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100185 :py a_reg = vim.eval("@a")
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200186 :
187 :" Result is a string! Use string.atoi() to convert to a number.
188 :py str = vim.eval("12+12")
189 :
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000190 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000191< The latter will return a python list of python dicts, for instance:
Bram Moolenaar214641f2017-03-05 17:04:09 +0100192 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
193 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000194
Bram Moolenaar30b65812012-07-12 22:01:11 +0200195vim.bindeval(str) *python-bindeval*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100196 Like |python-eval|, but returns special objects described in
197 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200198 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000199
Bram Moolenaarbc411962013-06-02 17:46:40 +0200200vim.strwidth(str) *python-strwidth*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100201 Like |strwidth()|: returns number of display cells str occupies, tab
Bram Moolenaarbc411962013-06-02 17:46:40 +0200202 is counted as one cell.
203
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200204vim.foreach_rtp(callable) *python-foreach_rtp*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100205 Call the given callable for each path in 'runtimepath' until either
206 callable returns something but None, the exception is raised or there
207 are no longer paths. If stopped in case callable returned non-None,
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200208 vim.foreach_rtp function returns the value returned by callable.
209
Bram Moolenaarf4258302013-06-02 18:20:17 +0200210vim.chdir(*args, **kwargs) *python-chdir*
211vim.fchdir(*args, **kwargs) *python-fchdir*
212 Run os.chdir or os.fchdir, then all appropriate vim stuff.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100213 Note: you should not use these functions directly, use os.chdir and
214 os.fchdir instead. Behavior of vim.fchdir is undefined in case
Bram Moolenaarf4258302013-06-02 18:20:17 +0200215 os.fchdir does not exist.
216
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217Error object of the "vim" module
218
219vim.error *python-error*
220 Upon encountering a Vim error, Python raises an exception of type
221 vim.error.
222 Example: >
223 try:
224 vim.command("put a")
225 except vim.error:
226 # nothing in register a
227
228Constants of the "vim" module
229
230 Note that these are not actually constants - you could reassign them.
231 But this is silly, as you would then lose access to the vim objects
232 to which the variables referred.
233
234vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200235 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000237 :py b = vim.buffers[i] # Indexing (read-only)
238 :py b in vim.buffers # Membership test
239 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200240 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241<
242vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000243 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000244 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000245 :py w = vim.windows[i] # Indexing (read-only)
246 :py w in vim.windows # Membership test
247 :py n = len(vim.windows) # Number of elements
248 :py for w in vim.windows: # Sequential access
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100249< Note: vim.windows object always accesses current tab page.
250 |python-tabpage|.windows objects are bound to parent |python-tabpage|
251 object and always use windows from that tab page (or throw vim.error
252 in case tab page was deleted). You can keep a reference to both
253 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200254 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200255
256vim.tabpages *python-tabpages*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100257 A sequence object providing access to the list of vim tab pages. The
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200258 object supports the following operations: >
259 :py t = vim.tabpages[i] # Indexing (read-only)
260 :py t in vim.tabpages # Membership test
261 :py n = len(vim.tabpages) # Number of elements
262 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263<
264vim.current *python-current*
265 An object providing access (via specific attributes) to various
266 "current" objects available in vim:
267 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200268 vim.current.buffer The current buffer (RW) Buffer
269 vim.current.window The current window (RW) Window
270 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271 vim.current.range The current line range (RO) Range
272
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000273 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000275 "current range". A range is a bit like a buffer, but with all access
276 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100278 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
279 valid |python-buffer|, |python-window| or |python-tabpage| objects
280 respectively. Assigning triggers normal (with |autocommand|s)
281 switching to given buffer, window or tab page. It is the only way to
282 switch UI objects in python: you can't assign to
283 |python-tabpage|.window attribute. To switch without triggering
Bram Moolenaare7614592013-05-15 15:51:08 +0200284 autocommands use >
285 py << EOF
286 saved_eventignore = vim.options['eventignore']
287 vim.options['eventignore'] = 'all'
288 try:
289 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
290 finally:
291 vim.options['eventignore'] = saved_eventignore
292 EOF
293<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200294vim.vars *python-vars*
295vim.vvars *python-vvars*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100296 Dictionary-like objects holding dictionaries with global (|g:|) and
297 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200298 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200300vim.options *python-options*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100301 Object partly supporting mapping protocol (supports setting and
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200302 getting items) providing a read-write access to global options.
303 Note: unlike |:set| this provides access only to global options. You
304 cannot use this object to obtain or set local options' values or
305 access local-only options in any fashion. Raises KeyError if no global
306 option with such name exists (i.e. does not raise KeyError for
307 |global-local| options and global only options, but does for window-
308 and buffer-local ones). Use |python-buffer| objects to access to
309 buffer-local options and |python-window| objects to access to
310 window-local options.
311
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100312 Type of this object is available via "Options" attribute of vim
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200313 module.
314
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315Output from Python *python-output*
316 Vim displays all Python code output in the Vim message area. Normal
317 output appears as information messages, and error output appears as
318 error messages.
319
320 In implementation terms, this means that all output to sys.stdout
321 (including the output from print statements) appears as information
322 messages, and all output to sys.stderr (including error tracebacks)
323 appears as error messages.
324
325 *python-input*
326 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000327 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000328 fixed.
329
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200330 *python2-directory* *python3-directory* *pythonx-directory*
331Python 'runtimepath' handling *python-special-path*
332
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100333In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
334the list of paths found in 'runtimepath': with this directory in sys.path and
335vim.path_hooks in sys.path_hooks python will try to load module from
336{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200337each {rtp} found in 'runtimepath'.
338
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200339Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200340
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200341 from imp import find_module, load_module
342 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200343 import sys
344
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200345 class VimModuleLoader(object):
346 def __init__(self, module):
347 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200348
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200349 def load_module(self, fullname, path=None):
350 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200351
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200352 def _find_module(fullname, oldtail, path):
353 idx = oldtail.find('.')
354 if idx > 0:
355 name = oldtail[:idx]
356 tail = oldtail[idx+1:]
357 fmr = find_module(name, path)
358 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
359 return _find_module(fullname, tail, module.__path__)
360 else:
361 fmr = find_module(fullname, path)
362 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200363
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100364 # It uses vim module itself in place of VimPathFinder class: it does not
365 # matter for python which object has find_module function attached to as
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200366 # an attribute.
367 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200368 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200369 def find_module(cls, fullname, path=None):
370 try:
371 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
372 except ImportError:
373 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200374
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200375 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200376 def load_module(cls, fullname, path=None):
377 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200378
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200379 def hook(path):
380 if path == vim.VIM_SPECIAL_PATH:
381 return VimPathFinder
382 else:
383 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200384
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200385 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200386
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200387vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100388 String constant used in conjunction with vim path hook. If path hook
389 installed by vim is requested to handle anything but path equal to
390 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200391 case it uses special loader.
392
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100393 Note: you must not use value of this constant directly, always use
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200394 vim.VIM_SPECIAL_PATH object.
395
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200396vim.find_module(...) *python-find_module*
397vim.path_hook(path) *python-path_hook*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100398 Methods or objects used to implement path loading as described above.
399 You should not be using any of these directly except for vim.path_hook
400 in case you need to do something with sys.meta_path. It is not
401 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200402 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200403
404vim._get_paths *python-_get_paths*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100405 Methods returning a list of paths which will be searched for by path
406 hook. You should not rely on this method being present in future
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200407 versions, but can use it for debugging.
408
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100409 It returns a list of {rtp}/python2 (or {rtp}/python3) and
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200410 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
411
Bram Moolenaar071d4272004-06-13 20:20:40 +0000412==============================================================================
4133. Buffer objects *python-buffer*
414
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000415Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416 - via vim.current.buffer (|python-current|)
417 - from indexing vim.buffers (|python-buffers|)
418 - from the "buffer" attribute of a window (|python-window|)
419
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100420Buffer objects have two read-only attributes - name - the full file name for
421the buffer, and number - the buffer number. They also have three methods
422(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000423
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000424You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000425act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000426element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000428you would expect. Note that the result of indexing (slicing) a buffer is a
429string (list of strings). This has one unusual consequence - b[:] is different
430from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000431"b = None" merely updates the variable b, with no effect on the buffer.
432
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000433Buffer indexes start at zero, as is normal in Python. This differs from vim
434line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000435with marks (see below) which use vim line numbers.
436
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200437The buffer object attributes are:
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100438 b.vars Dictionary-like object used to access
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200439 |buffer-variable|s.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100440 b.options Mapping object (supports item getting, setting and
441 deleting) that provides access to buffer-local options
442 and buffer-local values of |global-local| options. Use
443 |python-window|.options if option is window-local,
444 this object will raise KeyError. If option is
445 |global-local| and local value is missing getting it
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200446 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200447 b.name String, RW. Contains buffer name (full path).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100448 Note: when assigning to b.name |BufFilePre| and
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200449 |BufFilePost| autocommands are launched.
450 b.number Buffer number. Can be used as |python-buffers| key.
451 Read-only.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100452 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200453 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200454
Bram Moolenaar071d4272004-06-13 20:20:40 +0000455The buffer object methods are:
456 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200457 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000458 b.append(list) Append a list of lines to the buffer
459 Note that the option of supplying a list of strings to
460 the append method differs from the equivalent method
461 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200462 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000463 b.mark(name) Return a tuple (row,col) representing the position
464 of the named mark (can also get the []"<> marks)
465 b.range(s,e) Return a range object (see |python-range|) which
466 represents the part of the given buffer between line
467 numbers s and e |inclusive|.
468
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000469Note that when adding a line it must not contain a line break character '\n'.
470A trailing '\n' is allowed and ignored, so that you can do: >
471 :py b.append(f.readlines())
472
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200473Buffer object type is available using "Buffer" attribute of vim module.
474
Bram Moolenaar071d4272004-06-13 20:20:40 +0000475Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000476 :py print b.name # write the buffer file name
477 :py b[0] = "hello!!!" # replace the top line
478 :py b[:] = None # delete the whole buffer
479 :py del b[:] # delete the whole buffer
480 :py b[0:0] = [ "a line" ] # add a line at the top
481 :py del b[2] # delete a line (the third)
482 :py b.append("bottom") # add a line at the bottom
483 :py n = len(b) # number of lines
484 :py (row,col) = b.mark('a') # named mark
485 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200486 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200487 :py b.options["ff"] = "dos" # set fileformat
488 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000489
490==============================================================================
4914. Range objects *python-range*
492
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000493Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000494number of ways:
495 - via vim.current.range (|python-current|)
496 - from a buffer's range() method (|python-buffer|)
497
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000498A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000499all operations are restricted to the lines within the range (this line range
500can, of course, change as a result of slice assignments, line deletions, or
501the range.append() method).
502
503The range object attributes are:
504 r.start Index of first line into the buffer
505 r.end Index of last line into the buffer
506
507The range object methods are:
508 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200509 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000510 r.append(list) Append a list of lines to the range
511 Note that the option of supplying a list of strings to
512 the append method differs from the equivalent method
513 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200514 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000515
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200516Range object type is available using "Range" attribute of vim module.
517
Bram Moolenaar071d4272004-06-13 20:20:40 +0000518Example (assume r is the current range):
519 # Send all lines in a range to the default printer
520 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
521
522==============================================================================
5235. Window objects *python-window*
524
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000525Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526 - via vim.current.window (|python-current|)
527 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200528 - from indexing "windows" attribute of a tab page (|python-tabpage|)
529 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000530
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000531You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532methods, and no sequence or other interface.
533
534Window attributes are:
535 buffer (read-only) The buffer displayed in this window
536 cursor (read-write) The current cursor position in the window
537 This is a tuple, (row,col).
538 height (read-write) The window height, in rows
539 width (read-write) The window width, in columns
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100540 vars (read-only) The window |w:| variables. Attribute is
541 unassignable, but you can change window
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200542 variables this way
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100543 options (read-only) The window-local options. Attribute is
544 unassignable, but you can change window
545 options this way. Provides access only to
546 window-local options, for buffer-local use
547 |python-buffer| and for global ones use
548 |python-options|. If option is |global-local|
549 and local value is missing getting it will
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200550 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200551 number (read-only) Window number. The first window has number 1.
552 This is zero in case it cannot be determined
553 (e.g. when the window object belongs to other
554 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200555 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200556 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200557 tabpage (read-only) Window tab page.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100558 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200559 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200560
Bram Moolenaar071d4272004-06-13 20:20:40 +0000561The height attribute is writable only if the screen is split horizontally.
562The width attribute is writable only if the screen is split vertically.
563
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200564Window object type is available using "Window" attribute of vim module.
565
Bram Moolenaar071d4272004-06-13 20:20:40 +0000566==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005676. Tab page objects *python-tabpage*
568
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100569Tab page objects represent vim tab pages. You can obtain them in a number of
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200570ways:
571 - via vim.current.tabpage (|python-current|)
572 - from indexing vim.tabpages (|python-tabpages|)
573
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100574You can use this object to access tab page windows. They have no methods and
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200575no sequence or other interfaces.
576
577Tab page attributes are:
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100578 number The tab page number like the one returned by
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200579 |tabpagenr()|.
580 windows Like |python-windows|, but for current tab page.
581 vars The tab page |t:| variables.
582 window Current tabpage window.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100583 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200584 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200585
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200586TabPage object type is available using "TabPage" attribute of vim module.
587
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200588==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005897. vim.bindeval objects *python-bindeval-objects*
590
591vim.Dictionary object *python-Dictionary*
592 Dictionary-like object providing access to vim |Dictionary| type.
593 Attributes:
594 Attribute Description ~
595 locked One of *python-.locked*
596 Value Description ~
597 zero Variable is not locked
598 vim.VAR_LOCKED Variable is locked, but can be unlocked
599 vim.VAR_FIXED Variable is locked and can't be unlocked
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100600 Read-write. You can unlock locked variable by assigning
601 `True` or `False` to this attribute. No recursive locking
Bram Moolenaara9922d62013-05-30 13:01:18 +0200602 is supported.
603 scope One of
604 Value Description ~
605 zero Dictionary is not a scope one
606 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
607 vim.VAR_SCOPE Other scope dictionary,
608 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200609 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200610 Method Description ~
611 keys() Returns a list with dictionary keys.
612 values() Returns a list with dictionary values.
613 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200614 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200615 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200616 get(key[, default=None])
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100617 Obtain key from dictionary, returning the default if it is
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200618 not present.
619 pop(key[, default])
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100620 Remove specified key from dictionary and return
621 corresponding value. If key is not found and default is
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200622 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200623 popitem()
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100624 Remove random key from dictionary and return (key, value)
Bram Moolenaarde71b562013-06-02 17:41:54 +0200625 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200626 has_key(key)
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100627 Check whether dictionary contains specified key, similar
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200628 to `key in dict`.
629
630 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100631 You can use `vim.Dictionary()` to create new vim
632 dictionaries. `d=vim.Dictionary(arg)` is the same as
633 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200634 constructs empty dictionary.
635
Bram Moolenaara9922d62013-05-30 13:01:18 +0200636 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200637 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200638 d['a'] = 'b' # Item assignment
639 print d['a'] # getting item
640 d.update({'c': 'd'}) # .update(dictionary)
641 d.update(e='f') # .update(**kwargs)
642 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
643 for key in d.keys(): # .keys()
644 for val in d.values(): # .values()
645 for key, val in d.items(): # .items()
646 print isinstance(d, vim.Dictionary) # True
647 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200648 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200649<
650 Note: when iterating over keys you should not modify dictionary.
651
652vim.List object *python-List*
653 Sequence-like object providing access to vim |List| type.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100654 Supports `.locked` attribute, see |python-.locked|. Also supports the
Bram Moolenaara9922d62013-05-30 13:01:18 +0200655 following methods:
656 Method Description ~
657 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200658
659 __new__(), __new__(iterable)
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100660 You can use `vim.List()` to create new vim lists.
661 `l=vim.List(iterable)` is the same as
662 `l=vim.bindeval('[]');l.extend(iterable)`. Without
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200663 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200664 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200665 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200666 l.extend(['abc', 'def']) # .extend() method
667 print l[1:] # slicing
668 l[:0] = ['ghi', 'jkl'] # slice assignment
669 print l[0] # getting item
670 l[0] = 'mno' # assignment
671 for i in l: # iteration
672 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200673 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200674
675vim.Function object *python-Function*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100676 Function-like object, acting like vim |Funcref| object. Accepts special
677 keyword argument `self`, see |Dictionary-function|. You can also use
678 `vim.Function(name)` constructor, it is the same as
Bram Moolenaar8110a092016-04-14 15:56:09 +0200679 `vim.bindeval('function(%s)'%json.dumps(name))`.
680
681 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200682 Attribute Description ~
683 name Function name.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100684 args `None` or a |python-List| object with arguments. Note
685 that this is a copy of the arguments list, constructed
686 each time you request this attribute. Modifications made
687 to the list will be ignored (but not to the containers
688 inside argument list: this is like |copy()| and not
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200689 |deepcopy()|).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100690 self `None` or a |python-Dictionary| object with self
691 dictionary. Note that explicit `self` keyword used when
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200692 calling resulting object overrides this attribute.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100693 auto_rebind Boolean. True if partial created from this Python object
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100694 and stored in the Vim script dictionary should be
695 automatically rebound to the dictionary it is stored in
696 when this dictionary is indexed. Exposes Vim internal
697 difference between `dict.func` (auto_rebind=True) and
698 `function(dict.func,dict)` (auto_rebind=False). This
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200699 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200700
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100701 Constructor additionally accepts `args`, `self` and `auto_rebind`
702 keywords. If `args` and/or `self` argument is given then it constructs
703 a partial, see |function()|. `auto_rebind` is only used when `self`
704 argument is given, otherwise it is assumed to be `True` regardless of
705 whether it was given or not. If `self` is given then it defaults to
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200706 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200707
Bram Moolenaara9922d62013-05-30 13:01:18 +0200708 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200709 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200710 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
711 vim.command('''
712 function DictFun() dict
713 return self
714 endfunction
715 ''')
716 f = vim.bindeval('function("DictFun")')
717 print f(self={}) # Like call('DictFun', [], {})
718 print isinstance(f, vim.Function) # True
719
Bram Moolenaar8110a092016-04-14 15:56:09 +0200720 p = vim.Function('DictFun', self={})
721 print f()
722 p = vim.Function('tr', args=['abc', 'a'])
723 print f('b')
724
Bram Moolenaara9922d62013-05-30 13:01:18 +0200725==============================================================================
7268. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200727
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100728To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100729functions to evaluate Python expressions and pass their values to Vim script.
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100730|pyxeval()| is also available.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200731
Bram Moolenaarde323092017-11-09 19:56:08 +0100732The Python value "None" is converted to v:none.
733
Bram Moolenaar30b65812012-07-12 22:01:11 +0200734==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007359. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000736
Bram Moolenaard94464e2015-11-02 15:28:18 +0100737On MS-Windows and Unix the Python library can be loaded dynamically. The
738|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000739
Bram Moolenaard94464e2015-11-02 15:28:18 +0100740This means that Vim will search for the Python DLL or shared library file only
741when needed. When you don't use the Python interface you don't need it, thus
742you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000743
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100744
745MS-Windows ~
746
747To use the Python interface the Python DLL must be in your search path. In a
748console window type "path" to see what directories are used. The 'pythondll'
749or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000750
Bram Moolenaar3df01732017-02-17 22:47:16 +0100751The name of the DLL should match the Python version Vim was compiled with.
752Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
Bram Moolenaar59eb0162017-12-10 18:17:44 +0100753That is the default value for 'pythondll'. For Python 3 it is python36.dll
754(Python 3.6). To know for sure edit "gvim.exe" and search for
Bram Moolenaar3df01732017-02-17 22:47:16 +0100755"python\d*.dll\c".
Bram Moolenaara5792f52005-11-23 21:25:05 +0000756
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100757
758Unix ~
759
760The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
761shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
762what were specified at compile time. The version of the shared library must
763match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100764
Bram Moolenaara5792f52005-11-23 21:25:05 +0000765==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020076610. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200767
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200768 *:py3* *:python3*
Bram Moolenaar91359012019-11-30 17:57:03 +0100769:[range]py3 {stmt}
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200770:[range]py3 << [trim] [{endmarker}]
Bram Moolenaar91359012019-11-30 17:57:03 +0100771{script}
772{endmarker}
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200773
Bram Moolenaar91359012019-11-30 17:57:03 +0100774:[range]python3 {stmt}
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200775:[range]python3 << [trim] [{endmarker}]
Bram Moolenaar91359012019-11-30 17:57:03 +0100776{script}
777{endmarker}
778 The `:py3` and `:python3` commands work similar to `:python`. A
779 simple check if the `:py3` command is working: >
780 :py3 print("Hello")
781<
782 To see what version of Python you have: >
783 :py3 import sys
784 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200785< *:py3file*
Bram Moolenaar91359012019-11-30 17:57:03 +0100786:[range]py3f[ile] {file}
787 The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200788 *:py3do*
Bram Moolenaar91359012019-11-30 17:57:03 +0100789:[range]py3do {body}
790 The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200791
Bram Moolenaar30b65812012-07-12 22:01:11 +0200792
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200793Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007941. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007952. Python 2 support only (+python or +python/dyn, -python3)
7963. Python 3 support only (-python, +python3 or +python3/dyn)
7974. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200798
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200799Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200800
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200801When Python 2 and Python 3 are both supported they must be loaded dynamically.
802
803When doing this on Linux/Unix systems and importing global symbols, this leads
804to a crash when the second Python version is used. So either global symbols
805are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200806loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200807symbols to be provided by Vim.
808 *E836* *E837*
809Vim's configuration script makes a guess for all libraries based on one
810standard Python library (termios). If importing this library succeeds for
811both Python versions, then both will be made available in Vim at the same
812time. If not, only the version first used in a session will be enabled.
813When trying to use the other one you will get the E836 or E837 error message.
814
815Here Vim's behavior depends on the system in which it was configured. In a
816system where both versions of Python were configured with --enable-shared,
817both versions of Python will be activated at the same time. There will still
818be problems with other third party libraries that were not linked to
819libPython.
820
821To work around such problems there are these options:
8221. The problematic library is recompiled to link to the according
823 libpython.so.
8242. Vim is recompiled for only one Python version.
8253. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
826 may crash Vim though.
827
Bram Moolenaar41009372013-07-01 22:03:04 +0200828 *E880*
829Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
830 :py vim.command("qall!")
831<
832
Bram Moolenaar446beb42011-05-10 17:18:44 +0200833 *has-python*
834You can test what Python version is available with: >
835 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200836 echo 'there is Python 2.x'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100837 endif
838 if has('python3')
Bram Moolenaar446beb42011-05-10 17:18:44 +0200839 echo 'there is Python 3.x'
840 endif
841
842Note however, that when Python 2 and 3 are both available and loaded
843dynamically, these has() calls will try to load them. If only one can be
844loaded at a time, just checking if Python 2 or 3 are available will prevent
845the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200846
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100847To avoid loading the dynamic library, only check if Vim was compiled with
848python support: >
849 if has('python_compiled')
850 echo 'compiled with Python 2.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100851 if has('python_dynamic')
852 echo 'Python 2.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100853 endif
854 endif
855 if has('python3_compiled')
856 echo 'compiled with Python 3.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100857 if has('python3_dynamic')
858 echo 'Python 3.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100859 endif
860 endif
861
862This also tells you whether Python is dynamically loaded, which will fail if
863the runtime library cannot be found.
864
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200865==============================================================================
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010086611. Python X *python_x* *pythonx*
867
868Because most python code can be written so that it works with python 2.6+ and
Bram Moolenaar214641f2017-03-05 17:04:09 +0100869python 3 the pyx* functions and commands have been written. They work exactly
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100870the same as the Python 2 and 3 variants, but select the Python version using
871the 'pyxversion' setting.
872
873You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
874for Python commands. If you change this setting at runtime you may risk that
875state of plugins (such as initialization) may be lost.
876
877If you want to use a module, you can put it in the {rtp}/pythonx directory.
878See |pythonx-directory|.
879
880 *:pyx* *:pythonx*
881The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
882if the `:pyx` command is working: >
883 :pyx print("Hello")
884
885To see what version of Python is being used: >
886 :pyx import sys
887 :pyx print(sys.version)
888<
889 *:pyxfile* *python_x-special-comments*
890The `:pyxfile` command works similar to `:pyfile`. However you can add one of
891these comments to force Vim using `:pyfile` or `:py3file`: >
892 #!/any string/python2 " Shebang. Must be the first line of the file.
893 #!/any string/python3 " Shebang. Must be the first line of the file.
894 # requires python 2.x " Maximum lines depend on 'modelines'.
895 # requires python 3.x " Maximum lines depend on 'modelines'.
896Unlike normal modelines, the bottom of the file is not checked.
897If none of them are found, the 'pyxversion' setting is used.
898 *W20* *W21*
899If Vim does not support the selected Python version a silent message will be
900printed. Use `:messages` to read them.
901
902 *:pyxdo*
903The `:pyxdo` command works similar to `:pydo`.
904
905 *has-pythonx*
906You can test if pyx* commands are available with: >
907 if has('pythonx')
908 echo 'pyx* commands are available. (Python ' . &pyx . ')'
909 endif
910
911When compiled with only one of |+python| or |+python3|, the has() returns 1.
912When compiled with both |+python| and |+python3|, the test depends on the
913'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
914it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
915Python 2 or 3 respectively.
916
Bram Moolenaar214641f2017-03-05 17:04:09 +0100917Note that for `has('pythonx')` to work it may try to dynamically load Python 3
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100918or 2. This may have side effects, especially when Vim can only load one of
919the two.
920
921If a user prefers Python 2 and want to fallback to Python 3, he needs to set
922'pyxversion' explicitly in his |.vimrc|. E.g.: >
923 if has('python')
924 set pyx=2
925 elseif has('python3')
926 set pyx=3
927 endif
928
929==============================================================================
Bram Moolenaar036986f2017-03-16 17:41:02 +010093012. Building with Python support *python-building*
931
932A few hints for building with Python 2 or 3 support.
933
934UNIX
935
936See src/Makefile for how to enable including the Python interface.
937
938On Ubuntu you will want to install these packages for Python 2:
939 python
940 python-dev
941For Python 3:
942 python3
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200943 python3-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100944For Python 3.6:
945 python3.6
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200946 python3.6-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100947
948If you have more than one version of Python 3, you need to link python3 to the
949one you prefer, before running configure.
950
951==============================================================================
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200952 vim:tw=78:ts=8:noet:ft=help:norl: