blob: 19b8b67cb7e713abe630799669547a1ace04c080 [file] [log] [blame]
Bram Moolenaar9da17d72022-02-09 21:50:44 +00001*if_pyth.txt* For Vim version 8.2. Last change: 2022 Feb 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 Moolenaar519cc552021-11-16 19:18:26 +000066 *python-environment*
67Environment variables set in Vim are not always available in Python. This
Bram Moolenaar9da17d72022-02-09 21:50:44 +000068depends on how Vim and Python were built. Also see
Bram Moolenaar519cc552021-11-16 19:18:26 +000069https://docs.python.org/3/library/os.html#os.environ
70
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010071Note: Python is very sensitive to the indenting. Make sure the "class" line
72and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000073
Bram Moolenaard620aa92013-05-17 16:40:06 +020074 *:pydo*
75:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
76 {body}" for each line in the [range], with the
77 function arguments being set to the text of each line
78 in turn, without a trailing <EOL>, and the current
79 line number. The function should return a string or
80 None. If a string is returned, it becomes the text of
81 the line in the current turn. The default for [range]
82 is the whole file: "1,$".
Bram Moolenaard620aa92013-05-17 16:40:06 +020083
84Examples:
85>
86 :pydo return "%s\t%d" % (line[::-1], len(line))
87 :pydo if line: return "%4d: %s" % (linenr, line)
88<
Bram Moolenaar20aac6c2018-09-02 21:07:30 +020089One can use `:pydo` in possible conjunction with `:py` to filter a range using
90python. For example: >
91
92 :py3 << EOF
93 needle = vim.eval('@a')
94 replacement = vim.eval('@b')
95
96 def py_vim_string_replace(str):
97 return str.replace(needle, replacement)
98 EOF
99 :'<,'>py3do return py_vim_string_replace(line)
100<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101 *:pyfile* *:pyf*
102:[range]pyf[ile] {file}
103 Execute the Python script in {file}. The whole
Bram Moolenaar25c9c682019-05-05 18:13:34 +0200104 argument is used as a single file name.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105
106Both of these commands do essentially the same thing - they execute a piece of
107Python code, with the "current range" |python-range| set to the given line
108range.
109
110In the case of :python, the code to execute is in the command-line.
111In the case of :pyfile, the code to execute is the contents of the given file.
112
113Python commands cannot be used in the |sandbox|.
114
115To pass arguments you need to set sys.argv[] explicitly. Example: >
116
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117 :python sys.argv = ["foo", "bar"]
118 :pyfile myscript.py
119
120Here are some examples *python-examples* >
121
122 :python from vim import *
123 :python from string import upper
124 :python current.line = upper(current.line)
125 :python print "Hello"
126 :python str = current.buffer[42]
127
128(Note that changes - like the imports - persist from one command to the next,
129just like in the Python interpreter.)
130
131==============================================================================
1322. The vim module *python-vim*
133
134Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000135|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136methods, three constants, and one error object. You need to import the vim
137module before using it: >
138 :python import vim
139
140Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000141 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100142 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000143 :py w = vim.windows[n] # gets window "n"
144 :py cw = vim.current.window # gets the current window
145 :py b = vim.buffers[n] # gets buffer "n"
146 :py cb = vim.current.buffer # gets the current buffer
147 :py w.height = lines # sets the window height
148 :py w.cursor = (row, col) # sets the window cursor position
149 :py pos = w.cursor # gets a tuple (row, col)
150 :py name = b.name # gets the buffer file name
151 :py line = b[n] # gets a line from the buffer
152 :py lines = b[n:m] # gets a list of lines
153 :py num = len(b) # gets the number of lines
154 :py b[n] = str # sets a line in the buffer
155 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
156 :py del b[n] # deletes a line
157 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158
159
160Methods of the "vim" module
161
162vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000163 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000165 :py vim.command("set tw=72")
166 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167< The following definition executes Normal mode commands: >
168 def normal(str):
169 vim.command("normal "+str)
170 # Note the use of single quotes to delimit a string containing
171 # double quotes
172 normal('"a2dd"aP')
173< *E659*
174 The ":python" command cannot be used recursively with Python 2.2 and
175 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000176 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177
178vim.eval(str) *python-eval*
179 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000180 evaluator (see |expression|). Returns the expression result as:
181 - a string if the Vim expression evaluates to a string or number
182 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000183 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000184 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 Examples: >
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200186 :" value of the 'textwidth' option
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000187 :py text_width = vim.eval("&tw")
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200188 :
189 :" contents of the 'a' register
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100190 :py a_reg = vim.eval("@a")
Bram Moolenaarfc65cab2018-08-28 22:58:02 +0200191 :
192 :" Result is a string! Use string.atoi() to convert to a number.
193 :py str = vim.eval("12+12")
194 :
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000195 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000196< The latter will return a python list of python dicts, for instance:
Bram Moolenaar214641f2017-03-05 17:04:09 +0100197 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
198 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000199
Bram Moolenaar30b65812012-07-12 22:01:11 +0200200vim.bindeval(str) *python-bindeval*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100201 Like |python-eval|, but returns special objects described in
202 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200203 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000204
Bram Moolenaarbc411962013-06-02 17:46:40 +0200205vim.strwidth(str) *python-strwidth*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100206 Like |strwidth()|: returns number of display cells str occupies, tab
Bram Moolenaarbc411962013-06-02 17:46:40 +0200207 is counted as one cell.
208
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200209vim.foreach_rtp(callable) *python-foreach_rtp*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100210 Call the given callable for each path in 'runtimepath' until either
211 callable returns something but None, the exception is raised or there
212 are no longer paths. If stopped in case callable returned non-None,
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200213 vim.foreach_rtp function returns the value returned by callable.
214
Bram Moolenaarf4258302013-06-02 18:20:17 +0200215vim.chdir(*args, **kwargs) *python-chdir*
216vim.fchdir(*args, **kwargs) *python-fchdir*
217 Run os.chdir or os.fchdir, then all appropriate vim stuff.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100218 Note: you should not use these functions directly, use os.chdir and
219 os.fchdir instead. Behavior of vim.fchdir is undefined in case
Bram Moolenaarf4258302013-06-02 18:20:17 +0200220 os.fchdir does not exist.
221
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222Error object of the "vim" module
223
224vim.error *python-error*
225 Upon encountering a Vim error, Python raises an exception of type
226 vim.error.
227 Example: >
228 try:
229 vim.command("put a")
230 except vim.error:
231 # nothing in register a
232
233Constants of the "vim" module
234
235 Note that these are not actually constants - you could reassign them.
236 But this is silly, as you would then lose access to the vim objects
237 to which the variables referred.
238
239vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200240 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000242 :py b = vim.buffers[i] # Indexing (read-only)
243 :py b in vim.buffers # Membership test
244 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200245 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000246<
247vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000248 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000250 :py w = vim.windows[i] # Indexing (read-only)
251 :py w in vim.windows # Membership test
252 :py n = len(vim.windows) # Number of elements
253 :py for w in vim.windows: # Sequential access
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100254< Note: vim.windows object always accesses current tab page.
255 |python-tabpage|.windows objects are bound to parent |python-tabpage|
256 object and always use windows from that tab page (or throw vim.error
257 in case tab page was deleted). You can keep a reference to both
258 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200259 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200260
261vim.tabpages *python-tabpages*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100262 A sequence object providing access to the list of vim tab pages. The
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200263 object supports the following operations: >
264 :py t = vim.tabpages[i] # Indexing (read-only)
265 :py t in vim.tabpages # Membership test
266 :py n = len(vim.tabpages) # Number of elements
267 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268<
269vim.current *python-current*
270 An object providing access (via specific attributes) to various
271 "current" objects available in vim:
272 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200273 vim.current.buffer The current buffer (RW) Buffer
274 vim.current.window The current window (RW) Window
275 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276 vim.current.range The current line range (RO) Range
277
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000278 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000280 "current range". A range is a bit like a buffer, but with all access
281 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100283 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
284 valid |python-buffer|, |python-window| or |python-tabpage| objects
285 respectively. Assigning triggers normal (with |autocommand|s)
286 switching to given buffer, window or tab page. It is the only way to
287 switch UI objects in python: you can't assign to
288 |python-tabpage|.window attribute. To switch without triggering
Bram Moolenaare7614592013-05-15 15:51:08 +0200289 autocommands use >
290 py << EOF
291 saved_eventignore = vim.options['eventignore']
292 vim.options['eventignore'] = 'all'
293 try:
294 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
295 finally:
296 vim.options['eventignore'] = saved_eventignore
297 EOF
298<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200299vim.vars *python-vars*
300vim.vvars *python-vvars*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100301 Dictionary-like objects holding dictionaries with global (|g:|) and
302 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200303 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000304
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200305vim.options *python-options*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100306 Object partly supporting mapping protocol (supports setting and
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200307 getting items) providing a read-write access to global options.
308 Note: unlike |:set| this provides access only to global options. You
309 cannot use this object to obtain or set local options' values or
310 access local-only options in any fashion. Raises KeyError if no global
311 option with such name exists (i.e. does not raise KeyError for
312 |global-local| options and global only options, but does for window-
313 and buffer-local ones). Use |python-buffer| objects to access to
314 buffer-local options and |python-window| objects to access to
315 window-local options.
316
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100317 Type of this object is available via "Options" attribute of vim
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200318 module.
319
Bram Moolenaar071d4272004-06-13 20:20:40 +0000320Output from Python *python-output*
321 Vim displays all Python code output in the Vim message area. Normal
322 output appears as information messages, and error output appears as
323 error messages.
324
325 In implementation terms, this means that all output to sys.stdout
326 (including the output from print statements) appears as information
327 messages, and all output to sys.stderr (including error tracebacks)
328 appears as error messages.
329
330 *python-input*
331 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000332 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000333 fixed.
334
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200335 *python2-directory* *python3-directory* *pythonx-directory*
336Python 'runtimepath' handling *python-special-path*
337
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100338In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
339the list of paths found in 'runtimepath': with this directory in sys.path and
340vim.path_hooks in sys.path_hooks python will try to load module from
341{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200342each {rtp} found in 'runtimepath'.
343
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200344Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200345
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200346 from imp import find_module, load_module
347 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200348 import sys
349
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200350 class VimModuleLoader(object):
351 def __init__(self, module):
352 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200353
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200354 def load_module(self, fullname, path=None):
355 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200356
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200357 def _find_module(fullname, oldtail, path):
358 idx = oldtail.find('.')
359 if idx > 0:
360 name = oldtail[:idx]
361 tail = oldtail[idx+1:]
362 fmr = find_module(name, path)
363 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
364 return _find_module(fullname, tail, module.__path__)
365 else:
366 fmr = find_module(fullname, path)
367 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200368
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100369 # It uses vim module itself in place of VimPathFinder class: it does not
370 # matter for python which object has find_module function attached to as
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200371 # an attribute.
372 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200373 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200374 def find_module(cls, fullname, path=None):
375 try:
376 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
377 except ImportError:
378 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200379
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200380 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200381 def load_module(cls, fullname, path=None):
382 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200383
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200384 def hook(path):
385 if path == vim.VIM_SPECIAL_PATH:
386 return VimPathFinder
387 else:
388 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200389
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200390 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200391
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200392vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100393 String constant used in conjunction with vim path hook. If path hook
394 installed by vim is requested to handle anything but path equal to
395 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200396 case it uses special loader.
397
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100398 Note: you must not use value of this constant directly, always use
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200399 vim.VIM_SPECIAL_PATH object.
400
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200401vim.find_module(...) *python-find_module*
402vim.path_hook(path) *python-path_hook*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100403 Methods or objects used to implement path loading as described above.
404 You should not be using any of these directly except for vim.path_hook
405 in case you need to do something with sys.meta_path. It is not
406 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200407 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200408
409vim._get_paths *python-_get_paths*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100410 Methods returning a list of paths which will be searched for by path
411 hook. You should not rely on this method being present in future
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200412 versions, but can use it for debugging.
413
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100414 It returns a list of {rtp}/python2 (or {rtp}/python3) and
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200415 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
416
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417==============================================================================
4183. Buffer objects *python-buffer*
419
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000420Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421 - via vim.current.buffer (|python-current|)
422 - from indexing vim.buffers (|python-buffers|)
423 - from the "buffer" attribute of a window (|python-window|)
424
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100425Buffer objects have two read-only attributes - name - the full file name for
426the buffer, and number - the buffer number. They also have three methods
427(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000428
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000429You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000431element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000432including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000433you would expect. Note that the result of indexing (slicing) a buffer is a
434string (list of strings). This has one unusual consequence - b[:] is different
435from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000436"b = None" merely updates the variable b, with no effect on the buffer.
437
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000438Buffer indexes start at zero, as is normal in Python. This differs from vim
439line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000440with marks (see below) which use vim line numbers.
441
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200442The buffer object attributes are:
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100443 b.vars Dictionary-like object used to access
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200444 |buffer-variable|s.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100445 b.options Mapping object (supports item getting, setting and
446 deleting) that provides access to buffer-local options
447 and buffer-local values of |global-local| options. Use
448 |python-window|.options if option is window-local,
449 this object will raise KeyError. If option is
450 |global-local| and local value is missing getting it
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200451 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200452 b.name String, RW. Contains buffer name (full path).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100453 Note: when assigning to b.name |BufFilePre| and
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200454 |BufFilePost| autocommands are launched.
455 b.number Buffer number. Can be used as |python-buffers| key.
456 Read-only.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100457 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200458 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200459
Bram Moolenaar071d4272004-06-13 20:20:40 +0000460The buffer object methods are:
461 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200462 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000463 b.append(list) Append a list of lines to the buffer
464 Note that the option of supplying a list of strings to
465 the append method differs from the equivalent method
466 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200467 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000468 b.mark(name) Return a tuple (row,col) representing the position
469 of the named mark (can also get the []"<> marks)
470 b.range(s,e) Return a range object (see |python-range|) which
471 represents the part of the given buffer between line
472 numbers s and e |inclusive|.
473
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000474Note that when adding a line it must not contain a line break character '\n'.
475A trailing '\n' is allowed and ignored, so that you can do: >
476 :py b.append(f.readlines())
477
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200478Buffer object type is available using "Buffer" attribute of vim module.
479
Bram Moolenaar071d4272004-06-13 20:20:40 +0000480Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000481 :py print b.name # write the buffer file name
482 :py b[0] = "hello!!!" # replace the top line
483 :py b[:] = None # delete the whole buffer
484 :py del b[:] # delete the whole buffer
485 :py b[0:0] = [ "a line" ] # add a line at the top
486 :py del b[2] # delete a line (the third)
487 :py b.append("bottom") # add a line at the bottom
488 :py n = len(b) # number of lines
489 :py (row,col) = b.mark('a') # named mark
490 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200491 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200492 :py b.options["ff"] = "dos" # set fileformat
493 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000494
495==============================================================================
4964. Range objects *python-range*
497
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000498Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000499number of ways:
500 - via vim.current.range (|python-current|)
501 - from a buffer's range() method (|python-buffer|)
502
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000503A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000504all operations are restricted to the lines within the range (this line range
505can, of course, change as a result of slice assignments, line deletions, or
506the range.append() method).
507
508The range object attributes are:
509 r.start Index of first line into the buffer
510 r.end Index of last line into the buffer
511
512The range object methods are:
513 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200514 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000515 r.append(list) Append a list of lines to the range
516 Note that the option of supplying a list of strings to
517 the append method differs from the equivalent method
518 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200519 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000520
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200521Range object type is available using "Range" attribute of vim module.
522
Bram Moolenaar071d4272004-06-13 20:20:40 +0000523Example (assume r is the current range):
524 # Send all lines in a range to the default printer
525 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
526
527==============================================================================
5285. Window objects *python-window*
529
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000530Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000531 - via vim.current.window (|python-current|)
532 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200533 - from indexing "windows" attribute of a tab page (|python-tabpage|)
534 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000535
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000536You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000537methods, and no sequence or other interface.
538
539Window attributes are:
540 buffer (read-only) The buffer displayed in this window
541 cursor (read-write) The current cursor position in the window
542 This is a tuple, (row,col).
543 height (read-write) The window height, in rows
544 width (read-write) The window width, in columns
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100545 vars (read-only) The window |w:| variables. Attribute is
546 unassignable, but you can change window
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200547 variables this way
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100548 options (read-only) The window-local options. Attribute is
549 unassignable, but you can change window
550 options this way. Provides access only to
551 window-local options, for buffer-local use
552 |python-buffer| and for global ones use
553 |python-options|. If option is |global-local|
554 and local value is missing getting it will
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200555 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200556 number (read-only) Window number. The first window has number 1.
557 This is zero in case it cannot be determined
558 (e.g. when the window object belongs to other
559 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200560 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200561 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200562 tabpage (read-only) Window tab page.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100563 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200564 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200565
Bram Moolenaar071d4272004-06-13 20:20:40 +0000566The height attribute is writable only if the screen is split horizontally.
567The width attribute is writable only if the screen is split vertically.
568
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200569Window object type is available using "Window" attribute of vim module.
570
Bram Moolenaar071d4272004-06-13 20:20:40 +0000571==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005726. Tab page objects *python-tabpage*
573
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100574Tab page objects represent vim tab pages. You can obtain them in a number of
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200575ways:
576 - via vim.current.tabpage (|python-current|)
577 - from indexing vim.tabpages (|python-tabpages|)
578
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100579You can use this object to access tab page windows. They have no methods and
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200580no sequence or other interfaces.
581
582Tab page attributes are:
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100583 number The tab page number like the one returned by
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200584 |tabpagenr()|.
585 windows Like |python-windows|, but for current tab page.
586 vars The tab page |t:| variables.
587 window Current tabpage window.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100588 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200589 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200590
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200591TabPage object type is available using "TabPage" attribute of vim module.
592
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200593==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005947. vim.bindeval objects *python-bindeval-objects*
595
596vim.Dictionary object *python-Dictionary*
597 Dictionary-like object providing access to vim |Dictionary| type.
598 Attributes:
599 Attribute Description ~
600 locked One of *python-.locked*
601 Value Description ~
602 zero Variable is not locked
603 vim.VAR_LOCKED Variable is locked, but can be unlocked
604 vim.VAR_FIXED Variable is locked and can't be unlocked
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100605 Read-write. You can unlock locked variable by assigning
606 `True` or `False` to this attribute. No recursive locking
Bram Moolenaara9922d62013-05-30 13:01:18 +0200607 is supported.
608 scope One of
609 Value Description ~
610 zero Dictionary is not a scope one
611 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
612 vim.VAR_SCOPE Other scope dictionary,
613 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200614 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200615 Method Description ~
616 keys() Returns a list with dictionary keys.
617 values() Returns a list with dictionary values.
618 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200619 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200620 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200621 get(key[, default=None])
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100622 Obtain key from dictionary, returning the default if it is
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200623 not present.
624 pop(key[, default])
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100625 Remove specified key from dictionary and return
626 corresponding value. If key is not found and default is
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200627 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200628 popitem()
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100629 Remove random key from dictionary and return (key, value)
Bram Moolenaarde71b562013-06-02 17:41:54 +0200630 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200631 has_key(key)
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100632 Check whether dictionary contains specified key, similar
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200633 to `key in dict`.
634
635 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100636 You can use `vim.Dictionary()` to create new vim
637 dictionaries. `d=vim.Dictionary(arg)` is the same as
638 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200639 constructs empty dictionary.
640
Bram Moolenaara9922d62013-05-30 13:01:18 +0200641 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200642 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200643 d['a'] = 'b' # Item assignment
644 print d['a'] # getting item
645 d.update({'c': 'd'}) # .update(dictionary)
646 d.update(e='f') # .update(**kwargs)
647 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
648 for key in d.keys(): # .keys()
649 for val in d.values(): # .values()
650 for key, val in d.items(): # .items()
651 print isinstance(d, vim.Dictionary) # True
652 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200653 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200654<
655 Note: when iterating over keys you should not modify dictionary.
656
657vim.List object *python-List*
658 Sequence-like object providing access to vim |List| type.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100659 Supports `.locked` attribute, see |python-.locked|. Also supports the
Bram Moolenaara9922d62013-05-30 13:01:18 +0200660 following methods:
661 Method Description ~
662 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200663
664 __new__(), __new__(iterable)
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100665 You can use `vim.List()` to create new vim lists.
666 `l=vim.List(iterable)` is the same as
667 `l=vim.bindeval('[]');l.extend(iterable)`. Without
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200668 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200669 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200670 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200671 l.extend(['abc', 'def']) # .extend() method
672 print l[1:] # slicing
673 l[:0] = ['ghi', 'jkl'] # slice assignment
674 print l[0] # getting item
675 l[0] = 'mno' # assignment
676 for i in l: # iteration
677 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200678 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200679
680vim.Function object *python-Function*
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100681 Function-like object, acting like vim |Funcref| object. Accepts special
682 keyword argument `self`, see |Dictionary-function|. You can also use
683 `vim.Function(name)` constructor, it is the same as
Bram Moolenaar8110a092016-04-14 15:56:09 +0200684 `vim.bindeval('function(%s)'%json.dumps(name))`.
685
686 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200687 Attribute Description ~
688 name Function name.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100689 args `None` or a |python-List| object with arguments. Note
690 that this is a copy of the arguments list, constructed
691 each time you request this attribute. Modifications made
692 to the list will be ignored (but not to the containers
693 inside argument list: this is like |copy()| and not
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200694 |deepcopy()|).
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100695 self `None` or a |python-Dictionary| object with self
696 dictionary. Note that explicit `self` keyword used when
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200697 calling resulting object overrides this attribute.
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100698 auto_rebind Boolean. True if partial created from this Python object
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100699 and stored in the Vim script dictionary should be
700 automatically rebound to the dictionary it is stored in
701 when this dictionary is indexed. Exposes Vim internal
702 difference between `dict.func` (auto_rebind=True) and
703 `function(dict.func,dict)` (auto_rebind=False). This
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200704 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200705
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100706 Constructor additionally accepts `args`, `self` and `auto_rebind`
707 keywords. If `args` and/or `self` argument is given then it constructs
708 a partial, see |function()|. `auto_rebind` is only used when `self`
709 argument is given, otherwise it is assumed to be `True` regardless of
710 whether it was given or not. If `self` is given then it defaults to
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200711 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200712
Bram Moolenaara9922d62013-05-30 13:01:18 +0200713 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200714 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200715 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
716 vim.command('''
717 function DictFun() dict
718 return self
719 endfunction
720 ''')
721 f = vim.bindeval('function("DictFun")')
722 print f(self={}) # Like call('DictFun', [], {})
723 print isinstance(f, vim.Function) # True
724
Bram Moolenaar8110a092016-04-14 15:56:09 +0200725 p = vim.Function('DictFun', self={})
726 print f()
727 p = vim.Function('tr', args=['abc', 'a'])
728 print f('b')
729
Bram Moolenaara9922d62013-05-30 13:01:18 +0200730==============================================================================
7318. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200732
Bram Moolenaar664f3cf2019-12-07 16:03:51 +0100733To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
Bram Moolenaarb544f3c2017-02-23 19:03:28 +0100734functions to evaluate Python expressions and pass their values to Vim script.
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100735|pyxeval()| is also available.
Bram Moolenaar30b65812012-07-12 22:01:11 +0200736
Bram Moolenaarde323092017-11-09 19:56:08 +0100737The Python value "None" is converted to v:none.
738
Bram Moolenaar30b65812012-07-12 22:01:11 +0200739==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007409. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000741
Bram Moolenaard94464e2015-11-02 15:28:18 +0100742On MS-Windows and Unix the Python library can be loaded dynamically. The
743|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000744
Bram Moolenaard94464e2015-11-02 15:28:18 +0100745This means that Vim will search for the Python DLL or shared library file only
746when needed. When you don't use the Python interface you don't need it, thus
747you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000748
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100749
750MS-Windows ~
751
752To use the Python interface the Python DLL must be in your search path. In a
753console window type "path" to see what directories are used. The 'pythondll'
754or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000755
Bram Moolenaar3df01732017-02-17 22:47:16 +0100756The name of the DLL should match the Python version Vim was compiled with.
757Currently the name for Python 2 is "python27.dll", that is for Python 2.7.
Bram Moolenaar59eb0162017-12-10 18:17:44 +0100758That is the default value for 'pythondll'. For Python 3 it is python36.dll
759(Python 3.6). To know for sure edit "gvim.exe" and search for
Bram Moolenaar3df01732017-02-17 22:47:16 +0100760"python\d*.dll\c".
Bram Moolenaara5792f52005-11-23 21:25:05 +0000761
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100762
763Unix ~
764
765The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
766shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
767what were specified at compile time. The version of the shared library must
768match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100769
Bram Moolenaara5792f52005-11-23 21:25:05 +0000770==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020077110. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200772
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200773 *:py3* *:python3*
Bram Moolenaar91359012019-11-30 17:57:03 +0100774:[range]py3 {stmt}
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200775:[range]py3 << [trim] [{endmarker}]
Bram Moolenaar91359012019-11-30 17:57:03 +0100776{script}
777{endmarker}
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200778
Bram Moolenaar91359012019-11-30 17:57:03 +0100779:[range]python3 {stmt}
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200780:[range]python3 << [trim] [{endmarker}]
Bram Moolenaar91359012019-11-30 17:57:03 +0100781{script}
782{endmarker}
783 The `:py3` and `:python3` commands work similar to `:python`. A
784 simple check if the `:py3` command is working: >
785 :py3 print("Hello")
786<
787 To see what version of Python you have: >
788 :py3 import sys
789 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200790< *:py3file*
Bram Moolenaar91359012019-11-30 17:57:03 +0100791:[range]py3f[ile] {file}
792 The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200793 *:py3do*
Bram Moolenaar91359012019-11-30 17:57:03 +0100794:[range]py3do {body}
795 The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200796
Bram Moolenaar30b65812012-07-12 22:01:11 +0200797
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200798Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007991. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02008002. Python 2 support only (+python or +python/dyn, -python3)
8013. Python 3 support only (-python, +python3 or +python3/dyn)
8024. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200803
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200804Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200805
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200806When Python 2 and Python 3 are both supported they must be loaded dynamically.
807
808When doing this on Linux/Unix systems and importing global symbols, this leads
809to a crash when the second Python version is used. So either global symbols
810are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200811loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200812symbols to be provided by Vim.
813 *E836* *E837*
814Vim's configuration script makes a guess for all libraries based on one
815standard Python library (termios). If importing this library succeeds for
816both Python versions, then both will be made available in Vim at the same
817time. If not, only the version first used in a session will be enabled.
818When trying to use the other one you will get the E836 or E837 error message.
819
820Here Vim's behavior depends on the system in which it was configured. In a
821system where both versions of Python were configured with --enable-shared,
822both versions of Python will be activated at the same time. There will still
823be problems with other third party libraries that were not linked to
824libPython.
825
826To work around such problems there are these options:
8271. The problematic library is recompiled to link to the according
828 libpython.so.
8292. Vim is recompiled for only one Python version.
8303. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
831 may crash Vim though.
832
Bram Moolenaar41009372013-07-01 22:03:04 +0200833 *E880*
834Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
835 :py vim.command("qall!")
836<
Bram Moolenaar9da17d72022-02-09 21:50:44 +0000837 *E1266*
838This error can occur when python 3 cannot load the required modules. This
839means that your python 3 is not correctly installed or there are some mistakes
840in your settings. Please check the following items:
8411. Make sure that python 3 is correctly installed. Also check the version of
842 python.
8432. Check the 'pythonthreedll' option.
8443. Check the 'pythonthreehome' option.
8454. Check the PATH environment variable if you don't set 'pythonthreedll'.
846 On MS-Windows, you can use where.exe to check which dll will be loaded.
847 E.g. >
848 where.exe python310.dll
8495. Check the PYTHONPATH and PYTHONHOME environment variables.
Bram Moolenaar41009372013-07-01 22:03:04 +0200850
Bram Moolenaar446beb42011-05-10 17:18:44 +0200851 *has-python*
852You can test what Python version is available with: >
853 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200854 echo 'there is Python 2.x'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100855 endif
856 if has('python3')
Bram Moolenaar446beb42011-05-10 17:18:44 +0200857 echo 'there is Python 3.x'
858 endif
859
860Note however, that when Python 2 and 3 are both available and loaded
861dynamically, these has() calls will try to load them. If only one can be
862loaded at a time, just checking if Python 2 or 3 are available will prevent
863the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200864
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100865To avoid loading the dynamic library, only check if Vim was compiled with
866python support: >
867 if has('python_compiled')
868 echo 'compiled with Python 2.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100869 if has('python_dynamic')
870 echo 'Python 2.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100871 endif
872 endif
873 if has('python3_compiled')
874 echo 'compiled with Python 3.x support'
Bram Moolenaar72540672018-02-09 22:00:53 +0100875 if has('python3_dynamic')
876 echo 'Python 3.x dynamically loaded'
Bram Moolenaar40962ec2018-01-28 22:47:25 +0100877 endif
878 endif
879
880This also tells you whether Python is dynamically loaded, which will fail if
881the runtime library cannot be found.
882
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200883==============================================================================
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010088411. Python X *python_x* *pythonx*
885
886Because most python code can be written so that it works with python 2.6+ and
Bram Moolenaar214641f2017-03-05 17:04:09 +0100887python 3 the pyx* functions and commands have been written. They work exactly
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100888the same as the Python 2 and 3 variants, but select the Python version using
889the 'pyxversion' setting.
890
891You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3
892for Python commands. If you change this setting at runtime you may risk that
893state of plugins (such as initialization) may be lost.
894
895If you want to use a module, you can put it in the {rtp}/pythonx directory.
896See |pythonx-directory|.
897
898 *:pyx* *:pythonx*
899The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check
900if the `:pyx` command is working: >
901 :pyx print("Hello")
902
903To see what version of Python is being used: >
904 :pyx import sys
905 :pyx print(sys.version)
906<
907 *:pyxfile* *python_x-special-comments*
908The `:pyxfile` command works similar to `:pyfile`. However you can add one of
909these comments to force Vim using `:pyfile` or `:py3file`: >
910 #!/any string/python2 " Shebang. Must be the first line of the file.
911 #!/any string/python3 " Shebang. Must be the first line of the file.
912 # requires python 2.x " Maximum lines depend on 'modelines'.
913 # requires python 3.x " Maximum lines depend on 'modelines'.
914Unlike normal modelines, the bottom of the file is not checked.
915If none of them are found, the 'pyxversion' setting is used.
916 *W20* *W21*
917If Vim does not support the selected Python version a silent message will be
918printed. Use `:messages` to read them.
919
920 *:pyxdo*
921The `:pyxdo` command works similar to `:pydo`.
922
923 *has-pythonx*
924You can test if pyx* commands are available with: >
925 if has('pythonx')
926 echo 'pyx* commands are available. (Python ' . &pyx . ')'
927 endif
928
929When compiled with only one of |+python| or |+python3|, the has() returns 1.
930When compiled with both |+python| and |+python3|, the test depends on the
931'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if
932it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only
933Python 2 or 3 respectively.
934
Bram Moolenaar214641f2017-03-05 17:04:09 +0100935Note that for `has('pythonx')` to work it may try to dynamically load Python 3
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +0100936or 2. This may have side effects, especially when Vim can only load one of
937the two.
938
939If a user prefers Python 2 and want to fallback to Python 3, he needs to set
940'pyxversion' explicitly in his |.vimrc|. E.g.: >
941 if has('python')
942 set pyx=2
943 elseif has('python3')
944 set pyx=3
945 endif
946
947==============================================================================
Bram Moolenaar036986f2017-03-16 17:41:02 +010094812. Building with Python support *python-building*
949
950A few hints for building with Python 2 or 3 support.
951
952UNIX
953
954See src/Makefile for how to enable including the Python interface.
955
956On Ubuntu you will want to install these packages for Python 2:
957 python
958 python-dev
959For Python 3:
960 python3
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200961 python3-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100962For Python 3.6:
963 python3.6
Bram Moolenaar1ccd8ff2017-08-11 19:50:37 +0200964 python3.6-dev
Bram Moolenaar036986f2017-03-16 17:41:02 +0100965
966If you have more than one version of Python 3, you need to link python3 to the
967one you prefer, before running configure.
968
969==============================================================================
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200970 vim:tw=78:ts=8:noet:ft=help:norl: