blob: 953d95b8d5e75ac2356c35349267a33c58dee703 [file] [log] [blame]
Bram Moolenaarb6590522010-07-21 16:00:43 +02001*if_pyth.txt* For Vim version 7.3b. Last change: 2010 Jul 21
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Paul Moore
5
6
7The Python Interface to Vim *python* *Python*
8
91. 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 Moolenaara5792f52005-11-23 21:25:05 +0000146. Dynamic loading |python-dynamic|
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200157. Python 3 |python3|
Bram Moolenaar071d4272004-06-13 20:20:40 +000016
17{Vi does not have any of these commands}
18
Bram Moolenaar368373e2010-07-19 20:46:22 +020019The Python 2.x interface is available only when Vim was compiled with the
Bram Moolenaar071d4272004-06-13 20:20:40 +000020|+python| feature.
Bram Moolenaar368373e2010-07-19 20:46:22 +020021The Python 3 interface is available only when Vim was compiled with the
22|+python3| feature.
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
24==============================================================================
251. Commands *python-commands*
26
27 *:python* *:py* *E205* *E263* *E264*
28:[range]py[thon] {stmt}
29 Execute Python statement {stmt}.
30
31:[range]py[thon] << {endmarker}
32{script}
33{endmarker}
34 Execute Python script {script}.
35 Note: This command doesn't work when the Python
36 feature wasn't compiled in. To avoid errors, see
37 |script-here|.
38
39{endmarker} must NOT be preceded by any white space. If {endmarker} is
40omitted from after the "<<", a dot '.' must be used after {script}, like
41for the |:append| and |:insert| commands.
42This form of the |:python| command is mainly useful for including python code
43in Vim scripts.
44
45Example: >
46 function! IcecreamInitialize()
47 python << EOF
48 class StrawberryIcecream:
49 def __call__(self):
50 print 'EAT ME'
51 EOF
52 endfunction
53<
54Note: Python is very sensitive to the indenting. Also make sure the "class"
55line and "EOF" do not have any indent.
56
57 *:pyfile* *:pyf*
58:[range]pyf[ile] {file}
59 Execute the Python script in {file}. The whole
60 argument is used as a single file name. {not in Vi}
61
62Both of these commands do essentially the same thing - they execute a piece of
63Python code, with the "current range" |python-range| set to the given line
64range.
65
66In the case of :python, the code to execute is in the command-line.
67In the case of :pyfile, the code to execute is the contents of the given file.
68
69Python commands cannot be used in the |sandbox|.
70
71To pass arguments you need to set sys.argv[] explicitly. Example: >
72
73 :python import sys
74 :python sys.argv = ["foo", "bar"]
75 :pyfile myscript.py
76
77Here are some examples *python-examples* >
78
79 :python from vim import *
80 :python from string import upper
81 :python current.line = upper(current.line)
82 :python print "Hello"
83 :python str = current.buffer[42]
84
85(Note that changes - like the imports - persist from one command to the next,
86just like in the Python interpreter.)
87
88==============================================================================
892. The vim module *python-vim*
90
91Python code gets all of its access to vim (with one exception - see
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000092|python-output| below) via the "vim" module. The vim module implements two
Bram Moolenaar071d4272004-06-13 20:20:40 +000093methods, three constants, and one error object. You need to import the vim
94module before using it: >
95 :python import vim
96
97Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000098 :py print "Hello" # displays a message
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010099 :py vim.command(cmd) # execute an Ex command
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000100 :py w = vim.windows[n] # gets window "n"
101 :py cw = vim.current.window # gets the current window
102 :py b = vim.buffers[n] # gets buffer "n"
103 :py cb = vim.current.buffer # gets the current buffer
104 :py w.height = lines # sets the window height
105 :py w.cursor = (row, col) # sets the window cursor position
106 :py pos = w.cursor # gets a tuple (row, col)
107 :py name = b.name # gets the buffer file name
108 :py line = b[n] # gets a line from the buffer
109 :py lines = b[n:m] # gets a list of lines
110 :py num = len(b) # gets the number of lines
111 :py b[n] = str # sets a line in the buffer
112 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
113 :py del b[n] # deletes a line
114 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115
116
117Methods of the "vim" module
118
119vim.command(str) *python-command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000120 Executes the vim (ex-mode) command str. Returns None.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000122 :py vim.command("set tw=72")
123 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124< The following definition executes Normal mode commands: >
125 def normal(str):
126 vim.command("normal "+str)
127 # Note the use of single quotes to delimit a string containing
128 # double quotes
129 normal('"a2dd"aP')
130< *E659*
131 The ":python" command cannot be used recursively with Python 2.2 and
132 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000133 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134
135vim.eval(str) *python-eval*
136 Evaluates the expression str using the vim internal expression
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000137 evaluator (see |expression|). Returns the expression result as:
138 - a string if the Vim expression evaluates to a string or number
139 - a list if the Vim expression evaluates to a Vim list
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000140 - a dictionary if the Vim expression evaluates to a Vim dictionary
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000141 Dictionaries and lists are recursively expanded.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000143 :py text_width = vim.eval("&tw")
144 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 # string.atoi() to convert to
146 # a number.
147
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000148 :py tagList = vim.eval('taglist("eval_expr")')
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000149< The latter will return a python list of python dicts, for instance:
150 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
151 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
152
153
154
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155Error object of the "vim" module
156
157vim.error *python-error*
158 Upon encountering a Vim error, Python raises an exception of type
159 vim.error.
160 Example: >
161 try:
162 vim.command("put a")
163 except vim.error:
164 # nothing in register a
165
166Constants of the "vim" module
167
168 Note that these are not actually constants - you could reassign them.
169 But this is silly, as you would then lose access to the vim objects
170 to which the variables referred.
171
172vim.buffers *python-buffers*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000173 A sequence object providing access to the list of vim buffers. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000175 :py b = vim.buffers[i] # Indexing (read-only)
176 :py b in vim.buffers # Membership test
177 :py n = len(vim.buffers) # Number of elements
178 :py for b in vim.buffers: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179<
180vim.windows *python-windows*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000181 A sequence object providing access to the list of vim windows. The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000183 :py w = vim.windows[i] # Indexing (read-only)
184 :py w in vim.windows # Membership test
185 :py n = len(vim.windows) # Number of elements
186 :py for w in vim.windows: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187<
188vim.current *python-current*
189 An object providing access (via specific attributes) to various
190 "current" objects available in vim:
191 vim.current.line The current line (RW) String
192 vim.current.buffer The current buffer (RO) Buffer
193 vim.current.window The current window (RO) Window
194 vim.current.range The current line range (RO) Range
195
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000196 The last case deserves a little explanation. When the :python or
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197 :pyfile command specifies a range, this range of lines becomes the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000198 "current range". A range is a bit like a buffer, but with all access
199 restricted to a subset of lines. See |python-range| for more details.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200
201
202Output from Python *python-output*
203 Vim displays all Python code output in the Vim message area. Normal
204 output appears as information messages, and error output appears as
205 error messages.
206
207 In implementation terms, this means that all output to sys.stdout
208 (including the output from print statements) appears as information
209 messages, and all output to sys.stderr (including error tracebacks)
210 appears as error messages.
211
212 *python-input*
213 Input (via sys.stdin, including input() and raw_input()) is not
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000214 supported, and may cause the program to crash. This should probably be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215 fixed.
216
217==============================================================================
2183. Buffer objects *python-buffer*
219
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000220Buffer objects represent vim buffers. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221 - via vim.current.buffer (|python-current|)
222 - from indexing vim.buffers (|python-buffers|)
223 - from the "buffer" attribute of a window (|python-window|)
224
225Buffer objects have one read-only attribute - name - the full file name for
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000226the buffer. They also have three methods (append, mark, and range; see below).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000228You can also treat buffer objects as sequence objects. In this context, they
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229act as if they were lists (yes, they are mutable) of strings, with each
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000230element being a line of the buffer. All of the usual sequence operations,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231including indexing, index assignment, slicing and slice assignment, work as
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000232you would expect. Note that the result of indexing (slicing) a buffer is a
233string (list of strings). This has one unusual consequence - b[:] is different
234from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235"b = None" merely updates the variable b, with no effect on the buffer.
236
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000237Buffer indexes start at zero, as is normal in Python. This differs from vim
238line numbers, which start from 1. This is particularly relevant when dealing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239with marks (see below) which use vim line numbers.
240
241The buffer object methods are:
242 b.append(str) Append a line to the buffer
243 b.append(list) Append a list of lines to the buffer
244 Note that the option of supplying a list of strings to
245 the append method differs from the equivalent method
246 for Python's built-in list objects.
247 b.mark(name) Return a tuple (row,col) representing the position
248 of the named mark (can also get the []"<> marks)
249 b.range(s,e) Return a range object (see |python-range|) which
250 represents the part of the given buffer between line
251 numbers s and e |inclusive|.
252
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000253Note that when adding a line it must not contain a line break character '\n'.
254A trailing '\n' is allowed and ignored, so that you can do: >
255 :py b.append(f.readlines())
256
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000258 :py print b.name # write the buffer file name
259 :py b[0] = "hello!!!" # replace the top line
260 :py b[:] = None # delete the whole buffer
261 :py del b[:] # delete the whole buffer
262 :py b[0:0] = [ "a line" ] # add a line at the top
263 :py del b[2] # delete a line (the third)
264 :py b.append("bottom") # add a line at the bottom
265 :py n = len(b) # number of lines
266 :py (row,col) = b.mark('a') # named mark
267 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268
269==============================================================================
2704. Range objects *python-range*
271
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000272Range objects represent a part of a vim buffer. You can obtain them in a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273number of ways:
274 - via vim.current.range (|python-current|)
275 - from a buffer's range() method (|python-buffer|)
276
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000277A range object is almost identical in operation to a buffer object. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278all operations are restricted to the lines within the range (this line range
279can, of course, change as a result of slice assignments, line deletions, or
280the range.append() method).
281
282The range object attributes are:
283 r.start Index of first line into the buffer
284 r.end Index of last line into the buffer
285
286The range object methods are:
287 r.append(str) Append a line to the range
288 r.append(list) Append a list of lines to the range
289 Note that the option of supplying a list of strings to
290 the append method differs from the equivalent method
291 for Python's built-in list objects.
292
293Example (assume r is the current range):
294 # Send all lines in a range to the default printer
295 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
296
297==============================================================================
2985. Window objects *python-window*
299
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000300Window objects represent vim windows. You can obtain them in a number of ways:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301 - via vim.current.window (|python-current|)
302 - from indexing vim.windows (|python-windows|)
303
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000304You can manipulate window objects only through their attributes. They have no
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305methods, and no sequence or other interface.
306
307Window attributes are:
308 buffer (read-only) The buffer displayed in this window
309 cursor (read-write) The current cursor position in the window
310 This is a tuple, (row,col).
311 height (read-write) The window height, in rows
312 width (read-write) The window width, in columns
313The height attribute is writable only if the screen is split horizontally.
314The width attribute is writable only if the screen is split vertically.
315
316==============================================================================
Bram Moolenaara5792f52005-11-23 21:25:05 +00003176. Dynamic loading *python-dynamic*
318
319On MS-Windows the Python library can be loaded dynamically. The |:version|
320output then includes |+python/dyn|.
321
322This means that Vim will search for the Python DLL file only when needed.
323When you don't use the Python interface you don't need it, thus you can use
324Vim without this DLL file.
325
326To use the Python interface the Python DLL must be in your search path. In a
327console window type "path" to see what directories are used.
328
329The name of the DLL must match the Python version Vim was compiled with.
330Currently the name is "python24.dll". That is for Python 2.4. To know for
331sure edit "gvim.exe" and search for "python\d*.dll\c".
332
333==============================================================================
Bram Moolenaar6df6f472010-07-18 18:04:50 +02003347. Python 3 *python3*
335
336Python 3 support can exist next to Python 2.x.
337
Bram Moolenaarb6590522010-07-21 16:00:43 +0200338*:py3* *:python3* *:py3file*
Bram Moolenaar6df6f472010-07-18 18:04:50 +0200339
340TODO
341
342
343==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +0000344 vim:tw=78:ts=8:ft=help:norl: