blob: a94183f5b3ebcdb15b6cb133df685729001c9283 [file] [log] [blame]
Bram Moolenaarad3b3662013-05-17 18:14:19 +02001*if_pyth.txt* For Vim version 7.3. Last change: 2013 May 17
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|
146. pyeval(), py3eval() Vim functions |python-pyeval|
157. Dynamic loading |python-dynamic|
168. Python 3 |python3|
Bram Moolenaar071d4272004-06-13 20:20:40 +000017
18{Vi does not have any of these commands}
19
Bram Moolenaar368373e2010-07-19 20:46:22 +020020The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000021|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020022The Python 3 interface is available only when Vim was compiled with the
23|+python3| feature.
Bram Moolenaar071d4272004-06-13 20:20:40 +000024
25==============================================================================
261. Commands *python-commands*
27
28 *:python* *:py* *E205* *E263* *E264*
29:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020030 Execute Python statement {stmt}. A simple check if
31 the `:python` command is working: >
32 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000033
34:[range]py[thon] << {endmarker}
35{script}
36{endmarker}
37 Execute Python script {script}.
38 Note: This command doesn't work when the Python
39 feature wasn't compiled in. To avoid errors, see
40 |script-here|.
41
42{endmarker} must NOT be preceded by any white space. If {endmarker} is
43omitted from after the "<<", a dot '.' must be used after {script}, like
44for the |:append| and |:insert| commands.
45This form of the |:python| command is mainly useful for including python code
46in Vim scripts.
47
48Example: >
49 function! IcecreamInitialize()
50 python << EOF
51 class StrawberryIcecream:
52 def __call__(self):
53 print 'EAT ME'
54 EOF
55 endfunction
56<
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010057Note: Python is very sensitive to the indenting. Make sure the "class" line
58and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000059
Bram Moolenaard620aa92013-05-17 16:40:06 +020060 *:pydo*
61:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
62 {body}" for each line in the [range], with the
63 function arguments being set to the text of each line
64 in turn, without a trailing <EOL>, and the current
65 line number. The function should return a string or
66 None. If a string is returned, it becomes the text of
67 the line in the current turn. The default for [range]
68 is the whole file: "1,$".
69 {not in Vi}
70
71Examples:
72>
73 :pydo return "%s\t%d" % (line[::-1], len(line))
74 :pydo if line: return "%4d: %s" % (linenr, line)
75<
Bram Moolenaar071d4272004-06-13 20:20:40 +000076 *:pyfile* *:pyf*
77:[range]pyf[ile] {file}
78 Execute the Python script in {file}. The whole
79 argument is used as a single file name. {not in Vi}
80
81Both of these commands do essentially the same thing - they execute a piece of
82Python code, with the "current range" |python-range| set to the given line
83range.
84
85In the case of :python, the code to execute is in the command-line.
86In the case of :pyfile, the code to execute is the contents of the given file.
87
88Python commands cannot be used in the |sandbox|.
89
90To pass arguments you need to set sys.argv[] explicitly. Example: >
91
92 :python import sys
93 :python sys.argv = ["foo", "bar"]
94 :pyfile myscript.py
95
96Here are some examples *python-examples* >
97
98 :python from vim import *
99 :python from string import upper
100 :python current.line = upper(current.line)
101 :python print "Hello"
102 :python str = current.buffer[42]
103
104(Note that changes - like the imports - persist from one command to the next,
105just like in the Python interpreter.)
106
107==============================================================================
1082. The vim module *python-vim*
109
110Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000111|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112methods, three constants, and one error object. You need to import the vim
113module before using it: >
114 :python import vim
115
116Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000117 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100118 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000119 :py w = vim.windows[n] # gets window "n"
120 :py cw = vim.current.window # gets the current window
121 :py b = vim.buffers[n] # gets buffer "n"
122 :py cb = vim.current.buffer # gets the current buffer
123 :py w.height = lines # sets the window height
124 :py w.cursor = (row, col) # sets the window cursor position
125 :py pos = w.cursor # gets a tuple (row, col)
126 :py name = b.name # gets the buffer file name
127 :py line = b[n] # gets a line from the buffer
128 :py lines = b[n:m] # gets a list of lines
129 :py num = len(b) # gets the number of lines
130 :py b[n] = str # sets a line in the buffer
131 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
132 :py del b[n] # deletes a line
133 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134
135
136Methods of the "vim" module
137
138vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000139 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000141 :py vim.command("set tw=72")
142 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143< The following definition executes Normal mode commands: >
144 def normal(str):
145 vim.command("normal "+str)
146 # Note the use of single quotes to delimit a string containing
147 # double quotes
148 normal('"a2dd"aP')
149< *E659*
150 The ":python" command cannot be used recursively with Python 2.2 and
151 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000152 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153
154vim.eval(str) *python-eval*
155 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000156 evaluator (see |expression|). Returns the expression result as:
157 - a string if the Vim expression evaluates to a string or number
158 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000159 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000160 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000162 :py text_width = vim.eval("&tw")
163 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164 # string.atoi() to convert to
165 # a number.
166
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000167 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000168< The latter will return a python list of python dicts, for instance:
169 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
170 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
171
Bram Moolenaar30b65812012-07-12 22:01:11 +0200172vim.bindeval(str) *python-bindeval*
173 Like |python-eval|, but
174 1. if expression evaluates to |List| or |Dictionary| it is returned as
175 vimlist or vimdictionary python type that are connected to original
176 list or dictionary. Thus modifications to these objects imply
177 modifications of the original.
Bram Moolenaard09acef2012-09-21 14:54:30 +0200178
179 Additionally, vimlist and vimdictionary type have read-write
180 `.locked` attribute that returns
181 Value Meaning ~
182 zero Variable is not locked
183 vim.VAR_LOCKED Variable is locked, but can be unlocked
Bram Moolenaar97cc2382012-10-03 21:46:54 +0200184 vim.VAR_FIXED Variable is locked and can't be unlocked
Bram Moolenaard09acef2012-09-21 14:54:30 +0200185 integer constants. If variable is not fixed, you can do
186 `var.locked=True` to lock it and `var.locked=False` to unlock.
187 There is no recursive locking like |:lockvar|! does. There is also
188 no way to lock a specific key or check whether it is locked (in any
189 case these locks are ignored by anything except |:let|: |extend()|
190 does not care, neither does python interface).
191
192 Vimdictionary type also supports `.scope` attribute which is one of
193 Value Meaning ~
194 zero Dictionary is not a scope one
195 vim.VAR_DEF_SCOPE Function-local or global scope dictionary
196 vim.VAR_SCOPE Other scope dictionary
197
Bram Moolenaar30b65812012-07-12 22:01:11 +0200198 2. if expression evaluates to a function reference, then it returns
199 callable vimfunction object. Use self keyword argument to assign
200 |self| object for dictionary functions.
201
202 Note: this function has the same behavior as |lua-eval| (except that
203 lua does not support running vim functions), |python-eval| is
204 kept for backwards compatibility in order not to make scripts
205 relying on outputs of vim.eval() being a copy of original or
206 vim.eval("1") returning a string.
207
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000208
209
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210Error object of the "vim" module
211
212vim.error *python-error*
213 Upon encountering a Vim error, Python raises an exception of type
214 vim.error.
215 Example: >
216 try:
217 vim.command("put a")
218 except vim.error:
219 # nothing in register a
220
221Constants of the "vim" module
222
223 Note that these are not actually constants - you could reassign them.
224 But this is silly, as you would then lose access to the vim objects
225 to which the variables referred.
226
227vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200228 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000230 :py b = vim.buffers[i] # Indexing (read-only)
231 :py b in vim.buffers # Membership test
232 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200233 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000234<
235vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000236 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000238 :py w = vim.windows[i] # Indexing (read-only)
239 :py w in vim.windows # Membership test
240 :py n = len(vim.windows) # Number of elements
241 :py for w in vim.windows: # Sequential access
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200242< Note: vim.windows object always accesses current tab page,.
243 |python-tabpage|.windows objects are bound to parent |python-tabpage|
244 object and always use windows from that tab page (or throw vim.error
245 in case tab page was deleted). You can keep a reference to both
246 without keeping a reference to vim module object or |python-tabpage|,
247 they will not loose their properties in this case.
248
249vim.tabpages *python-tabpages*
250 A sequence object providing access to the list of vim tab pages. The
251 object supports the following operations: >
252 :py t = vim.tabpages[i] # Indexing (read-only)
253 :py t in vim.tabpages # Membership test
254 :py n = len(vim.tabpages) # Number of elements
255 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000256<
257vim.current *python-current*
258 An object providing access (via specific attributes) to various
259 "current" objects available in vim:
260 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200261 vim.current.buffer The current buffer (RW) Buffer
262 vim.current.window The current window (RW) Window
263 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264 vim.current.range The current line range (RO) Range
265
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000266 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000268 "current range". A range is a bit like a buffer, but with all access
269 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000270
Bram Moolenaare7614592013-05-15 15:51:08 +0200271 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
272 valid |python-buffer|, |python-window| or |python-tabpage| objects
273 respectively. Assigning triggers normal (with |autocommand|s)
274 switching to given buffer, window or tab page. It is the only way to
275 switch UI objects in python: you can't assign to
276 |python-tabpage|.window attribute. To switch without triggering
277 autocommands use >
278 py << EOF
279 saved_eventignore = vim.options['eventignore']
280 vim.options['eventignore'] = 'all'
281 try:
282 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
283 finally:
284 vim.options['eventignore'] = saved_eventignore
285 EOF
286<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200287vim.vars *python-vars*
288vim.vvars *python-vvars*
289 Dictionary-like objects holding dictionaries with global (|g:|) and
290 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
291 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200293vim.options *python-options*
294 Object partly supporting mapping protocol (supports setting and
295 getting items) providing a read-write access to global options.
296 Note: unlike |:set| this provides access only to global options. You
297 cannot use this object to obtain or set local options' values or
298 access local-only options in any fashion. Raises KeyError if no global
299 option with such name exists (i.e. does not raise KeyError for
300 |global-local| options and global only options, but does for window-
301 and buffer-local ones). Use |python-buffer| objects to access to
302 buffer-local options and |python-window| objects to access to
303 window-local options.
304
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305Output from Python *python-output*
306 Vim displays all Python code output in the Vim message area. Normal
307 output appears as information messages, and error output appears as
308 error messages.
309
310 In implementation terms, this means that all output to sys.stdout
311 (including the output from print statements) appears as information
312 messages, and all output to sys.stderr (including error tracebacks)
313 appears as error messages.
314
315 *python-input*
316 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000317 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000318 fixed.
319
320==============================================================================
3213. Buffer objects *python-buffer*
322
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000323Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000324 - via vim.current.buffer (|python-current|)
325 - from indexing vim.buffers (|python-buffers|)
326 - from the "buffer" attribute of a window (|python-window|)
327
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100328Buffer objects have two read-only attributes - name - the full file name for
329the buffer, and number - the buffer number. They also have three methods
330(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000331
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000332You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000333act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000334element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000335including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000336you would expect. Note that the result of indexing (slicing) a buffer is a
337string (list of strings). This has one unusual consequence - b[:] is different
338from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000339"b = None" merely updates the variable b, with no effect on the buffer.
340
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000341Buffer indexes start at zero, as is normal in Python. This differs from vim
342line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000343with marks (see below) which use vim line numbers.
344
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200345The buffer object attributes are:
346 b.vars Dictionary-like object used to access
347 |buffer-variable|s.
348 b.options Mapping object (supports item getting, setting and
349 deleting) that provides access to buffer-local options
350 and buffer-local values of |global-local| options. Use
351 |python-window|.options if option is window-local,
352 this object will raise KeyError. If option is
353 |global-local| and local value is missing getting it
354 will return None.
355
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356The buffer object methods are:
357 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200358 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000359 b.append(list) Append a list of lines to the buffer
360 Note that the option of supplying a list of strings to
361 the append method differs from the equivalent method
362 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200363 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000364 b.mark(name) Return a tuple (row,col) representing the position
365 of the named mark (can also get the []"<> marks)
366 b.range(s,e) Return a range object (see |python-range|) which
367 represents the part of the given buffer between line
368 numbers s and e |inclusive|.
369
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000370Note that when adding a line it must not contain a line break character '\n'.
371A trailing '\n' is allowed and ignored, so that you can do: >
372 :py b.append(f.readlines())
373
Bram Moolenaar071d4272004-06-13 20:20:40 +0000374Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000375 :py print b.name # write the buffer file name
376 :py b[0] = "hello!!!" # replace the top line
377 :py b[:] = None # delete the whole buffer
378 :py del b[:] # delete the whole buffer
379 :py b[0:0] = [ "a line" ] # add a line at the top
380 :py del b[2] # delete a line (the third)
381 :py b.append("bottom") # add a line at the bottom
382 :py n = len(b) # number of lines
383 :py (row,col) = b.mark('a') # named mark
384 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200385 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200386 :py b.options["ff"] = "dos" # set fileformat
387 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388
389==============================================================================
3904. Range objects *python-range*
391
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000392Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393number of ways:
394 - via vim.current.range (|python-current|)
395 - from a buffer's range() method (|python-buffer|)
396
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000397A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398all operations are restricted to the lines within the range (this line range
399can, of course, change as a result of slice assignments, line deletions, or
400the range.append() method).
401
402The range object attributes are:
403 r.start Index of first line into the buffer
404 r.end Index of last line into the buffer
405
406The range object methods are:
407 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200408 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409 r.append(list) Append a list of lines to the range
410 Note that the option of supplying a list of strings to
411 the append method differs from the equivalent method
412 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200413 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000414
415Example (assume r is the current range):
416 # Send all lines in a range to the default printer
417 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
418
419==============================================================================
4205. Window objects *python-window*
421
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000422Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000423 - via vim.current.window (|python-current|)
424 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200425 - from indexing "windows" attribute of a tab page (|python-tabpage|)
426 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000428You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000429methods, and no sequence or other interface.
430
431Window attributes are:
432 buffer (read-only) The buffer displayed in this window
433 cursor (read-write) The current cursor position in the window
434 This is a tuple, (row,col).
435 height (read-write) The window height, in rows
436 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200437 vars (read-only) The window |w:| variables. Attribute is
438 unassignable, but you can change window
439 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200440 options (read-only) The window-local options. Attribute is
441 unassignable, but you can change window
442 options this way. Provides access only to
443 window-local options, for buffer-local use
444 |python-buffer| and for global ones use
445 |python-options|. If option is |global-local|
446 and local value is missing getting it will
447 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200448 number (read-only) Window number. The first window has number 1.
449 This is zero in case it cannot be determined
450 (e.g. when the window object belongs to other
451 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200452 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200453 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200454 tabpage (read-only) Window tab page.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200455
Bram Moolenaar071d4272004-06-13 20:20:40 +0000456The height attribute is writable only if the screen is split horizontally.
457The width attribute is writable only if the screen is split vertically.
458
459==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02004606. Tab page objects *python-tabpage*
461
462Tab page objects represent vim tab pages. You can obtain them in a number of
463ways:
464 - via vim.current.tabpage (|python-current|)
465 - from indexing vim.tabpages (|python-tabpages|)
466
467You can use this object to access tab page windows. They have no methods and
468no sequence or other interfaces.
469
470Tab page attributes are:
471 number The tab page number like the one returned by
472 |tabpagenr()|.
473 windows Like |python-windows|, but for current tab page.
474 vars The tab page |t:| variables.
475 window Current tabpage window.
476
477==============================================================================
Bram Moolenaar30b65812012-07-12 22:01:11 +02004786. pyeval() and py3eval() Vim functions *python-pyeval*
479
480To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
481functions to evaluate Python expressions and pass their values to VimL.
482
483==============================================================================
4847. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000485
486On MS-Windows the Python library can be loaded dynamically. The |:version|
487output then includes |+python/dyn|.
488
489This means that Vim will search for the Python DLL file only when needed.
490When you don't use the Python interface you don't need it, thus you can use
491Vim without this DLL file.
492
493To use the Python interface the Python DLL must be in your search path. In a
494console window type "path" to see what directories are used.
495
496The name of the DLL must match the Python version Vim was compiled with.
497Currently the name is "python24.dll". That is for Python 2.4. To know for
498sure edit "gvim.exe" and search for "python\d*.dll\c".
499
500==============================================================================
Bram Moolenaar30b65812012-07-12 22:01:11 +02005018. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200502
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200503 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200504The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100505if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200506 :py3 print("Hello")
507< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200508The `:py3file` command works similar to `:pyfile`.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200509 *:py3do* *E863*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200510The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200511
Bram Moolenaar30b65812012-07-12 22:01:11 +0200512
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200513Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02005141. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02005152. Python 2 support only (+python or +python/dyn, -python3)
5163. Python 3 support only (-python, +python3 or +python3/dyn)
5174. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200518
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200519Some more details on the special case 4:
Bram Moolenaarede981a2010-08-11 23:37:32 +0200520
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200521When Python 2 and Python 3 are both supported they must be loaded dynamically.
522
523When doing this on Linux/Unix systems and importing global symbols, this leads
524to a crash when the second Python version is used. So either global symbols
525are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200526loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200527symbols to be provided by Vim.
528 *E836* *E837*
529Vim's configuration script makes a guess for all libraries based on one
530standard Python library (termios). If importing this library succeeds for
531both Python versions, then both will be made available in Vim at the same
532time. If not, only the version first used in a session will be enabled.
533When trying to use the other one you will get the E836 or E837 error message.
534
535Here Vim's behavior depends on the system in which it was configured. In a
536system where both versions of Python were configured with --enable-shared,
537both versions of Python will be activated at the same time. There will still
538be problems with other third party libraries that were not linked to
539libPython.
540
541To work around such problems there are these options:
5421. The problematic library is recompiled to link to the according
543 libpython.so.
5442. Vim is recompiled for only one Python version.
5453. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
546 may crash Vim though.
547
Bram Moolenaar446beb42011-05-10 17:18:44 +0200548 *has-python*
549You can test what Python version is available with: >
550 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200551 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200552 elseif has('python3')
553 echo 'there is Python 3.x'
554 endif
555
556Note however, that when Python 2 and 3 are both available and loaded
557dynamically, these has() calls will try to load them. If only one can be
558loaded at a time, just checking if Python 2 or 3 are available will prevent
559the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200560
561==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000562 vim:tw=78:ts=8:ft=help:norl: