blob: 5929bcf506a87b045d7c18bb0f9eb4f85ceafbe5 [file] [log] [blame]
Bram Moolenaar50ba5262016-09-22 22:33:02 +02001*if_pyth.txt* For Vim version 8.0. Last change: 2016 Sep 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|
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 Moolenaar9ba7e172013-07-17 22:37:26 +020026Both can be available at the same time, but read |python-2-and-3|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000027
28==============================================================================
291. Commands *python-commands*
30
Bram Moolenaardbc28022014-07-26 13:40:44 +020031 *:python* *:py* *E263* *E264* *E887*
Bram Moolenaar071d4272004-06-13 20:20:40 +000032:[range]py[thon] {stmt}
Bram Moolenaar9b451252012-08-15 17:43:31 +020033 Execute Python statement {stmt}. A simple check if
34 the `:python` command is working: >
35 :python print "Hello"
Bram Moolenaar071d4272004-06-13 20:20:40 +000036
37:[range]py[thon] << {endmarker}
38{script}
39{endmarker}
40 Execute Python script {script}.
41 Note: This command doesn't work when the Python
42 feature wasn't compiled in. To avoid errors, see
43 |script-here|.
44
45{endmarker} must NOT be preceded by any white space. If {endmarker} is
46omitted from after the "<<", a dot '.' must be used after {script}, like
47for the |:append| and |:insert| commands.
48This form of the |:python| command is mainly useful for including python code
49in Vim scripts.
50
51Example: >
52 function! IcecreamInitialize()
53 python << EOF
54 class StrawberryIcecream:
55 def __call__(self):
56 print 'EAT ME'
57 EOF
58 endfunction
Bram Moolenaar64d8e252016-09-06 22:12:34 +020059
60To see what version of Python you have: >
61 :python import sys
62 :python print(sys.version)
63
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010064Note: Python is very sensitive to the indenting. Make sure the "class" line
65and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000066
Bram Moolenaard620aa92013-05-17 16:40:06 +020067 *:pydo*
68:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
69 {body}" for each line in the [range], with the
70 function arguments being set to the text of each line
71 in turn, without a trailing <EOL>, and the current
72 line number. The function should return a string or
73 None. If a string is returned, it becomes the text of
74 the line in the current turn. The default for [range]
75 is the whole file: "1,$".
76 {not in Vi}
77
78Examples:
79>
80 :pydo return "%s\t%d" % (line[::-1], len(line))
81 :pydo if line: return "%4d: %s" % (linenr, line)
82<
Bram Moolenaar071d4272004-06-13 20:20:40 +000083 *:pyfile* *:pyf*
84:[range]pyf[ile] {file}
85 Execute the Python script in {file}. The whole
86 argument is used as a single file name. {not in Vi}
87
88Both of these commands do essentially the same thing - they execute a piece of
89Python code, with the "current range" |python-range| set to the given line
90range.
91
92In the case of :python, the code to execute is in the command-line.
93In the case of :pyfile, the code to execute is the contents of the given file.
94
95Python commands cannot be used in the |sandbox|.
96
97To pass arguments you need to set sys.argv[] explicitly. Example: >
98
99 :python import sys
100 :python sys.argv = ["foo", "bar"]
101 :pyfile myscript.py
102
103Here are some examples *python-examples* >
104
105 :python from vim import *
106 :python from string import upper
107 :python current.line = upper(current.line)
108 :python print "Hello"
109 :python str = current.buffer[42]
110
111(Note that changes - like the imports - persist from one command to the next,
112just like in the Python interpreter.)
113
114==============================================================================
1152. The vim module *python-vim*
116
117Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000118|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119methods, three constants, and one error object. You need to import the vim
120module before using it: >
121 :python import vim
122
123Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000124 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100125 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000126 :py w = vim.windows[n] # gets window "n"
127 :py cw = vim.current.window # gets the current window
128 :py b = vim.buffers[n] # gets buffer "n"
129 :py cb = vim.current.buffer # gets the current buffer
130 :py w.height = lines # sets the window height
131 :py w.cursor = (row, col) # sets the window cursor position
132 :py pos = w.cursor # gets a tuple (row, col)
133 :py name = b.name # gets the buffer file name
134 :py line = b[n] # gets a line from the buffer
135 :py lines = b[n:m] # gets a list of lines
136 :py num = len(b) # gets the number of lines
137 :py b[n] = str # sets a line in the buffer
138 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
139 :py del b[n] # deletes a line
140 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141
142
143Methods of the "vim" module
144
145vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000146 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000148 :py vim.command("set tw=72")
149 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150< The following definition executes Normal mode commands: >
151 def normal(str):
152 vim.command("normal "+str)
153 # Note the use of single quotes to delimit a string containing
154 # double quotes
155 normal('"a2dd"aP')
156< *E659*
157 The ":python" command cannot be used recursively with Python 2.2 and
158 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000159 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160
161vim.eval(str) *python-eval*
162 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000163 evaluator (see |expression|). Returns the expression result as:
164 - a string if the Vim expression evaluates to a string or number
165 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000166 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000167 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000169 :py text_width = vim.eval("&tw")
170 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171 # string.atoi() to convert to
172 # a number.
173
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000174 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000175< The latter will return a python list of python dicts, for instance:
176 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
177 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
178
Bram Moolenaar30b65812012-07-12 22:01:11 +0200179vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200180 Like |python-eval|, but returns special objects described in
181 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200182 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000183
Bram Moolenaarbc411962013-06-02 17:46:40 +0200184vim.strwidth(str) *python-strwidth*
185 Like |strwidth()|: returns number of display cells str occupies, tab
186 is counted as one cell.
187
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200188vim.foreach_rtp(callable) *python-foreach_rtp*
189 Call the given callable for each path in 'runtimepath' until either
190 callable returns something but None, the exception is raised or there
191 are no longer paths. If stopped in case callable returned non-None,
192 vim.foreach_rtp function returns the value returned by callable.
193
Bram Moolenaarf4258302013-06-02 18:20:17 +0200194vim.chdir(*args, **kwargs) *python-chdir*
195vim.fchdir(*args, **kwargs) *python-fchdir*
196 Run os.chdir or os.fchdir, then all appropriate vim stuff.
197 Note: you should not use these functions directly, use os.chdir and
198 os.fchdir instead. Behavior of vim.fchdir is undefined in case
199 os.fchdir does not exist.
200
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201Error object of the "vim" module
202
203vim.error *python-error*
204 Upon encountering a Vim error, Python raises an exception of type
205 vim.error.
206 Example: >
207 try:
208 vim.command("put a")
209 except vim.error:
210 # nothing in register a
211
212Constants of the "vim" module
213
214 Note that these are not actually constants - you could reassign them.
215 But this is silly, as you would then lose access to the vim objects
216 to which the variables referred.
217
218vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200219 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000220 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000221 :py b = vim.buffers[i] # Indexing (read-only)
222 :py b in vim.buffers # Membership test
223 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200224 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000225<
226vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000227 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000229 :py w = vim.windows[i] # Indexing (read-only)
230 :py w in vim.windows # Membership test
231 :py n = len(vim.windows) # Number of elements
232 :py for w in vim.windows: # Sequential access
Bram Moolenaarde71b562013-06-02 17:41:54 +0200233< Note: vim.windows object always accesses current tab page.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200234 |python-tabpage|.windows objects are bound to parent |python-tabpage|
235 object and always use windows from that tab page (or throw vim.error
236 in case tab page was deleted). You can keep a reference to both
237 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200238 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200239
240vim.tabpages *python-tabpages*
241 A sequence object providing access to the list of vim tab pages. The
242 object supports the following operations: >
243 :py t = vim.tabpages[i] # Indexing (read-only)
244 :py t in vim.tabpages # Membership test
245 :py n = len(vim.tabpages) # Number of elements
246 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247<
248vim.current *python-current*
249 An object providing access (via specific attributes) to various
250 "current" objects available in vim:
251 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200252 vim.current.buffer The current buffer (RW) Buffer
253 vim.current.window The current window (RW) Window
254 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255 vim.current.range The current line range (RO) Range
256
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000257 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000259 "current range". A range is a bit like a buffer, but with all access
260 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261
Bram Moolenaare7614592013-05-15 15:51:08 +0200262 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
263 valid |python-buffer|, |python-window| or |python-tabpage| objects
264 respectively. Assigning triggers normal (with |autocommand|s)
265 switching to given buffer, window or tab page. It is the only way to
266 switch UI objects in python: you can't assign to
267 |python-tabpage|.window attribute. To switch without triggering
268 autocommands use >
269 py << EOF
270 saved_eventignore = vim.options['eventignore']
271 vim.options['eventignore'] = 'all'
272 try:
273 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
274 finally:
275 vim.options['eventignore'] = saved_eventignore
276 EOF
277<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200278vim.vars *python-vars*
279vim.vvars *python-vvars*
280 Dictionary-like objects holding dictionaries with global (|g:|) and
281 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
282 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200284vim.options *python-options*
285 Object partly supporting mapping protocol (supports setting and
286 getting items) providing a read-write access to global options.
287 Note: unlike |:set| this provides access only to global options. You
288 cannot use this object to obtain or set local options' values or
289 access local-only options in any fashion. Raises KeyError if no global
290 option with such name exists (i.e. does not raise KeyError for
291 |global-local| options and global only options, but does for window-
292 and buffer-local ones). Use |python-buffer| objects to access to
293 buffer-local options and |python-window| objects to access to
294 window-local options.
295
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200296 Type of this object is available via "Options" attribute of vim
297 module.
298
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299Output from Python *python-output*
300 Vim displays all Python code output in the Vim message area. Normal
301 output appears as information messages, and error output appears as
302 error messages.
303
304 In implementation terms, this means that all output to sys.stdout
305 (including the output from print statements) appears as information
306 messages, and all output to sys.stderr (including error tracebacks)
307 appears as error messages.
308
309 *python-input*
310 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000311 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000312 fixed.
313
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200314 *python2-directory* *python3-directory* *pythonx-directory*
315Python 'runtimepath' handling *python-special-path*
316
317In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
318the list of paths found in 'runtimepath': with this directory in sys.path and
319vim.path_hooks in sys.path_hooks python will try to load module from
320{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
321each {rtp} found in 'runtimepath'.
322
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200323Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200324
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200325 from imp import find_module, load_module
326 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200327 import sys
328
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200329 class VimModuleLoader(object):
330 def __init__(self, module):
331 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200332
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200333 def load_module(self, fullname, path=None):
334 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200335
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200336 def _find_module(fullname, oldtail, path):
337 idx = oldtail.find('.')
338 if idx > 0:
339 name = oldtail[:idx]
340 tail = oldtail[idx+1:]
341 fmr = find_module(name, path)
342 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
343 return _find_module(fullname, tail, module.__path__)
344 else:
345 fmr = find_module(fullname, path)
346 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200347
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200348 # It uses vim module itself in place of VimPathFinder class: it does not
349 # matter for python which object has find_module function attached to as
350 # an attribute.
351 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200352 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200353 def find_module(cls, fullname, path=None):
354 try:
355 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
356 except ImportError:
357 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200358
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200359 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200360 def load_module(cls, fullname, path=None):
361 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200362
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200363 def hook(path):
364 if path == vim.VIM_SPECIAL_PATH:
365 return VimPathFinder
366 else:
367 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200368
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200369 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200370
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200371vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
372 String constant used in conjunction with vim path hook. If path hook
373 installed by vim is requested to handle anything but path equal to
374 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
375 case it uses special loader.
376
377 Note: you must not use value of this constant directly, always use
378 vim.VIM_SPECIAL_PATH object.
379
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200380vim.find_module(...) *python-find_module*
381vim.path_hook(path) *python-path_hook*
382 Methods or objects used to implement path loading as described above.
383 You should not be using any of these directly except for vim.path_hook
384 in case you need to do something with sys.meta_path. It is not
385 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200386 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200387
388vim._get_paths *python-_get_paths*
389 Methods returning a list of paths which will be searched for by path
390 hook. You should not rely on this method being present in future
391 versions, but can use it for debugging.
392
393 It returns a list of {rtp}/python2 (or {rtp}/python3) and
394 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
395
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396==============================================================================
3973. Buffer objects *python-buffer*
398
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000399Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000400 - via vim.current.buffer (|python-current|)
401 - from indexing vim.buffers (|python-buffers|)
402 - from the "buffer" attribute of a window (|python-window|)
403
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100404Buffer objects have two read-only attributes - name - the full file name for
405the buffer, and number - the buffer number. They also have three methods
406(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000407
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000408You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000410element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000411including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000412you would expect. Note that the result of indexing (slicing) a buffer is a
413string (list of strings). This has one unusual consequence - b[:] is different
414from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415"b = None" merely updates the variable b, with no effect on the buffer.
416
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000417Buffer indexes start at zero, as is normal in Python. This differs from vim
418line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000419with marks (see below) which use vim line numbers.
420
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200421The buffer object attributes are:
422 b.vars Dictionary-like object used to access
423 |buffer-variable|s.
424 b.options Mapping object (supports item getting, setting and
425 deleting) that provides access to buffer-local options
426 and buffer-local values of |global-local| options. Use
427 |python-window|.options if option is window-local,
428 this object will raise KeyError. If option is
429 |global-local| and local value is missing getting it
430 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200431 b.name String, RW. Contains buffer name (full path).
432 Note: when assigning to b.name |BufFilePre| and
433 |BufFilePost| autocommands are launched.
434 b.number Buffer number. Can be used as |python-buffers| key.
435 Read-only.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200436 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200437 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200438
Bram Moolenaar071d4272004-06-13 20:20:40 +0000439The buffer object methods are:
440 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200441 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000442 b.append(list) Append a list of lines to the buffer
443 Note that the option of supplying a list of strings to
444 the append method differs from the equivalent method
445 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200446 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000447 b.mark(name) Return a tuple (row,col) representing the position
448 of the named mark (can also get the []"<> marks)
449 b.range(s,e) Return a range object (see |python-range|) which
450 represents the part of the given buffer between line
451 numbers s and e |inclusive|.
452
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000453Note that when adding a line it must not contain a line break character '\n'.
454A trailing '\n' is allowed and ignored, so that you can do: >
455 :py b.append(f.readlines())
456
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200457Buffer object type is available using "Buffer" attribute of vim module.
458
Bram Moolenaar071d4272004-06-13 20:20:40 +0000459Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000460 :py print b.name # write the buffer file name
461 :py b[0] = "hello!!!" # replace the top line
462 :py b[:] = None # delete the whole buffer
463 :py del b[:] # delete the whole buffer
464 :py b[0:0] = [ "a line" ] # add a line at the top
465 :py del b[2] # delete a line (the third)
466 :py b.append("bottom") # add a line at the bottom
467 :py n = len(b) # number of lines
468 :py (row,col) = b.mark('a') # named mark
469 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200470 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200471 :py b.options["ff"] = "dos" # set fileformat
472 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000473
474==============================================================================
4754. Range objects *python-range*
476
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000477Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000478number of ways:
479 - via vim.current.range (|python-current|)
480 - from a buffer's range() method (|python-buffer|)
481
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000482A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000483all operations are restricted to the lines within the range (this line range
484can, of course, change as a result of slice assignments, line deletions, or
485the range.append() method).
486
487The range object attributes are:
488 r.start Index of first line into the buffer
489 r.end Index of last line into the buffer
490
491The range object methods are:
492 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200493 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000494 r.append(list) Append a list of lines to the range
495 Note that the option of supplying a list of strings to
496 the append method differs from the equivalent method
497 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200498 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000499
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200500Range object type is available using "Range" attribute of vim module.
501
Bram Moolenaar071d4272004-06-13 20:20:40 +0000502Example (assume r is the current range):
503 # Send all lines in a range to the default printer
504 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
505
506==============================================================================
5075. Window objects *python-window*
508
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000509Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000510 - via vim.current.window (|python-current|)
511 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200512 - from indexing "windows" attribute of a tab page (|python-tabpage|)
513 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000514
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000515You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000516methods, and no sequence or other interface.
517
518Window attributes are:
519 buffer (read-only) The buffer displayed in this window
520 cursor (read-write) The current cursor position in the window
521 This is a tuple, (row,col).
522 height (read-write) The window height, in rows
523 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200524 vars (read-only) The window |w:| variables. Attribute is
525 unassignable, but you can change window
526 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200527 options (read-only) The window-local options. Attribute is
528 unassignable, but you can change window
529 options this way. Provides access only to
530 window-local options, for buffer-local use
531 |python-buffer| and for global ones use
532 |python-options|. If option is |global-local|
533 and local value is missing getting it will
534 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200535 number (read-only) Window number. The first window has number 1.
536 This is zero in case it cannot be determined
537 (e.g. when the window object belongs to other
538 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200539 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200540 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200541 tabpage (read-only) Window tab page.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200542 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200543 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200544
Bram Moolenaar071d4272004-06-13 20:20:40 +0000545The height attribute is writable only if the screen is split horizontally.
546The width attribute is writable only if the screen is split vertically.
547
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200548Window object type is available using "Window" attribute of vim module.
549
Bram Moolenaar071d4272004-06-13 20:20:40 +0000550==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005516. Tab page objects *python-tabpage*
552
553Tab page objects represent vim tab pages. You can obtain them in a number of
554ways:
555 - via vim.current.tabpage (|python-current|)
556 - from indexing vim.tabpages (|python-tabpages|)
557
558You can use this object to access tab page windows. They have no methods and
559no sequence or other interfaces.
560
561Tab page attributes are:
562 number The tab page number like the one returned by
563 |tabpagenr()|.
564 windows Like |python-windows|, but for current tab page.
565 vars The tab page |t:| variables.
566 window Current tabpage window.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200567 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200568 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200569
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200570TabPage object type is available using "TabPage" attribute of vim module.
571
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200572==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005737. vim.bindeval objects *python-bindeval-objects*
574
575vim.Dictionary object *python-Dictionary*
576 Dictionary-like object providing access to vim |Dictionary| type.
577 Attributes:
578 Attribute Description ~
579 locked One of *python-.locked*
580 Value Description ~
581 zero Variable is not locked
582 vim.VAR_LOCKED Variable is locked, but can be unlocked
583 vim.VAR_FIXED Variable is locked and can't be unlocked
584 Read-write. You can unlock locked variable by assigning
585 `True` or `False` to this attribute. No recursive locking
586 is supported.
587 scope One of
588 Value Description ~
589 zero Dictionary is not a scope one
590 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
591 vim.VAR_SCOPE Other scope dictionary,
592 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200593 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200594 Method Description ~
595 keys() Returns a list with dictionary keys.
596 values() Returns a list with dictionary values.
597 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200598 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200599 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200600 get(key[, default=None])
601 Obtain key from dictionary, returning the default if it is
602 not present.
603 pop(key[, default])
604 Remove specified key from dictionary and return
605 corresponding value. If key is not found and default is
606 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200607 popitem()
608 Remove random key from dictionary and return (key, value)
609 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200610 has_key(key)
611 Check whether dictionary contains specified key, similar
612 to `key in dict`.
613
614 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
615 You can use `vim.Dictionary()` to create new vim
616 dictionaries. `d=vim.Dictionary(arg)` is the same as
617 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
618 constructs empty dictionary.
619
Bram Moolenaara9922d62013-05-30 13:01:18 +0200620 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200621 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200622 d['a'] = 'b' # Item assignment
623 print d['a'] # getting item
624 d.update({'c': 'd'}) # .update(dictionary)
625 d.update(e='f') # .update(**kwargs)
626 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
627 for key in d.keys(): # .keys()
628 for val in d.values(): # .values()
629 for key, val in d.items(): # .items()
630 print isinstance(d, vim.Dictionary) # True
631 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200632 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200633<
634 Note: when iterating over keys you should not modify dictionary.
635
636vim.List object *python-List*
637 Sequence-like object providing access to vim |List| type.
638 Supports `.locked` attribute, see |python-.locked|. Also supports the
639 following methods:
640 Method Description ~
641 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200642
643 __new__(), __new__(iterable)
644 You can use `vim.List()` to create new vim lists.
645 `l=vim.List(iterable)` is the same as
646 `l=vim.bindeval('[]');l.extend(iterable)`. Without
647 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200648 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200649 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200650 l.extend(['abc', 'def']) # .extend() method
651 print l[1:] # slicing
652 l[:0] = ['ghi', 'jkl'] # slice assignment
653 print l[0] # getting item
654 l[0] = 'mno' # assignment
655 for i in l: # iteration
656 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200657 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200658
659vim.Function object *python-Function*
Bram Moolenaar8110a092016-04-14 15:56:09 +0200660 Function-like object, acting like vim |Funcref| object. Accepts special
661 keyword argument `self`, see |Dictionary-function|. You can also use
662 `vim.Function(name)` constructor, it is the same as
663 `vim.bindeval('function(%s)'%json.dumps(name))`.
664
665 Attributes (read-only):
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200666 Attribute Description ~
667 name Function name.
668 args `None` or a |python-List| object with arguments. Note
669 that this is a copy of the arguments list, constructed
670 each time you request this attribute. Modifications made
671 to the list will be ignored (but not to the containers
672 inside argument list: this is like |copy()| and not
673 |deepcopy()|).
674 self `None` or a |python-Dictionary| object with self
675 dictionary. Note that explicit `self` keyword used when
676 calling resulting object overrides this attribute.
677 auto_rebind Boolean. True if partial created from this Python object
678 and stored in the VimL dictionary should be automatically
679 rebound to the dictionary it is stored in when this
680 dictionary is indexed. Exposes Vim internal difference
681 between `dict.func` (auto_rebind=True) and
682 `function(dict.func,dict)` (auto_rebind=False). This
683 attribute makes no sense if `self` attribute is `None`.
Bram Moolenaar8110a092016-04-14 15:56:09 +0200684
Bram Moolenaar2177f9f2016-05-25 20:39:09 +0200685 Constructor additionally accepts `args`, `self` and `auto_rebind`
686 keywords. If `args` and/or `self` argument is given then it constructs
687 a partial, see |function()|. `auto_rebind` is only used when `self`
688 argument is given, otherwise it is assumed to be `True` regardless of
689 whether it was given or not. If `self` is given then it defaults to
690 `False`.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200691
Bram Moolenaara9922d62013-05-30 13:01:18 +0200692 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200693 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200694 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
695 vim.command('''
696 function DictFun() dict
697 return self
698 endfunction
699 ''')
700 f = vim.bindeval('function("DictFun")')
701 print f(self={}) # Like call('DictFun', [], {})
702 print isinstance(f, vim.Function) # True
703
Bram Moolenaar8110a092016-04-14 15:56:09 +0200704 p = vim.Function('DictFun', self={})
705 print f()
706 p = vim.Function('tr', args=['abc', 'a'])
707 print f('b')
708
Bram Moolenaara9922d62013-05-30 13:01:18 +0200709==============================================================================
7108. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200711
712To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
713functions to evaluate Python expressions and pass their values to VimL.
714
715==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007169. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000717
Bram Moolenaard94464e2015-11-02 15:28:18 +0100718On MS-Windows and Unix the Python library can be loaded dynamically. The
719|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000720
Bram Moolenaard94464e2015-11-02 15:28:18 +0100721This means that Vim will search for the Python DLL or shared library file only
722when needed. When you don't use the Python interface you don't need it, thus
723you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000724
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100725
726MS-Windows ~
727
728To use the Python interface the Python DLL must be in your search path. In a
729console window type "path" to see what directories are used. The 'pythondll'
730or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000731
732The name of the DLL must match the Python version Vim was compiled with.
733Currently the name is "python24.dll". That is for Python 2.4. To know for
734sure edit "gvim.exe" and search for "python\d*.dll\c".
735
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100736
737Unix ~
738
739The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
740shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
741what were specified at compile time. The version of the shared library must
742match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100743
Bram Moolenaara5792f52005-11-23 21:25:05 +0000744==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020074510. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200746
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200747 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200748The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100749if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200750 :py3 print("Hello")
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200751
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200752To see what version of Python you have: >
753 :py3 import sys
754 :py3 print(sys.version)
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200755< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200756The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200757 *:py3do*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200758The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200759
Bram Moolenaar30b65812012-07-12 22:01:11 +0200760
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200761Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007621. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007632. Python 2 support only (+python or +python/dyn, -python3)
7643. Python 3 support only (-python, +python3 or +python3/dyn)
7654. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200766
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200767Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200768
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200769When Python 2 and Python 3 are both supported they must be loaded dynamically.
770
771When doing this on Linux/Unix systems and importing global symbols, this leads
772to a crash when the second Python version is used. So either global symbols
773are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200774loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200775symbols to be provided by Vim.
776 *E836* *E837*
777Vim's configuration script makes a guess for all libraries based on one
778standard Python library (termios). If importing this library succeeds for
779both Python versions, then both will be made available in Vim at the same
780time. If not, only the version first used in a session will be enabled.
781When trying to use the other one you will get the E836 or E837 error message.
782
783Here Vim's behavior depends on the system in which it was configured. In a
784system where both versions of Python were configured with --enable-shared,
785both versions of Python will be activated at the same time. There will still
786be problems with other third party libraries that were not linked to
787libPython.
788
789To work around such problems there are these options:
7901. The problematic library is recompiled to link to the according
791 libpython.so.
7922. Vim is recompiled for only one Python version.
7933. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
794 may crash Vim though.
795
Bram Moolenaar41009372013-07-01 22:03:04 +0200796 *E880*
797Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
798 :py vim.command("qall!")
799<
800
Bram Moolenaar446beb42011-05-10 17:18:44 +0200801 *has-python*
802You can test what Python version is available with: >
803 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200804 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200805 elseif has('python3')
806 echo 'there is Python 3.x'
807 endif
808
809Note however, that when Python 2 and 3 are both available and loaded
810dynamically, these has() calls will try to load them. If only one can be
811loaded at a time, just checking if Python 2 or 3 are available will prevent
812the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200813
814==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000815 vim:tw=78:ts=8:ft=help:norl: