xref: /vim-8.2.3635/runtime/doc/if_pyth.txt (revision 5eb86f91)
1*if_pyth.txt*   For Vim version 7.0aa.  Last change: 2004 Jul 25
2
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 >
94	: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
111
112
113Methods of the "vim" module
114
115vim.command(str)					*python-command*
116	Executes the vim (ex-mode) command str. Returns None.
117	Examples: >
118	    :py vim.command("set tw=72")
119	    :py vim.command("%s/aaa/bbb/g")
120<	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: >
129	    :py vim.command("python print 'Hello again Python'")
130
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: >
136	    :py text_width = vim.eval("&tw")
137	    :py str = vim.eval("12+12")		# NB result is a string! Use
138						# 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: >
161	    :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
165<
166vim.windows						*python-windows*
167	A sequence object providing access to the list of vim windows. The
168	object supports the following operations: >
169	    :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
173<
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
239Note 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
243Examples (assume b is the current buffer) >
244	: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
254
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:
304