blob: 206cdf0046e4ca30c3ccfda47fd39a75fd3dd53f [file] [log] [blame]
Bram Moolenaare6ae6222013-05-21 21:01:10 +02001*if_pyth.txt* For Vim version 7.3. Last change: 2013 May 21
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Paul Moore
5
6
7The Python Interface to Vim *python* *Python*
8
Bram Moolenaar30b65812012-07-12 22:01:11 +020091. Commands |python-commands|
102. The vim module |python-vim|
113. Buffer objects |python-buffer|
124. Range objects |python-range|
135. Window objects |python-window|
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200146. Tab page objects |python-tabpage|
157. pyeval(), py3eval() Vim functions |python-pyeval|
168. Dynamic loading |python-dynamic|
179. Python 3 |python3|
Bram Moolenaar071d4272004-06-13 20:20:40 +000018
19{Vi does not have any of these commands}
20
Bram Moolenaar368373e2010-07-19 20:46:22 +020021The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000022|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020023The Python 3 interface is available only when Vim was compiled with the
24|+python3| feature.
Bram Moolenaar071d4272004-06-13 20:20:40 +000025
26==============================================================================
271. Commands *python-commands*
28
29 *:python* *:py* *E205* *E263* *E264*
30:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020031 Execute Python statement {stmt}. A simple check if
32 the `:python` command is working: >
33 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
35:[range]py[thon] << {endmarker}
36{script}
37{endmarker}
38 Execute Python script {script}.
39 Note: This command doesn't work when the Python
40 feature wasn't compiled in. To avoid errors, see
41 |script-here|.
42
43{endmarker} must NOT be preceded by any white space. If {endmarker} is
44omitted from after the "<<", a dot '.' must be used after {script}, like
45for the |:append| and |:insert| commands.
46This form of the |:python| command is mainly useful for including python code
47in Vim scripts.
48
49Example: >
50 function! IcecreamInitialize()
51 python << EOF
52 class StrawberryIcecream:
53 def __call__(self):
54 print 'EAT ME'
55 EOF
56 endfunction
57<
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010058Note: Python is very sensitive to the indenting. Make sure the "class" line
59and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
Bram Moolenaard620aa92013-05-17 16:40:06 +020061 *:pydo*
62:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
63 {body}" for each line in the [range], with the
64 function arguments being set to the text of each line
65 in turn, without a trailing <EOL>, and the current
66 line number. The function should return a string or
67 None. If a string is returned, it becomes the text of
68 the line in the current turn. The default for [range]
69 is the whole file: "1,$".
70 {not in Vi}
71
72Examples:
73>
74 :pydo return "%s\t%d" % (line[::-1], len(line))
75 :pydo if line: return "%4d: %s" % (linenr, line)
76<
Bram Moolenaar071d4272004-06-13 20:20:40 +000077 *:pyfile* *:pyf*
78:[range]pyf[ile] {file}
79 Execute the Python script in {file}. The whole
80 argument is used as a single file name. {not in Vi}
81
82Both of these commands do essentially the same thing - they execute a piece of
83Python code, with the "current range" |python-range| set to the given line
84range.
85
86In the case of :python, the code to execute is in the command-line.
87In the case of :pyfile, the code to execute is the contents of the given file.
88
89Python commands cannot be used in the |sandbox|.
90
91To pass arguments you need to set sys.argv[] explicitly. Example: >
92
93 :python import sys
94 :python sys.argv = ["foo", "bar"]
95 :pyfile myscript.py
96
97Here are some examples *python-examples* >
98
99 :python from vim import *
100 :python from string import upper
101 :python current.line = upper(current.line)
102 :python print "Hello"
103 :python str = current.buffer[42]
104
105(Note that changes - like the imports - persist from one command to the next,
106just like in the Python interpreter.)
107
108==============================================================================
1092. The vim module *python-vim*
110
111Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000112|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113methods, three constants, and one error object. You need to import the vim
114module before using it: >
115 :python import vim
116
117Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000118 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100119 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000120 :py w = vim.windows[n] # gets window "n"
121 :py cw = vim.current.window # gets the current window
122 :py b = vim.buffers[n] # gets buffer "n"
123 :py cb = vim.current.buffer # gets the current buffer
124 :py w.height = lines # sets the window height
125 :py w.cursor = (row, col) # sets the window cursor position
126 :py pos = w.cursor # gets a tuple (row, col)
127 :py name = b.name # gets the buffer file name
128 :py line = b[n] # gets a line from the buffer
129 :py lines = b[n:m] # gets a list of lines
130 :py num = len(b) # gets the number of lines
131 :py b[n] = str # sets a line in the buffer
132 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
133 :py del b[n] # deletes a line
134 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135
136
137Methods of the "vim" module
138
139vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000140 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000142 :py vim.command("set tw=72")
143 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144< The following definition executes Normal mode commands: >
145 def normal(str):
146 vim.command("normal "+str)
147 # Note the use of single quotes to delimit a string containing
148 # double quotes
149 normal('"a2dd"aP')
150< *E659*
151 The ":python" command cannot be used recursively with Python 2.2 and
152 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000153 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154
155vim.eval(str) *python-eval*
156 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000157 evaluator (see |expression|). Returns the expression result as:
158 - a string if the Vim expression evaluates to a string or number
159 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000160 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000161 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000163 :py text_width = vim.eval("&tw")
164 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165 # string.atoi() to convert to
166 # a number.
167
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000168 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000169< The latter will return a python list of python dicts, for instance:
170 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
171 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
172
Bram Moolenaar30b65812012-07-12 22:01:11 +0200173vim.bindeval(str) *python-bindeval*
174 Like |python-eval|, but
175 1. if expression evaluates to |List| or |Dictionary| it is returned as
176 vimlist or vimdictionary python type that are connected to original
177 list or dictionary. Thus modifications to these objects imply
178 modifications of the original.
Bram Moolenaard09acef2012-09-21 14:54:30 +0200179
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200180 Additionally, vim.List and vim.Dictionary type have read-write
Bram Moolenaard09acef2012-09-21 14:54:30 +0200181 `.locked` attribute that returns
182 Value Meaning ~
183 zero Variable is not locked
184 vim.VAR_LOCKED Variable is locked, but can be unlocked
Bram Moolenaar97cc2382012-10-03 21:46:54 +0200185 vim.VAR_FIXED Variable is locked and can't be unlocked
Bram Moolenaard09acef2012-09-21 14:54:30 +0200186 integer constants. If variable is not fixed, you can do
187 `var.locked=True` to lock it and `var.locked=False` to unlock.
188 There is no recursive locking like |:lockvar|! does. There is also
189 no way to lock a specific key or check whether it is locked (in any
190 case these locks are ignored by anything except |:let|: |extend()|
191 does not care, neither does python interface).
192
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200193 vim.Dictionary type also supports `.scope` attribute which is one
194 of
Bram Moolenaard09acef2012-09-21 14:54:30 +0200195 Value Meaning ~
196 zero Dictionary is not a scope one
197 vim.VAR_DEF_SCOPE Function-local or global scope dictionary
198 vim.VAR_SCOPE Other scope dictionary
199
Bram Moolenaar30b65812012-07-12 22:01:11 +0200200 2. if expression evaluates to a function reference, then it returns
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200201 callable vim.Function object. Use self keyword argument to assign
Bram Moolenaar30b65812012-07-12 22:01:11 +0200202 |self| object for dictionary functions.
203
204 Note: this function has the same behavior as |lua-eval| (except that
205 lua does not support running vim functions), |python-eval| is
206 kept for backwards compatibility in order not to make scripts
207 relying on outputs of vim.eval() being a copy of original or
208 vim.eval("1") returning a string.
209
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200210 You can use "List", "Dictionary" and "Function" vim module attributes
211 to test whether object has given type. These types are currently not
212 subclassable, neither they contain constructors, so you can use them
213 only for checks like `isinstance(obj, vim.List)`.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000214
215
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216Error object of the "vim" module
217
218vim.error *python-error*
219 Upon encountering a Vim error, Python raises an exception of type
220 vim.error.
221 Example: >
222 try:
223 vim.command("put a")
224 except vim.error:
225 # nothing in register a
226
227Constants of the "vim" module
228
229 Note that these are not actually constants - you could reassign them.
230 But this is silly, as you would then lose access to the vim objects
231 to which the variables referred.
232
233vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200234 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000236 :py b = vim.buffers[i] # Indexing (read-only)
237 :py b in vim.buffers # Membership test
238 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200239 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240<
241vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000242 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000244 :py w = vim.windows[i] # Indexing (read-only)
245 :py w in vim.windows # Membership test
246 :py n = len(vim.windows) # Number of elements
247 :py for w in vim.windows: # Sequential access
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200248< Note: vim.windows object always accesses current tab page,.
249 |python-tabpage|.windows objects are bound to parent |python-tabpage|
250 object and always use windows from that tab page (or throw vim.error
251 in case tab page was deleted). You can keep a reference to both
252 without keeping a reference to vim module object or |python-tabpage|,
253 they will not loose their properties in this case.
254
255vim.tabpages *python-tabpages*
256 A sequence object providing access to the list of vim tab pages. The
257 object supports the following operations: >
258 :py t = vim.tabpages[i] # Indexing (read-only)
259 :py t in vim.tabpages # Membership test
260 :py n = len(vim.tabpages) # Number of elements
261 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262<
263vim.current *python-current*
264 An object providing access (via specific attributes) to various
265 "current" objects available in vim:
266 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200267 vim.current.buffer The current buffer (RW) Buffer
268 vim.current.window The current window (RW) Window
269 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000270 vim.current.range The current line range (RO) Range
271
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000272 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000274 "current range". A range is a bit like a buffer, but with all access
275 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276
Bram Moolenaare7614592013-05-15 15:51:08 +0200277 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
278 valid |python-buffer|, |python-window| or |python-tabpage| objects
279 respectively. Assigning triggers normal (with |autocommand|s)
280 switching to given buffer, window or tab page. It is the only way to
281 switch UI objects in python: you can't assign to
282 |python-tabpage|.window attribute. To switch without triggering
283 autocommands use >
284 py << EOF
285 saved_eventignore = vim.options['eventignore']
286 vim.options['eventignore'] = 'all'
287 try:
288 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
289 finally:
290 vim.options['eventignore'] = saved_eventignore
291 EOF
292<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200293vim.vars *python-vars*
294vim.vvars *python-vvars*
295 Dictionary-like objects holding dictionaries with global (|g:|) and
296 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
297 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000298
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200299vim.options *python-options*
300 Object partly supporting mapping protocol (supports setting and
301 getting items) providing a read-write access to global options.
302 Note: unlike |:set| this provides access only to global options. You
303 cannot use this object to obtain or set local options' values or
304 access local-only options in any fashion. Raises KeyError if no global
305 option with such name exists (i.e. does not raise KeyError for
306 |global-local| options and global only options, but does for window-
307 and buffer-local ones). Use |python-buffer| objects to access to
308 buffer-local options and |python-window| objects to access to
309 window-local options.
310
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200311 Type of this object is available via "Options" attribute of vim
312 module.
313
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314Output from Python *python-output*
315 Vim displays all Python code output in the Vim message area. Normal
316 output appears as information messages, and error output appears as
317 error messages.
318
319 In implementation terms, this means that all output to sys.stdout
320 (including the output from print statements) appears as information
321 messages, and all output to sys.stderr (including error tracebacks)
322 appears as error messages.
323
324 *python-input*
325 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000326 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000327 fixed.
328
329==============================================================================
3303. Buffer objects *python-buffer*
331
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000332Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000333 - via vim.current.buffer (|python-current|)
334 - from indexing vim.buffers (|python-buffers|)
335 - from the "buffer" attribute of a window (|python-window|)
336
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100337Buffer objects have two read-only attributes - name - the full file name for
338the buffer, and number - the buffer number. They also have three methods
339(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000340
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000341You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000343element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000344including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000345you would expect. Note that the result of indexing (slicing) a buffer is a
346string (list of strings). This has one unusual consequence - b[:] is different
347from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000348"b = None" merely updates the variable b, with no effect on the buffer.
349
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000350Buffer indexes start at zero, as is normal in Python. This differs from vim
351line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000352with marks (see below) which use vim line numbers.
353
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200354The buffer object attributes are:
355 b.vars Dictionary-like object used to access
356 |buffer-variable|s.
357 b.options Mapping object (supports item getting, setting and
358 deleting) that provides access to buffer-local options
359 and buffer-local values of |global-local| options. Use
360 |python-window|.options if option is window-local,
361 this object will raise KeyError. If option is
362 |global-local| and local value is missing getting it
363 will return None.
364
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365The buffer object methods are:
366 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200367 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368 b.append(list) Append a list of lines to the buffer
369 Note that the option of supplying a list of strings to
370 the append method differs from the equivalent method
371 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200372 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373 b.mark(name) Return a tuple (row,col) representing the position
374 of the named mark (can also get the []"<> marks)
375 b.range(s,e) Return a range object (see |python-range|) which
376 represents the part of the given buffer between line
377 numbers s and e |inclusive|.
378
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000379Note that when adding a line it must not contain a line break character '\n'.
380A trailing '\n' is allowed and ignored, so that you can do: >
381 :py b.append(f.readlines())
382
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200383Buffer object type is available using "Buffer" attribute of vim module.
384
Bram Moolenaar071d4272004-06-13 20:20:40 +0000385Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000386 :py print b.name # write the buffer file name
387 :py b[0] = "hello!!!" # replace the top line
388 :py b[:] = None # delete the whole buffer
389 :py del b[:] # delete the whole buffer
390 :py b[0:0] = [ "a line" ] # add a line at the top
391 :py del b[2] # delete a line (the third)
392 :py b.append("bottom") # add a line at the bottom
393 :py n = len(b) # number of lines
394 :py (row,col) = b.mark('a') # named mark
395 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200396 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200397 :py b.options["ff"] = "dos" # set fileformat
398 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399
400==============================================================================
4014. Range objects *python-range*
402
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000403Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404number of ways:
405 - via vim.current.range (|python-current|)
406 - from a buffer's range() method (|python-buffer|)
407
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000408A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409all operations are restricted to the lines within the range (this line range
410can, of course, change as a result of slice assignments, line deletions, or
411the range.append() method).
412
413The range object attributes are:
414 r.start Index of first line into the buffer
415 r.end Index of last line into the buffer
416
417The range object methods are:
418 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200419 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420 r.append(list) Append a list of lines to the range
421 Note that the option of supplying a list of strings to
422 the append method differs from the equivalent method
423 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200424 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000425
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200426Range object type is available using "Range" attribute of vim module.
427
Bram Moolenaar071d4272004-06-13 20:20:40 +0000428Example (assume r is the current range):
429 # Send all lines in a range to the default printer
430 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
431
432==============================================================================
4335. Window objects *python-window*
434
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000435Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000436 - via vim.current.window (|python-current|)
437 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200438 - from indexing "windows" attribute of a tab page (|python-tabpage|)
439 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000440
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000441You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000442methods, and no sequence or other interface.
443
444Window attributes are:
445 buffer (read-only) The buffer displayed in this window
446 cursor (read-write) The current cursor position in the window
447 This is a tuple, (row,col).
448 height (read-write) The window height, in rows
449 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200450 vars (read-only) The window |w:| variables. Attribute is
451 unassignable, but you can change window
452 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200453 options (read-only) The window-local options. Attribute is
454 unassignable, but you can change window
455 options this way. Provides access only to
456 window-local options, for buffer-local use
457 |python-buffer| and for global ones use
458 |python-options|. If option is |global-local|
459 and local value is missing getting it will
460 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200461 number (read-only) Window number. The first window has number 1.
462 This is zero in case it cannot be determined
463 (e.g. when the window object belongs to other
464 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200465 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200466 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200467 tabpage (read-only) Window tab page.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200468
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469The height attribute is writable only if the screen is split horizontally.
470The width attribute is writable only if the screen is split vertically.
471
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200472Window object type is available using "Window" attribute of vim module.
473
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02004756. Tab page objects *python-tabpage*
476
477Tab page objects represent vim tab pages. You can obtain them in a number of
478ways:
479 - via vim.current.tabpage (|python-current|)
480 - from indexing vim.tabpages (|python-tabpages|)
481
482You can use this object to access tab page windows. They have no methods and
483no sequence or other interfaces.
484
485Tab page attributes are:
486 number The tab page number like the one returned by
487 |tabpagenr()|.
488 windows Like |python-windows|, but for current tab page.
489 vars The tab page |t:| variables.
490 window Current tabpage window.
491
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200492TabPage object type is available using "TabPage" attribute of vim module.
493
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200494==============================================================================
Bram Moolenaarcac867a2013-05-21 19:50:34 +02004957. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200496
497To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
498functions to evaluate Python expressions and pass their values to VimL.
499
500==============================================================================
Bram Moolenaarcac867a2013-05-21 19:50:34 +02005018. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000502
503On MS-Windows the Python library can be loaded dynamically. The |:version|
504output then includes |+python/dyn|.
505
506This means that Vim will search for the Python DLL file only when needed.
507When you don't use the Python interface you don't need it, thus you can use
508Vim without this DLL file.
509
510To use the Python interface the Python DLL must be in your search path. In a
511console window type "path" to see what directories are used.
512
513The name of the DLL must match the Python version Vim was compiled with.
514Currently the name is "python24.dll". That is for Python 2.4. To know for
515sure edit "gvim.exe" and search for "python\d*.dll\c".
516
517==============================================================================
Bram Moolenaarcac867a2013-05-21 19:50:34 +02005189. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200519
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200520 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200521The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100522if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200523 :py3 print("Hello")
524< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200525The `:py3file` command works similar to `:pyfile`.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200526 *:py3do* *E863*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200527The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200528
Bram Moolenaar30b65812012-07-12 22:01:11 +0200529
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200530Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02005311. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02005322. Python 2 support only (+python or +python/dyn, -python3)
5333. Python 3 support only (-python, +python3 or +python3/dyn)
5344. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200535
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200536Some more details on the special case 4:
Bram Moolenaarede981a2010-08-11 23:37:32 +0200537
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200538When Python 2 and Python 3 are both supported they must be loaded dynamically.
539
540When doing this on Linux/Unix systems and importing global symbols, this leads
541to a crash when the second Python version is used. So either global symbols
542are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200543loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200544symbols to be provided by Vim.
545 *E836* *E837*
546Vim's configuration script makes a guess for all libraries based on one
547standard Python library (termios). If importing this library succeeds for
548both Python versions, then both will be made available in Vim at the same
549time. If not, only the version first used in a session will be enabled.
550When trying to use the other one you will get the E836 or E837 error message.
551
552Here Vim's behavior depends on the system in which it was configured. In a
553system where both versions of Python were configured with --enable-shared,
554both versions of Python will be activated at the same time. There will still
555be problems with other third party libraries that were not linked to
556libPython.
557
558To work around such problems there are these options:
5591. The problematic library is recompiled to link to the according
560 libpython.so.
5612. Vim is recompiled for only one Python version.
5623. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
563 may crash Vim though.
564
Bram Moolenaar446beb42011-05-10 17:18:44 +0200565 *has-python*
566You can test what Python version is available with: >
567 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200568 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200569 elseif has('python3')
570 echo 'there is Python 3.x'
571 endif
572
573Note however, that when Python 2 and 3 are both available and loaded
574dynamically, these has() calls will try to load them. If only one can be
575loaded at a time, just checking if Python 2 or 3 are available will prevent
576the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200577
578==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000579 vim:tw=78:ts=8:ft=help:norl: