blob: d26461c8509a34e5c422c42ca26140047765e3f2 [file] [log] [blame]
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00001*if_pyth.txt* For Vim version 7.0aa. Last change: 2004 Jul 25
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Paul Moore
5
6
7The Python Interface to Vim *python* *Python*
8
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|
14
15{Vi does not have any of these commands}
16
17The Python interface is available only when Vim was compiled with the
18|+python| feature.
19
20==============================================================================
211. Commands *python-commands*
22
23 *:python* *:py* *E205* *E263* *E264*
24:[range]py[thon] {stmt}
25 Execute Python statement {stmt}.
26
27:[range]py[thon] << {endmarker}
28{script}
29{endmarker}
30 Execute Python script {script}.
31 Note: This command doesn't work when the Python
32 feature wasn't compiled in. To avoid errors, see
33 |script-here|.
34
35{endmarker} must NOT be preceded by any white space. If {endmarker} is
36omitted from after the "<<", a dot '.' must be used after {script}, like
37for the |:append| and |:insert| commands.
38This form of the |:python| command is mainly useful for including python code
39in Vim scripts.
40
41Example: >
42 function! IcecreamInitialize()
43 python << EOF
44 class StrawberryIcecream:
45 def __call__(self):
46 print 'EAT ME'
47 EOF
48 endfunction
49<
50Note: Python is very sensitive to the indenting. Also make sure the "class"
51line and "EOF" do not have any indent.
52
53 *:pyfile* *:pyf*
54:[range]pyf[ile] {file}
55 Execute the Python script in {file}. The whole
56 argument is used as a single file name. {not in Vi}
57
58Both of these commands do essentially the same thing - they execute a piece of
59Python code, with the "current range" |python-range| set to the given line
60range.
61
62In the case of :python, the code to execute is in the command-line.
63In the case of :pyfile, the code to execute is the contents of the given file.
64
65Python commands cannot be used in the |sandbox|.
66
67To pass arguments you need to set sys.argv[] explicitly. Example: >
68
69 :python import sys
70 :python sys.argv = ["foo", "bar"]
71 :pyfile myscript.py
72
73Here are some examples *python-examples* >
74
75 :python from vim import *
76 :python from string import upper
77 :python current.line = upper(current.line)
78 :python print "Hello"
79 :python str = current.buffer[42]
80
81(Note that changes - like the imports - persist from one command to the next,
82just like in the Python interpreter.)
83
84==============================================================================
852. The vim module *python-vim*
86
87Python code gets all of its access to vim (with one exception - see
88|python-output| below) via the "vim" module. The vim module implements two
89methods, three constants, and one error object. You need to import the vim
90module before using it: >
91 :python import vim
92
93Overview >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000094 :py print "Hello" # displays a message
95 :py vim.command(cmd) # execute an ex command
96 :py w = vim.windows[n] # gets window "n"
97 :py cw = vim.current.window # gets the current window
98 :py b = vim.buffers[n] # gets buffer "n"
99 :py cb = vim.current.buffer # gets the current buffer
100 :py w.height = lines # sets the window height
101 :py w.cursor = (row, col) # sets the window cursor position
102 :py pos = w.cursor # gets a tuple (row, col)
103 :py name = b.name # gets the buffer file name
104 :py line = b[n] # gets a line from the buffer
105 :py lines = b[n:m] # gets a list of lines
106 :py num = len(b) # gets the number of lines
107 :py b[n] = str # sets a line in the buffer
108 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once
109 :py del b[n] # deletes a line
110 :py del b[n:m] # deletes a number of lines
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111
112
113Methods of the "vim" module
114
115vim.command(str) *python-command*
116 Executes the vim (ex-mode) command str. Returns None.
117 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000118 :py vim.command("set tw=72")
119 :py vim.command("%s/aaa/bbb/g")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120< The following definition executes Normal mode commands: >
121 def normal(str):
122 vim.command("normal "+str)
123 # Note the use of single quotes to delimit a string containing
124 # double quotes
125 normal('"a2dd"aP')
126< *E659*
127 The ":python" command cannot be used recursively with Python 2.2 and
128 older. This only works with Python 2.3 and later: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000129 :py vim.command("python print 'Hello again Python'")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130
131vim.eval(str) *python-eval*
132 Evaluates the expression str using the vim internal expression
133 evaluator (see |expression|). Returns the expression result as a
134 string.
135 Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000136 :py text_width = vim.eval("&tw")
137 :py str = vim.eval("12+12") # NB result is a string! Use
Bram Moolenaar071d4272004-06-13 20:20:40 +0000138 # string.atoi() to convert to
139 # a number.
140
141Error object of the "vim" module
142
143vim.error *python-error*
144 Upon encountering a Vim error, Python raises an exception of type
145 vim.error.
146 Example: >
147 try:
148 vim.command("put a")
149 except vim.error:
150 # nothing in register a
151
152Constants of the "vim" module
153
154 Note that these are not actually constants - you could reassign them.
155 But this is silly, as you would then lose access to the vim objects
156 to which the variables referred.
157
158vim.buffers *python-buffers*
159 A sequence object providing access to the list of vim buffers. The
160 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000161 :py b = vim.buffers[i] # Indexing (read-only)
162 :py b in vim.buffers # Membership test
163 :py n = len(vim.buffers) # Number of elements
164 :py for b in vim.buffers: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165<
166vim.windows *python-windows*
167 A sequence object providing access to the list of vim windows. The
168 object supports the following operations: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000169 :py w = vim.windows[i] # Indexing (read-only)
170 :py w in vim.windows # Membership test
171 :py n = len(vim.windows) # Number of elements
172 :py for w in vim.windows: # Sequential access
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173<
174vim.current *python-current*
175 An object providing access (via specific attributes) to various
176 "current" objects available in vim:
177 vim.current.line The current line (RW) String
178 vim.current.buffer The current buffer (RO) Buffer
179 vim.current.window The current window (RO) Window
180 vim.current.range The current line range (RO) Range
181
182 The last case deserves a little explanation. When the :python or
183 :pyfile command specifies a range, this range of lines becomes the
184 "current range". A range is a bit like a buffer, but with all access
185 restricted to a subset of lines. See |python-range| for more details.
186
187
188Output from Python *python-output*
189 Vim displays all Python code output in the Vim message area. Normal
190 output appears as information messages, and error output appears as
191 error messages.
192
193 In implementation terms, this means that all output to sys.stdout
194 (including the output from print statements) appears as information
195 messages, and all output to sys.stderr (including error tracebacks)
196 appears as error messages.
197
198 *python-input*
199 Input (via sys.stdin, including input() and raw_input()) is not
200 supported, and may cause the program to crash. This should probably be
201 fixed.
202
203==============================================================================
2043. Buffer objects *python-buffer*
205
206Buffer objects represent vim buffers. You can obtain them in a number of ways:
207 - via vim.current.buffer (|python-current|)
208 - from indexing vim.buffers (|python-buffers|)
209 - from the "buffer" attribute of a window (|python-window|)
210
211Buffer objects have one read-only attribute - name - the full file name for
212the buffer. They also have three methods (append, mark, and range; see below).
213
214You can also treat buffer objects as sequence objects. In this context, they
215act as if they were lists (yes, they are mutable) of strings, with each
216element being a line of the buffer. All of the usual sequence operations,
217including indexing, index assignment, slicing and slice assignment, work as
218you would expect. Note that the result of indexing (slicing) a buffer is a
219string (list of strings). This has one unusual consequence - b[:] is different
220from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas
221"b = None" merely updates the variable b, with no effect on the buffer.
222
223Buffer indexes start at zero, as is normal in Python. This differs from vim
224line numbers, which start from 1. This is particularly relevant when dealing
225with marks (see below) which use vim line numbers.
226
227The buffer object methods are:
228 b.append(str) Append a line to the buffer
229 b.append(list) Append a list of lines to the buffer
230 Note that the option of supplying a list of strings to
231 the append method differs from the equivalent method
232 for Python's built-in list objects.
233 b.mark(name) Return a tuple (row,col) representing the position
234 of the named mark (can also get the []"<> marks)
235 b.range(s,e) Return a range object (see |python-range|) which
236 represents the part of the given buffer between line
237 numbers s and e |inclusive|.
238
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000239Note that when adding a line it must not contain a line break character '\n'.
240A trailing '\n' is allowed and ignored, so that you can do: >
241 :py b.append(f.readlines())
242
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243Examples (assume b is the current buffer) >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000244 :py print b.name # write the buffer file name
245 :py b[0] = "hello!!!" # replace the top line
246 :py b[:] = None # delete the whole buffer
247 :py del b[:] # delete the whole buffer
248 :py b[0:0] = [ "a line" ] # add a line at the top
249 :py del b[2] # delete a line (the third)
250 :py b.append("bottom") # add a line at the bottom
251 :py n = len(b) # number of lines
252 :py (row,col) = b.mark('a') # named mark
253 :py r = b.range(1,5) # a sub-range of the buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000254
255==============================================================================
2564. Range objects *python-range*
257
258Range objects represent a part of a vim buffer. You can obtain them in a
259number of ways:
260 - via vim.current.range (|python-current|)
261 - from a buffer's range() method (|python-buffer|)
262
263A range object is almost identical in operation to a buffer object. However,
264all operations are restricted to the lines within the range (this line range
265can, of course, change as a result of slice assignments, line deletions, or
266the range.append() method).
267
268The range object attributes are:
269 r.start Index of first line into the buffer
270 r.end Index of last line into the buffer
271
272The range object methods are:
273 r.append(str) Append a line to the range
274 r.append(list) Append a list of lines to the range
275 Note that the option of supplying a list of strings to
276 the append method differs from the equivalent method
277 for Python's built-in list objects.
278
279Example (assume r is the current range):
280 # Send all lines in a range to the default printer
281 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
282
283==============================================================================
2845. Window objects *python-window*
285
286Window objects represent vim windows. You can obtain them in a number of ways:
287 - via vim.current.window (|python-current|)
288 - from indexing vim.windows (|python-windows|)
289
290You can manipulate window objects only through their attributes. They have no
291methods, and no sequence or other interface.
292
293Window attributes are:
294 buffer (read-only) The buffer displayed in this window
295 cursor (read-write) The current cursor position in the window
296 This is a tuple, (row,col).
297 height (read-write) The window height, in rows
298 width (read-write) The window width, in columns
299The height attribute is writable only if the screen is split horizontally.
300The width attribute is writable only if the screen is split vertically.
301
302==============================================================================
303 vim:tw=78:ts=8:ft=help:norl: