blob: cec23dbecbded39e9fbf4efdf1bf424cb6178ce1 [file] [log] [blame]
Bram Moolenaarb4ff5182015-11-10 21:15:48 +01001*if_pyth.txt* For Vim version 7.4. Last change: 2015 Nov 10
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
59<
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010060Note: Python is very sensitive to the indenting. Make sure the "class" line
61and "EOF" do not have any indent.
Bram Moolenaar071d4272004-06-13 20:20:40 +000062
Bram Moolenaard620aa92013-05-17 16:40:06 +020063 *:pydo*
64:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr):
65 {body}" for each line in the [range], with the
66 function arguments being set to the text of each line
67 in turn, without a trailing <EOL>, and the current
68 line number. The function should return a string or
69 None. If a string is returned, it becomes the text of
70 the line in the current turn. The default for [range]
71 is the whole file: "1,$".
72 {not in Vi}
73
74Examples:
75>
76 :pydo return "%s\t%d" % (line[::-1], len(line))
77 :pydo if line: return "%4d: %s" % (linenr, line)
78<
Bram Moolenaar071d4272004-06-13 20:20:40 +000079 *:pyfile* *:pyf*
80:[range]pyf[ile] {file}
81 Execute the Python script in {file}. The whole
82 argument is used as a single file name. {not in Vi}
83
84Both of these commands do essentially the same thing - they execute a piece of
85Python code, with the "current range" |python-range| set to the given line
86range.
87
88In the case of :python, the code to execute is in the command-line.
89In the case of :pyfile, the code to execute is the contents of the given file.
90
91Python commands cannot be used in the |sandbox|.
92
93To pass arguments you need to set sys.argv[] explicitly. Example: >
94
95 :python import sys
96 :python sys.argv = ["foo", "bar"]
97 :pyfile myscript.py
98
99Here are some examples *python-examples* >
100
101 :python from vim import *
102 :python from string import upper
103 :python current.line = upper(current.line)
104 :python print "Hello"
105 :python str = current.buffer[42]
106
107(Note that changes - like the imports - persist from one command to the next,
108just like in the Python interpreter.)
109
110==============================================================================
1112. The vim module *python-vim*
112
113Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000114|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115methods, three constants, and one error object. You need to import the vim
116module before using it: >
117 :python import vim
118
119Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000120 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100121 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000122 :py w = vim.windows[n] # gets window "n"
123 :py cw = vim.current.window # gets the current window
124 :py b = vim.buffers[n] # gets buffer "n"
125 :py cb = vim.current.buffer # gets the current buffer
126 :py w.height = lines # sets the window height
127 :py w.cursor = (row, col) # sets the window cursor position
128 :py pos = w.cursor # gets a tuple (row, col)
129 :py name = b.name # gets the buffer file name
130 :py line = b[n] # gets a line from the buffer
131 :py lines = b[n:m] # gets a list of lines
132 :py num = len(b) # gets the number of lines
133 :py b[n] = str # sets a line in the buffer
134 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
135 :py del b[n] # deletes a line
136 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137
138
139Methods of the "vim" module
140
141vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000142 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000144 :py vim.command("set tw=72")
145 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146< The following definition executes Normal mode commands: >
147 def normal(str):
148 vim.command("normal "+str)
149 # Note the use of single quotes to delimit a string containing
150 # double quotes
151 normal('"a2dd"aP')
152< *E659*
153 The ":python" command cannot be used recursively with Python 2.2 and
154 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000155 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
157vim.eval(str) *python-eval*
158 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000159 evaluator (see |expression|). Returns the expression result as:
160 - a string if the Vim expression evaluates to a string or number
161 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000162 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000163 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000165 :py text_width = vim.eval("&tw")
166 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167 # string.atoi() to convert to
168 # a number.
169
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000170 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000171< The latter will return a python list of python dicts, for instance:
172 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
173 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
174
Bram Moolenaar30b65812012-07-12 22:01:11 +0200175vim.bindeval(str) *python-bindeval*
Bram Moolenaara9922d62013-05-30 13:01:18 +0200176 Like |python-eval|, but returns special objects described in
177 |python-bindeval-objects|. These python objects let you modify (|List|
Bram Moolenaarde71b562013-06-02 17:41:54 +0200178 or |Dictionary|) or call (|Funcref|) vim objects.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000179
Bram Moolenaarbc411962013-06-02 17:46:40 +0200180vim.strwidth(str) *python-strwidth*
181 Like |strwidth()|: returns number of display cells str occupies, tab
182 is counted as one cell.
183
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200184vim.foreach_rtp(callable) *python-foreach_rtp*
185 Call the given callable for each path in 'runtimepath' until either
186 callable returns something but None, the exception is raised or there
187 are no longer paths. If stopped in case callable returned non-None,
188 vim.foreach_rtp function returns the value returned by callable.
189
Bram Moolenaarf4258302013-06-02 18:20:17 +0200190vim.chdir(*args, **kwargs) *python-chdir*
191vim.fchdir(*args, **kwargs) *python-fchdir*
192 Run os.chdir or os.fchdir, then all appropriate vim stuff.
193 Note: you should not use these functions directly, use os.chdir and
194 os.fchdir instead. Behavior of vim.fchdir is undefined in case
195 os.fchdir does not exist.
196
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197Error object of the "vim" module
198
199vim.error *python-error*
200 Upon encountering a Vim error, Python raises an exception of type
201 vim.error.
202 Example: >
203 try:
204 vim.command("put a")
205 except vim.error:
206 # nothing in register a
207
208Constants of the "vim" module
209
210 Note that these are not actually constants - you could reassign them.
211 But this is silly, as you would then lose access to the vim objects
212 to which the variables referred.
213
214vim.buffers *python-buffers*
Bram Moolenaardfa38d42013-05-15 13:38:47 +0200215 A mapping object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000217 :py b = vim.buffers[i] # Indexing (read-only)
218 :py b in vim.buffers # Membership test
219 :py n = len(vim.buffers) # Number of elements
Bram Moolenaarb6c589a2013-05-15 14:39:52 +0200220 :py for b in vim.buffers: # Iterating over buffer list
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221<
222vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000223 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000224 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000225 :py w = vim.windows[i] # Indexing (read-only)
226 :py w in vim.windows # Membership test
227 :py n = len(vim.windows) # Number of elements
228 :py for w in vim.windows: # Sequential access
Bram Moolenaarde71b562013-06-02 17:41:54 +0200229< Note: vim.windows object always accesses current tab page.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200230 |python-tabpage|.windows objects are bound to parent |python-tabpage|
231 object and always use windows from that tab page (or throw vim.error
232 in case tab page was deleted). You can keep a reference to both
233 without keeping a reference to vim module object or |python-tabpage|,
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200234 they will not lose their properties in this case.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200235
236vim.tabpages *python-tabpages*
237 A sequence object providing access to the list of vim tab pages. The
238 object supports the following operations: >
239 :py t = vim.tabpages[i] # Indexing (read-only)
240 :py t in vim.tabpages # Membership test
241 :py n = len(vim.tabpages) # Number of elements
242 :py for t in vim.tabpages: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243<
244vim.current *python-current*
245 An object providing access (via specific attributes) to various
246 "current" objects available in vim:
247 vim.current.line The current line (RW) String
Bram Moolenaare7614592013-05-15 15:51:08 +0200248 vim.current.buffer The current buffer (RW) Buffer
249 vim.current.window The current window (RW) Window
250 vim.current.tabpage The current tab page (RW) TabPage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000251 vim.current.range The current line range (RO) Range
252
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000253 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000254 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000255 "current range". A range is a bit like a buffer, but with all access
256 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257
Bram Moolenaare7614592013-05-15 15:51:08 +0200258 Note: When assigning to vim.current.{buffer,window,tabpage} it expects
259 valid |python-buffer|, |python-window| or |python-tabpage| objects
260 respectively. Assigning triggers normal (with |autocommand|s)
261 switching to given buffer, window or tab page. It is the only way to
262 switch UI objects in python: you can't assign to
263 |python-tabpage|.window attribute. To switch without triggering
264 autocommands use >
265 py << EOF
266 saved_eventignore = vim.options['eventignore']
267 vim.options['eventignore'] = 'all'
268 try:
269 vim.current.buffer = vim.buffers[2] # Switch to buffer 2
270 finally:
271 vim.options['eventignore'] = saved_eventignore
272 EOF
273<
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200274vim.vars *python-vars*
275vim.vvars *python-vvars*
276 Dictionary-like objects holding dictionaries with global (|g:|) and
277 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`,
278 but faster.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200280vim.options *python-options*
281 Object partly supporting mapping protocol (supports setting and
282 getting items) providing a read-write access to global options.
283 Note: unlike |:set| this provides access only to global options. You
284 cannot use this object to obtain or set local options' values or
285 access local-only options in any fashion. Raises KeyError if no global
286 option with such name exists (i.e. does not raise KeyError for
287 |global-local| options and global only options, but does for window-
288 and buffer-local ones). Use |python-buffer| objects to access to
289 buffer-local options and |python-window| objects to access to
290 window-local options.
291
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200292 Type of this object is available via "Options" attribute of vim
293 module.
294
Bram Moolenaar071d4272004-06-13 20:20:40 +0000295Output from Python *python-output*
296 Vim displays all Python code output in the Vim message area. Normal
297 output appears as information messages, and error output appears as
298 error messages.
299
300 In implementation terms, this means that all output to sys.stdout
301 (including the output from print statements) appears as information
302 messages, and all output to sys.stderr (including error tracebacks)
303 appears as error messages.
304
305 *python-input*
306 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000307 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308 fixed.
309
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200310 *python2-directory* *python3-directory* *pythonx-directory*
311Python 'runtimepath' handling *python-special-path*
312
313In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for
314the list of paths found in 'runtimepath': with this directory in sys.path and
315vim.path_hooks in sys.path_hooks python will try to load module from
316{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for
317each {rtp} found in 'runtimepath'.
318
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200319Implementation is similar to the following, but written in C: >
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200320
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200321 from imp import find_module, load_module
322 import vim
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200323 import sys
324
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200325 class VimModuleLoader(object):
326 def __init__(self, module):
327 self.module = module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200328
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200329 def load_module(self, fullname, path=None):
330 return self.module
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200331
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200332 def _find_module(fullname, oldtail, path):
333 idx = oldtail.find('.')
334 if idx > 0:
335 name = oldtail[:idx]
336 tail = oldtail[idx+1:]
337 fmr = find_module(name, path)
338 module = load_module(fullname[:-len(oldtail)] + name, *fmr)
339 return _find_module(fullname, tail, module.__path__)
340 else:
341 fmr = find_module(fullname, path)
342 return load_module(fullname, *fmr)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200343
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200344 # It uses vim module itself in place of VimPathFinder class: it does not
345 # matter for python which object has find_module function attached to as
346 # an attribute.
347 class VimPathFinder(object):
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200348 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200349 def find_module(cls, fullname, path=None):
350 try:
351 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
352 except ImportError:
353 return None
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200354
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200355 @classmethod
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200356 def load_module(cls, fullname, path=None):
357 return _find_module(fullname, fullname, path or vim._get_paths())
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200358
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200359 def hook(path):
360 if path == vim.VIM_SPECIAL_PATH:
361 return VimPathFinder
362 else:
363 raise ImportError
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200364
Bram Moolenaar9f3685a2013-06-12 14:20:36 +0200365 sys.path_hooks.append(hook)
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200366
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200367vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH*
368 String constant used in conjunction with vim path hook. If path hook
369 installed by vim is requested to handle anything but path equal to
370 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other
371 case it uses special loader.
372
373 Note: you must not use value of this constant directly, always use
374 vim.VIM_SPECIAL_PATH object.
375
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200376vim.find_module(...) *python-find_module*
377vim.path_hook(path) *python-path_hook*
378 Methods or objects used to implement path loading as described above.
379 You should not be using any of these directly except for vim.path_hook
380 in case you need to do something with sys.meta_path. It is not
381 guaranteed that any of the objects will exist in the future vim
Bram Moolenaar81c40c52013-06-12 14:41:04 +0200382 versions.
Bram Moolenaarc09a6d62013-06-10 21:27:29 +0200383
384vim._get_paths *python-_get_paths*
385 Methods returning a list of paths which will be searched for by path
386 hook. You should not rely on this method being present in future
387 versions, but can use it for debugging.
388
389 It returns a list of {rtp}/python2 (or {rtp}/python3) and
390 {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
391
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392==============================================================================
3933. Buffer objects *python-buffer*
394
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000395Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396 - via vim.current.buffer (|python-current|)
397 - from indexing vim.buffers (|python-buffers|)
398 - from the "buffer" attribute of a window (|python-window|)
399
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +0100400Buffer objects have two read-only attributes - name - the full file name for
401the buffer, and number - the buffer number. They also have three methods
402(append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000404You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000405act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000406element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000407including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000408you would expect. Note that the result of indexing (slicing) a buffer is a
409string (list of strings). This has one unusual consequence - b[:] is different
410from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000411"b = None" merely updates the variable b, with no effect on the buffer.
412
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000413Buffer indexes start at zero, as is normal in Python. This differs from vim
414line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415with marks (see below) which use vim line numbers.
416
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200417The buffer object attributes are:
418 b.vars Dictionary-like object used to access
419 |buffer-variable|s.
420 b.options Mapping object (supports item getting, setting and
421 deleting) that provides access to buffer-local options
422 and buffer-local values of |global-local| options. Use
423 |python-window|.options if option is window-local,
424 this object will raise KeyError. If option is
425 |global-local| and local value is missing getting it
426 will return None.
Bram Moolenaare9ba5162013-05-29 22:02:22 +0200427 b.name String, RW. Contains buffer name (full path).
428 Note: when assigning to b.name |BufFilePre| and
429 |BufFilePost| autocommands are launched.
430 b.number Buffer number. Can be used as |python-buffers| key.
431 Read-only.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200432 b.valid True or False. Buffer object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200433 corresponding buffer is wiped out.
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200434
Bram Moolenaar071d4272004-06-13 20:20:40 +0000435The buffer object methods are:
436 b.append(str) Append a line to the buffer
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200437 b.append(str, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000438 b.append(list) Append a list of lines to the buffer
439 Note that the option of supplying a list of strings to
440 the append method differs from the equivalent method
441 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200442 b.append(list, nr) Idem, below line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000443 b.mark(name) Return a tuple (row,col) representing the position
444 of the named mark (can also get the []"<> marks)
445 b.range(s,e) Return a range object (see |python-range|) which
446 represents the part of the given buffer between line
447 numbers s and e |inclusive|.
448
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000449Note that when adding a line it must not contain a line break character '\n'.
450A trailing '\n' is allowed and ignored, so that you can do: >
451 :py b.append(f.readlines())
452
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200453Buffer object type is available using "Buffer" attribute of vim module.
454
Bram Moolenaar071d4272004-06-13 20:20:40 +0000455Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000456 :py print b.name # write the buffer file name
457 :py b[0] = "hello!!!" # replace the top line
458 :py b[:] = None # delete the whole buffer
459 :py del b[:] # delete the whole buffer
460 :py b[0:0] = [ "a line" ] # add a line at the top
461 :py del b[2] # delete a line (the third)
462 :py b.append("bottom") # add a line at the bottom
463 :py n = len(b) # number of lines
464 :py (row,col) = b.mark('a') # named mark
465 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200466 :py b.vars["foo"] = "bar" # assign b:foo variable
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200467 :py b.options["ff"] = "dos" # set fileformat
468 :py del b.options["ar"] # same as :set autoread<
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469
470==============================================================================
4714. Range objects *python-range*
472
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000473Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474number of ways:
475 - via vim.current.range (|python-current|)
476 - from a buffer's range() method (|python-buffer|)
477
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000478A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000479all operations are restricted to the lines within the range (this line range
480can, of course, change as a result of slice assignments, line deletions, or
481the range.append() method).
482
483The range object attributes are:
484 r.start Index of first line into the buffer
485 r.end Index of last line into the buffer
486
487The range object methods are:
488 r.append(str) Append a line to the range
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200489 r.append(str, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490 r.append(list) Append a list of lines to the range
491 Note that the option of supplying a list of strings to
492 the append method differs from the equivalent method
493 for Python's built-in list objects.
Bram Moolenaar2c3b1d92010-07-24 16:58:02 +0200494 r.append(list, nr) Idem, after line "nr"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000495
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200496Range object type is available using "Range" attribute of vim module.
497
Bram Moolenaar071d4272004-06-13 20:20:40 +0000498Example (assume r is the current range):
499 # Send all lines in a range to the default printer
500 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
501
502==============================================================================
5035. Window objects *python-window*
504
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000505Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000506 - via vim.current.window (|python-current|)
507 - from indexing vim.windows (|python-windows|)
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200508 - from indexing "windows" attribute of a tab page (|python-tabpage|)
509 - from the "window" attribute of a tab page (|python-tabpage|)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000510
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000511You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000512methods, and no sequence or other interface.
513
514Window attributes are:
515 buffer (read-only) The buffer displayed in this window
516 cursor (read-write) The current cursor position in the window
517 This is a tuple, (row,col).
518 height (read-write) The window height, in rows
519 width (read-write) The window width, in columns
Bram Moolenaar230bb3f2013-04-24 14:07:45 +0200520 vars (read-only) The window |w:| variables. Attribute is
521 unassignable, but you can change window
522 variables this way
Bram Moolenaar84e0f6c2013-05-06 03:52:55 +0200523 options (read-only) The window-local options. Attribute is
524 unassignable, but you can change window
525 options this way. Provides access only to
526 window-local options, for buffer-local use
527 |python-buffer| and for global ones use
528 |python-options|. If option is |global-local|
529 and local value is missing getting it will
530 return None.
Bram Moolenaar6d216452013-05-12 19:00:41 +0200531 number (read-only) Window number. The first window has number 1.
532 This is zero in case it cannot be determined
533 (e.g. when the window object belongs to other
534 tab page).
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200535 row, col (read-only) On-screen window position in display cells.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200536 First position is zero.
Bram Moolenaarcabf80f2013-05-17 16:18:33 +0200537 tabpage (read-only) Window tab page.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200538 valid (read-write) True or False. Window object becomes invalid
Bram Moolenaarbc411962013-06-02 17:46:40 +0200539 when corresponding window is closed.
Bram Moolenaar4e5dfb52013-05-12 19:30:31 +0200540
Bram Moolenaar071d4272004-06-13 20:20:40 +0000541The height attribute is writable only if the screen is split horizontally.
542The width attribute is writable only if the screen is split vertically.
543
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200544Window object type is available using "Window" attribute of vim module.
545
Bram Moolenaar071d4272004-06-13 20:20:40 +0000546==============================================================================
Bram Moolenaar5e538ec2013-05-15 15:12:29 +02005476. Tab page objects *python-tabpage*
548
549Tab page objects represent vim tab pages. You can obtain them in a number of
550ways:
551 - via vim.current.tabpage (|python-current|)
552 - from indexing vim.tabpages (|python-tabpages|)
553
554You can use this object to access tab page windows. They have no methods and
555no sequence or other interfaces.
556
557Tab page attributes are:
558 number The tab page number like the one returned by
559 |tabpagenr()|.
560 windows Like |python-windows|, but for current tab page.
561 vars The tab page |t:| variables.
562 window Current tabpage window.
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200563 valid True or False. Tab page object becomes invalid when
Bram Moolenaarbc411962013-06-02 17:46:40 +0200564 corresponding tab page is closed.
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200565
Bram Moolenaarcac867a2013-05-21 19:50:34 +0200566TabPage object type is available using "TabPage" attribute of vim module.
567
Bram Moolenaar5e538ec2013-05-15 15:12:29 +0200568==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02005697. vim.bindeval objects *python-bindeval-objects*
570
571vim.Dictionary object *python-Dictionary*
572 Dictionary-like object providing access to vim |Dictionary| type.
573 Attributes:
574 Attribute Description ~
575 locked One of *python-.locked*
576 Value Description ~
577 zero Variable is not locked
578 vim.VAR_LOCKED Variable is locked, but can be unlocked
579 vim.VAR_FIXED Variable is locked and can't be unlocked
580 Read-write. You can unlock locked variable by assigning
581 `True` or `False` to this attribute. No recursive locking
582 is supported.
583 scope One of
584 Value Description ~
585 zero Dictionary is not a scope one
586 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary
587 vim.VAR_SCOPE Other scope dictionary,
588 see |internal-variables|
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200589 Methods (note: methods do not support keyword arguments):
Bram Moolenaara9922d62013-05-30 13:01:18 +0200590 Method Description ~
591 keys() Returns a list with dictionary keys.
592 values() Returns a list with dictionary values.
593 items() Returns a list of 2-tuples with dictionary contents.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200594 update(iterable), update(dictionary), update(**kwargs)
Bram Moolenaara9922d62013-05-30 13:01:18 +0200595 Adds keys to dictionary.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200596 get(key[, default=None])
597 Obtain key from dictionary, returning the default if it is
598 not present.
599 pop(key[, default])
600 Remove specified key from dictionary and return
601 corresponding value. If key is not found and default is
602 given returns the default, otherwise raises KeyError.
Bram Moolenaarde71b562013-06-02 17:41:54 +0200603 popitem()
604 Remove random key from dictionary and return (key, value)
605 pair.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200606 has_key(key)
607 Check whether dictionary contains specified key, similar
608 to `key in dict`.
609
610 __new__(), __new__(iterable), __new__(dictionary), __new__(update)
611 You can use `vim.Dictionary()` to create new vim
612 dictionaries. `d=vim.Dictionary(arg)` is the same as
613 `d=vim.bindeval('{}');d.update(arg)`. Without arguments
614 constructs empty dictionary.
615
Bram Moolenaara9922d62013-05-30 13:01:18 +0200616 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200617 d = vim.Dictionary(food="bar") # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200618 d['a'] = 'b' # Item assignment
619 print d['a'] # getting item
620 d.update({'c': 'd'}) # .update(dictionary)
621 d.update(e='f') # .update(**kwargs)
622 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable)
623 for key in d.keys(): # .keys()
624 for val in d.values(): # .values()
625 for key, val in d.items(): # .items()
626 print isinstance(d, vim.Dictionary) # True
627 for key in d: # Iteration over keys
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200628 class Dict(vim.Dictionary): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200629<
630 Note: when iterating over keys you should not modify dictionary.
631
632vim.List object *python-List*
633 Sequence-like object providing access to vim |List| type.
634 Supports `.locked` attribute, see |python-.locked|. Also supports the
635 following methods:
636 Method Description ~
637 extend(item) Add items to the list.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200638
639 __new__(), __new__(iterable)
640 You can use `vim.List()` to create new vim lists.
641 `l=vim.List(iterable)` is the same as
642 `l=vim.bindeval('[]');l.extend(iterable)`. Without
643 arguments constructs empty list.
Bram Moolenaara9922d62013-05-30 13:01:18 +0200644 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200645 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c']
Bram Moolenaara9922d62013-05-30 13:01:18 +0200646 l.extend(['abc', 'def']) # .extend() method
647 print l[1:] # slicing
648 l[:0] = ['ghi', 'jkl'] # slice assignment
649 print l[0] # getting item
650 l[0] = 'mno' # assignment
651 for i in l: # iteration
652 print isinstance(l, vim.List) # True
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200653 class List(vim.List): # Subclassing
Bram Moolenaara9922d62013-05-30 13:01:18 +0200654
655vim.Function object *python-Function*
Bram Moolenaar8110a092016-04-14 15:56:09 +0200656 Function-like object, acting like vim |Funcref| object. Accepts special
657 keyword argument `self`, see |Dictionary-function|. You can also use
658 `vim.Function(name)` constructor, it is the same as
659 `vim.bindeval('function(%s)'%json.dumps(name))`.
660
661 Attributes (read-only):
662 Attribute Description ~
663 name Function name.
664 args `None` or a |python-List| object with arguments. Note that
665 this is a copy of the arguments list, constructed each time
666 you request this attribute. Modifications made to the list
667 will be ignored (but not to the containers inside argument
668 list: this is like |copy()| and not |deepcopy()|).
669 self `None` or a |python-Dictionary| object with self
670 dictionary. Note that explicit `self` keyword used when
671 calling resulting object overrides this attribute.
672
673 Constructor additionally accepts `args` and `self` keywords. If any of
674 them is given then it constructs a partial, see |function()|.
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200675
Bram Moolenaara9922d62013-05-30 13:01:18 +0200676 Examples: >
Bram Moolenaar305b2fd2013-05-30 13:32:30 +0200677 f = vim.Function('tr') # Constructor
Bram Moolenaara9922d62013-05-30 13:01:18 +0200678 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b')
679 vim.command('''
680 function DictFun() dict
681 return self
682 endfunction
683 ''')
684 f = vim.bindeval('function("DictFun")')
685 print f(self={}) # Like call('DictFun', [], {})
686 print isinstance(f, vim.Function) # True
687
Bram Moolenaar8110a092016-04-14 15:56:09 +0200688 p = vim.Function('DictFun', self={})
689 print f()
690 p = vim.Function('tr', args=['abc', 'a'])
691 print f('b')
692
Bram Moolenaara9922d62013-05-30 13:01:18 +0200693==============================================================================
6948. pyeval() and py3eval() Vim functions *python-pyeval*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200695
696To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()|
697functions to evaluate Python expressions and pass their values to VimL.
698
699==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +02007009. Dynamic loading *python-dynamic*
Bram Moolenaara5792f52005-11-23 21:25:05 +0000701
Bram Moolenaard94464e2015-11-02 15:28:18 +0100702On MS-Windows and Unix the Python library can be loaded dynamically. The
703|:version| output then includes |+python/dyn| or |+python3/dyn|.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000704
Bram Moolenaard94464e2015-11-02 15:28:18 +0100705This means that Vim will search for the Python DLL or shared library file only
706when needed. When you don't use the Python interface you don't need it, thus
707you can use Vim without this file.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000708
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100709
710MS-Windows ~
711
712To use the Python interface the Python DLL must be in your search path. In a
713console window type "path" to see what directories are used. The 'pythondll'
714or 'pythonthreedll' option can be also used to specify the Python DLL.
Bram Moolenaara5792f52005-11-23 21:25:05 +0000715
716The name of the DLL must match the Python version Vim was compiled with.
717Currently the name is "python24.dll". That is for Python 2.4. To know for
718sure edit "gvim.exe" and search for "python\d*.dll\c".
719
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100720
721Unix ~
722
723The 'pythondll' or 'pythonthreedll' option can be used to specify the Python
724shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file
725what were specified at compile time. The version of the shared library must
726match the Python 2.x or Python 3 version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100727
Bram Moolenaara5792f52005-11-23 21:25:05 +0000728==============================================================================
Bram Moolenaara9922d62013-05-30 13:01:18 +020072910. Python 3 *python3*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200730
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200731 *:py3* *:python3*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200732The `:py3` and `:python3` commands work similar to `:python`. A simple check
Bram Moolenaarfa13eef2013-02-06 17:34:04 +0100733if the `:py3` command is working: >
Bram Moolenaar9b451252012-08-15 17:43:31 +0200734 :py3 print("Hello")
735< *:py3file*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200736The `:py3file` command works similar to `:pyfile`.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200737 *:py3do*
Bram Moolenaard620aa92013-05-17 16:40:06 +0200738The `:py3do` command works similar to `:pydo`.
Bram Moolenaar3dab2802013-05-15 18:28:13 +0200739
Bram Moolenaar30b65812012-07-12 22:01:11 +0200740
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200741Vim can be built in four ways (:version output):
Bram Moolenaarbfc8b972010-08-13 22:05:54 +02007421. No Python support (-python, -python3)
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +02007432. Python 2 support only (+python or +python/dyn, -python3)
7443. Python 3 support only (-python, +python3 or +python3/dyn)
7454. Python 2 and 3 support (+python/dyn, +python3/dyn)
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200746
Bram Moolenaar9ba7e172013-07-17 22:37:26 +0200747Some more details on the special case 4: *python-2-and-3*
Bram Moolenaarede981a2010-08-11 23:37:32 +0200748
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200749When Python 2 and Python 3 are both supported they must be loaded dynamically.
750
751When doing this on Linux/Unix systems and importing global symbols, this leads
752to a crash when the second Python version is used. So either global symbols
753are loaded but only one Python version is activated, or no global symbols are
Bram Moolenaar483c5d82010-10-20 18:45:33 +0200754loaded. The latter makes Python's "import" fail on libraries that expect the
Bram Moolenaarbfc8b972010-08-13 22:05:54 +0200755symbols to be provided by Vim.
756 *E836* *E837*
757Vim's configuration script makes a guess for all libraries based on one
758standard Python library (termios). If importing this library succeeds for
759both Python versions, then both will be made available in Vim at the same
760time. If not, only the version first used in a session will be enabled.
761When trying to use the other one you will get the E836 or E837 error message.
762
763Here Vim's behavior depends on the system in which it was configured. In a
764system where both versions of Python were configured with --enable-shared,
765both versions of Python will be activated at the same time. There will still
766be problems with other third party libraries that were not linked to
767libPython.
768
769To work around such problems there are these options:
7701. The problematic library is recompiled to link to the according
771 libpython.so.
7722. Vim is recompiled for only one Python version.
7733. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This
774 may crash Vim though.
775
Bram Moolenaar41009372013-07-01 22:03:04 +0200776 *E880*
777Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
778 :py vim.command("qall!")
779<
780
Bram Moolenaar446beb42011-05-10 17:18:44 +0200781 *has-python*
782You can test what Python version is available with: >
783 if has('python')
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200784 echo 'there is Python 2.x'
Bram Moolenaar446beb42011-05-10 17:18:44 +0200785 elseif has('python3')
786 echo 'there is Python 3.x'
787 endif
788
789Note however, that when Python 2 and 3 are both available and loaded
790dynamically, these has() calls will try to load them. If only one can be
791loaded at a time, just checking if Python 2 or 3 are available will prevent
792the other one from being available.
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200793
794==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000795 vim:tw=78:ts=8:ft=help:norl: