blob: fffc4c7898a1c5239ee5dca7b03fddfeb6180b2f [file] [log] [blame]
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001*if_pyth.txt* For Vim version 7.3. Last change: 2013 May 25
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 Moolenaar071d4272004-06-13 20:20:40 +000019
20{Vi does not have any of these commands}
21
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 Moolenaar071d4272004-06-13 20:20:40 +000026
27==============================================================================
281. Commands *python-commands*
29
30 *:python* *:py* *E205* *E263* *E264*
31:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020032 Execute Python statement {stmt}. A simple check if
33 the `:python` command is working: >
34 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000035
36:[range]py[thon] << {endmarker}
37{script}
38{endmarker}
39 Execute Python script {script}.
40 Note: This command doesn't work when the Python
41 feature wasn't compiled in. To avoid errors, see
42 |script-here|.
43
44{endmarker} must NOT be preceded by any white space. If {endmarker} is
45omitted from after the "<<", a dot '.' must be used after {script}, like
46for the |:append| and |:insert| commands.
47This form of the |:python| command is mainly useful for including python code
48in Vim scripts.
49
50Example: >
51 function! IcecreamInitialize()
52 python << EOF
53 class StrawberryIcecream:
54 def __call__(self):
55 print 'EAT ME'
56 EOF
57 endfunction
58<
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010059Note: Python is very sensitive to the indenting. Make sure the "class" line
60and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000061
Bram Moolenaard620aa92013-05-17 16:40:06 +020062 *:pydo*
63:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
64 {body}" for each line in the [range], with the
65 function arguments being set to the text of each line
66 in turn, without a trailing <EOL>, and the current
67 line number. The function should return a string or
68 None. If a string is returned, it becomes the text of
69 the line in the current turn. The default for [range]
70 is the whole file: "1,$".
71 {not in Vi}
72
73Examples:
74>
75 :pydo return "%s\t%d" % (line[::-1], len(line))
76 :pydo if line: return "%4d: %s" % (linenr, line)
77<
Bram Moolenaar071d4272004-06-13 20:20:40 +000078 *:pyfile* *:pyf*
79:[range]pyf[ile] {file}
80 Execute the Python script in {file}. The whole
81 argument is used as a single file name. {not in Vi}
82
83Both of these commands do essentially the same thing - they execute a piece of
84Python code, with the "current range" |python-range| set to the given line
85range.
86
87In the case of :python, the code to execute is in the command-line.
88In the case of :pyfile, the code to execute is the contents of the given file.
89
90Python commands cannot be used in the |sandbox|.
91
92To pass arguments you need to set sys.argv[] explicitly. Example: >
93
94 :python import sys
95 :python sys.argv = ["foo", "bar"]
96 :pyfile myscript.py
97
98Here are some examples *python-examples* >
99
100 :python from vim import *
101 :python from string import upper
102 :python current.line = upper(current.line)
103 :python print "Hello"
104 :python str = current.buffer[42]
105
106(Note that changes - like the imports - persist from one command to the next,
107just like in the Python interpreter.)
108
109==============================================================================
1102. The vim module *python-vim*
111
112Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000113|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000114methods, three constants, and one error object. You need to import the vim
115module before using it: >
116 :python import vim
117
118Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000119 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100120 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000121 :py w = vim.windows[n] # gets window "n"
122 :py cw = vim.current.window # gets the current window
123 :py b = vim.buffers[n] # gets buffer "n"
124 :py cb = vim.current.buffer # gets the current buffer
125 :py w.height = lines # sets the window height
126 :py w.cursor = (row, col) # sets the window cursor position
127 :py pos = w.cursor # gets a tuple (row, col)
128 :py name = b.name # gets the buffer file name
129 :py line = b[n] # gets a line from the buffer
130 :py lines = b[n:m] # gets a list of lines
131 :py num = len(b) # gets the number of lines
132 :py b[n] = str # sets a line in the buffer
133 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
134 :py del b[n] # deletes a line
135 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136
137
138Methods of the "vim" module
139
140vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000141 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000143 :py vim.command("set tw=72")
144 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145< The following definition executes Normal mode commands: >
146 def normal(str):
147 vim.command("normal "+str)
148 # Note the use of single quotes to delimit a string containing
149 # double quotes
150 normal('"a2dd"aP')
151< *E659*
152 The ":python" command cannot be used recursively with Python 2.2 and
153 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000154 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155
156vim.eval(str) *python-eval*
157 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000158 evaluator (see |expression|). Returns the expression result as:
159 - a string if the Vim expression evaluates to a string or number
160 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000161 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000162 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000163 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000164 :py text_width = vim.eval("&tw")
165 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166 # string.atoi() to convert to
167 # a number.
168
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000169 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000170< The latter will return a python list of python dicts, for instance:
171 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
172 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
173
Bram Moolenaar30b65812012-07-12 22:01:11 +0200174vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200175 Like |python-eval|, but returns special objects described in
176 |python-bindeval-objects|. These python objects let you modify (|List|
177 or |Dictionary|) or call (|Funcref|) vim objecs.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000178
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179Error object of the "vim" module
180
181vim.error *python-error*
182 Upon encountering a Vim error, Python raises an exception of type
183 vim.error.
184 Example: >
185 try:
186 vim.command("put a")
187 except vim.error:
188 # nothing in register a
189
190Constants of the "vim" module
191
192 Note that these are not actually constants - you could reassign them.
193 But this is silly, as you would then lose access to the vim objects
194 to which the variables referred.
195
196vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200197 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000199 :py b = vim.buffers[i] # Indexing (read-only)
200 :py b in vim.buffers # Membership test
201 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200202 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203<
204vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000205 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000207 :py w = vim.windows[i] # Indexing (read-only)
208 :py w in vim.windows # Membership test
209 :py n = len(vim.windows) # Number of elements
210 :py for w in vim.windows: # Sequential access
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200211< Note: vim.windows object always accesses current tab page,.
212 |python-tabpage|.windows objects are bound to parent |python-tabpage|
213 object and always use windows from that tab page (or throw vim.error
214 in case tab page was deleted). You can keep a reference to both
215 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200216 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200217
218vim.tabpages *python-tabpages*
219 A sequence object providing access to the list of vim tab pages. The
220 object supports the following operations: >
221 :py t = vim.tabpages[i] # Indexing (read-only)
222 :py t in vim.tabpages # Membership test
223 :py n = len(vim.tabpages) # Number of elements
224 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000225<
226vim.current *python-current*
227 An object providing access (via specific attributes) to various
228 "current" objects available in vim:
229 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200230 vim.current.buffer The current buffer (RW) Buffer
231 vim.current.window The current window (RW) Window
232 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000233 vim.current.range The current line range (RO) Range
234
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000235 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000237 "current range". A range is a bit like a buffer, but with all access
238 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239
Bram Moolenaare7614592013-05-15 15:51:08 +0200240 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
241 valid |python-buffer|, |python-window| or |python-tabpage| objects
242 respectively. Assigning triggers normal (with |autocommand|s)
243 switching to given buffer, window or tab page. It is the only way to
244 switch UI objects in python: you can't assign to
245 |python-tabpage|.window attribute. To switch without triggering
246 autocommands use >
247 py << EOF
248 saved_eventignore = vim.options['eventignore']
249 vim.options['eventignore'] = 'all'
250 try:
251 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
252 finally:
253 vim.options['eventignore'] = saved_eventignore
254 EOF
255<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200256vim.vars *python-vars*
257vim.vvars *python-vvars*
258 Dictionary-like objects holding dictionaries with global (|g:|) and
259 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
260 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200262vim.options *python-options*
263 Object partly supporting mapping protocol (supports setting and
264 getting items) providing a read-write access to global options.
265 Note: unlike |:set| this provides access only to global options. You
266 cannot use this object to obtain or set local options' values or
267 access local-only options in any fashion. Raises KeyError if no global
268 option with such name exists (i.e. does not raise KeyError for
269 |global-local| options and global only options, but does for window-
270 and buffer-local ones). Use |python-buffer| objects to access to
271 buffer-local options and |python-window| objects to access to
272 window-local options.
273
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200274 Type of this object is available via "Options" attribute of vim
275 module.
276
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277Output from Python *python-output*
278 Vim displays all Python code output in the Vim message area. Normal
279 output appears as information messages, and error output appears as
280 error messages.
281
282 In implementation terms, this means that all output to sys.stdout
283 (including the output from print statements) appears as information
284 messages, and all output to sys.stderr (including error tracebacks)
285 appears as error messages.
286
287 *python-input*
288 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000289 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290 fixed.
291
292==============================================================================
2933. Buffer objects *python-buffer*
294
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000295Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296 - via vim.current.buffer (|python-current|)
297 - from indexing vim.buffers (|python-buffers|)
298 - from the "buffer" attribute of a window (|python-window|)
299
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100300Buffer objects have two read-only attributes - name - the full file name for
301the buffer, and number - the buffer number. They also have three methods
302(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000303
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000304You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000306element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000307including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000308you would expect. Note that the result of indexing (slicing) a buffer is a
309string (list of strings). This has one unusual consequence - b[:] is different
310from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000311"b = None" merely updates the variable b, with no effect on the buffer.
312
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000313Buffer indexes start at zero, as is normal in Python. This differs from vim
314line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315with marks (see below) which use vim line numbers.
316
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200317The buffer object attributes are:
318 b.vars Dictionary-like object used to access
319 |buffer-variable|s.
320 b.options Mapping object (supports item getting, setting and
321 deleting) that provides access to buffer-local options
322 and buffer-local values of |global-local| options. Use
323 |python-window|.options if option is window-local,
324 this object will raise KeyError. If option is
325 |global-local| and local value is missing getting it
326 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200327 b.name String, RW. Contains buffer name (full path).
328 Note: when assigning to b.name |BufFilePre| and
329 |BufFilePost| autocommands are launched.
330 b.number Buffer number. Can be used as |python-buffers| key.
331 Read-only.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200332
Bram Moolenaar071d4272004-06-13 20:20:40 +0000333The buffer object methods are:
334 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200335 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000336 b.append(list) Append a list of lines to the buffer
337 Note that the option of supplying a list of strings to
338 the append method differs from the equivalent method
339 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200340 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341 b.mark(name) Return a tuple (row,col) representing the position
342 of the named mark (can also get the []"<> marks)
343 b.range(s,e) Return a range object (see |python-range|) which
344 represents the part of the given buffer between line
345 numbers s and e |inclusive|.
346
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000347Note that when adding a line it must not contain a line break character '\n'.
348A trailing '\n' is allowed and ignored, so that you can do: >
349 :py b.append(f.readlines())
350
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200351Buffer object type is available using "Buffer" attribute of vim module.
352
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000354 :py print b.name # write the buffer file name
355 :py b[0] = "hello!!!" # replace the top line
356 :py b[:] = None # delete the whole buffer
357 :py del b[:] # delete the whole buffer
358 :py b[0:0] = [ "a line" ] # add a line at the top
359 :py del b[2] # delete a line (the third)
360 :py b.append("bottom") # add a line at the bottom
361 :py n = len(b) # number of lines
362 :py (row,col) = b.mark('a') # named mark
363 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200364 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200365 :py b.options["ff"] = "dos" # set fileformat
366 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000367
368==============================================================================
3694. Range objects *python-range*
370
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000371Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000372number of ways:
373 - via vim.current.range (|python-current|)
374 - from a buffer's range() method (|python-buffer|)
375
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000376A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000377all operations are restricted to the lines within the range (this line range
378can, of course, change as a result of slice assignments, line deletions, or
379the range.append() method).
380
381The range object attributes are:
382 r.start Index of first line into the buffer
383 r.end Index of last line into the buffer
384
385The range object methods are:
386 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200387 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388 r.append(list) Append a list of lines to the range
389 Note that the option of supplying a list of strings to
390 the append method differs from the equivalent method
391 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200392 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200394Range object type is available using "Range" attribute of vim module.
395
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396Example (assume r is the current range):
397 # Send all lines in a range to the default printer
398 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
399
400==============================================================================
4015. Window objects *python-window*
402
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000403Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404 - via vim.current.window (|python-current|)
405 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200406 - from indexing "windows" attribute of a tab page (|python-tabpage|)
407 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000409You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000410methods, and no sequence or other interface.
411
412Window attributes are:
413 buffer (read-only) The buffer displayed in this window
414 cursor (read-write) The current cursor position in the window
415 This is a tuple, (row,col).
416 height (read-write) The window height, in rows
417 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200418 vars (read-only) The window |w:| variables. Attribute is
419 unassignable, but you can change window
420 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200421 options (read-only) The window-local options. Attribute is
422 unassignable, but you can change window
423 options this way. Provides access only to
424 window-local options, for buffer-local use
425 |python-buffer| and for global ones use
426 |python-options|. If option is |global-local|
427 and local value is missing getting it will
428 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200429 number (read-only) Window number. The first window has number 1.
430 This is zero in case it cannot be determined
431 (e.g. when the window object belongs to other
432 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200433 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200434 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200435 tabpage (read-only) Window tab page.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200436
Bram Moolenaar071d4272004-06-13 20:20:40 +0000437The height attribute is writable only if the screen is split horizontally.
438The width attribute is writable only if the screen is split vertically.
439
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200440Window object type is available using "Window" attribute of vim module.
441
Bram Moolenaar071d4272004-06-13 20:20:40 +0000442==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02004436. Tab page objects *python-tabpage*
444
445Tab page objects represent vim tab pages. You can obtain them in a number of
446ways:
447 - via vim.current.tabpage (|python-current|)
448 - from indexing vim.tabpages (|python-tabpages|)
449
450You can use this object to access tab page windows. They have no methods and
451no sequence or other interfaces.
452
453Tab page attributes are:
454 number The tab page number like the one returned by
455 |tabpagenr()|.
456 windows Like |python-windows|, but for current tab page.
457 vars The tab page |t:| variables.
458 window Current tabpage window.
459
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200460TabPage object type is available using "TabPage" attribute of vim module.
461
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200462==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02004637. vim.bindeval objects *python-bindeval-objects*
464
465vim.Dictionary object *python-Dictionary*
466 Dictionary-like object providing access to vim |Dictionary| type.
467 Attributes:
468 Attribute Description ~
469 locked One of *python-.locked*
470 Value Description ~
471 zero Variable is not locked
472 vim.VAR_LOCKED Variable is locked, but can be unlocked
473 vim.VAR_FIXED Variable is locked and can't be unlocked
474 Read-write. You can unlock locked variable by assigning
475 `True` or `False` to this attribute. No recursive locking
476 is supported.
477 scope One of
478 Value Description ~
479 zero Dictionary is not a scope one
480 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
481 vim.VAR_SCOPE Other scope dictionary,
482 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200483 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200484 Method Description ~
485 keys() Returns a list with dictionary keys.
486 values() Returns a list with dictionary values.
487 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200488 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200489 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200490 get(key[, default=None])
491 Obtain key from dictionary, returning the default if it is
492 not present.
493 pop(key[, default])
494 Remove specified key from dictionary and return
495 corresponding value. If key is not found and default is
496 given returns the default, otherwise raises KeyError.
497 popitem(key)
498 Remove specified key from dictionary and return a pair
499 with it and the corresponding value. Returned key is a new
500 object.
501 has_key(key)
502 Check whether dictionary contains specified key, similar
503 to `key in dict`.
504
505 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
506 You can use `vim.Dictionary()` to create new vim
507 dictionaries. `d=vim.Dictionary(arg)` is the same as
508 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
509 constructs empty dictionary.
510
Bram Moolenaara9922d62013-05-30 13:01:18 +0200511 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200512 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200513 d['a'] = 'b' # Item assignment
514 print d['a'] # getting item
515 d.update({'c': 'd'}) # .update(dictionary)
516 d.update(e='f') # .update(**kwargs)
517 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
518 for key in d.keys(): # .keys()
519 for val in d.values(): # .values()
520 for key, val in d.items(): # .items()
521 print isinstance(d, vim.Dictionary) # True
522 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200523 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200524<
525 Note: when iterating over keys you should not modify dictionary.
526
527vim.List object *python-List*
528 Sequence-like object providing access to vim |List| type.
529 Supports `.locked` attribute, see |python-.locked|. Also supports the
530 following methods:
531 Method Description ~
532 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200533
534 __new__(), __new__(iterable)
535 You can use `vim.List()` to create new vim lists.
536 `l=vim.List(iterable)` is the same as
537 `l=vim.bindeval('[]');l.extend(iterable)`. Without
538 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200539 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200540 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200541 l.extend(['abc', 'def']) # .extend() method
542 print l[1:] # slicing
543 l[:0] = ['ghi', 'jkl'] # slice assignment
544 print l[0] # getting item
545 l[0] = 'mno' # assignment
546 for i in l: # iteration
547 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200548 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200549
550vim.Function object *python-Function*
551 Function-like object, acting like vim |Funcref| object. Supports `.name`
552 attribute and is callable. Accepts special keyword argument `self`, see
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200553 |Dictionary-function|. You can also use `vim.Function(name)` constructor,
554 it is the same as `vim.bindeval('function(%s)'%json.dumps(name))`.
555
Bram Moolenaara9922d62013-05-30 13:01:18 +0200556 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200557 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200558 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
559 vim.command('''
560 function DictFun() dict
561 return self
562 endfunction
563 ''')
564 f = vim.bindeval('function("DictFun")')
565 print f(self={}) # Like call('DictFun', [], {})
566 print isinstance(f, vim.Function) # True
567
568==============================================================================
5698. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200570
571To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
572functions to evaluate Python expressions and pass their values to VimL.
573
574==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005759. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000576
577On MS-Windows the Python library can be loaded dynamically. The |:version|
578output then includes |+python/dyn|.
579
580This means that Vim will search for the Python DLL file only when needed.
581When you don't use the Python interface you don't need it, thus you can use
582Vim without this DLL file.
583
584To use the Python interface the Python DLL must be in your search path. In a
585console window type "path" to see what directories are used.
586
587The name of the DLL must match the Python version Vim was compiled with.
588Currently the name is "python24.dll". That is for Python 2.4. To know for
589sure edit "gvim.exe" and search for "python\d*.dll\c".
590
591==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020059210. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200593
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200594 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200595The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100596if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200597 :py3 print("Hello")
598< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200599The `:py3file` command works similar to `:pyfile`.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200600 *:py3do* *E863*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200601The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200602
Bram Moolenaar30b65812012-07-12 22:01:11 +0200603
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200604Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02006051. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02006062. Python 2 support only (+python or +python/dyn, -python3)
6073. Python 3 support only (-python, +python3 or +python3/dyn)
6084. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200609
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200610Some more details on the special case 4:
Bram Moolenaarede981a2010-08-11 23:37:32 +0200611
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200612When Python 2 and Python 3 are both supported they must be loaded dynamically.
613
614When doing this on Linux/Unix systems and importing global symbols, this leads
615to a crash when the second Python version is used. So either global symbols
616are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200617loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200618symbols to be provided by Vim.
619 *E836* *E837*
620Vim's configuration script makes a guess for all libraries based on one
621standard Python library (termios). If importing this library succeeds for
622both Python versions, then both will be made available in Vim at the same
623time. If not, only the version first used in a session will be enabled.
624When trying to use the other one you will get the E836 or E837 error message.
625
626Here Vim's behavior depends on the system in which it was configured. In a
627system where both versions of Python were configured with --enable-shared,
628both versions of Python will be activated at the same time. There will still
629be problems with other third party libraries that were not linked to
630libPython.
631
632To work around such problems there are these options:
6331. The problematic library is recompiled to link to the according
634 libpython.so.
6352. Vim is recompiled for only one Python version.
6363. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
637 may crash Vim though.
638
Bram Moolenaar446beb42011-05-10 17:18:44 +0200639 *has-python*
640You can test what Python version is available with: >
641 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200642 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200643 elseif has('python3')
644 echo 'there is Python 3.x'
645 endif
646
647Note however, that when Python 2 and 3 are both available and loaded
648dynamically, these has() calls will try to load them. If only one can be
649loaded at a time, just checking if Python 2 or 3 are available will prevent
650the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200651
652==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000653 vim:tw=78:ts=8:ft=help:norl: