blob: f9039eac07f92867dfaba7dd890f078b8f684b7d [file] [log] [blame]
Bram Moolenaard94464e2015-11-02 15:28:18 +01001*if_lua.txt* For Vim version 7.4. Last change: 2015 Oct 16
Bram Moolenaar0ba04292010-07-14 23:23:17 +02002
3
4 VIM REFERENCE MANUAL by Luis Carvalho
5
6
7The Lua Interface to Vim *lua* *Lua*
8
91. Commands |lua-commands|
102. The vim module |lua-vim|
Bram Moolenaar1dced572012-04-05 16:54:08 +0200113. List userdata |lua-list|
124. Dict userdata |lua-dict|
Bram Moolenaar52b91d82013-06-15 21:39:51 +0200135. Funcref userdata |lua-funcref|
146. Buffer userdata |lua-buffer|
157. Window userdata |lua-window|
168. The luaeval function |lua-luaeval|
Bram Moolenaard94464e2015-11-02 15:28:18 +0100179. Dynamic loading |lua-dynamic|
Bram Moolenaar0ba04292010-07-14 23:23:17 +020018
19{Vi does not have any of these commands}
20
21The Lua interface is available only when Vim was compiled with the
22|+lua| feature.
23
24==============================================================================
251. Commands *lua-commands*
26
27 *:lua*
28:[range]lua {chunk}
29 Execute Lua chunk {chunk}. {not in Vi}
30
31Examples:
32>
33 :lua print("Hello, Vim!")
34 :lua local curbuf = vim.buffer() curbuf[7] = "line #7"
35<
36
37:[range]lua << {endmarker}
38{script}
39{endmarker}
40 Execute Lua script {script}. {not in Vi}
41 Note: This command doesn't work when the Lua
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 |:lua| command is mainly useful for including Lua code
49in Vim scripts.
50
51Example:
52>
53 function! CurrentLineInfo()
54 lua << EOF
55 local linenr = vim.window().line
56 local curline = vim.buffer()[linenr]
57 print(string.format("Current line [%d] has %d chars",
58 linenr, #curline))
59 EOF
60 endfunction
61<
62
63 *:luado*
Bram Moolenaar53bfca22012-04-13 23:04:47 +020064:[range]luado {body} Execute Lua function "function (line, linenr) {body}
65 end" for each line in the [range], with the function
66 argument being set to the text of each line in turn,
67 without a trailing <EOL>, and the current line number.
68 If the value returned by the function is a string it
69 becomes the text of the line in the current turn. The
70 default for [range] is the whole file: "1,$".
71 {not in Vi}
Bram Moolenaar0ba04292010-07-14 23:23:17 +020072
73Examples:
74>
75 :luado return string.format("%s\t%d", line:reverse(), #line)
76
77 :lua require"lpeg"
78 :lua -- balanced parenthesis grammar:
79 :lua bp = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }
80 :luado if bp:match(line) then return "-->\t" .. line end
81<
82
83 *:luafile*
84:[range]luafile {file}
85 Execute Lua script in {file}. {not in Vi}
86 The whole argument is used as a single file name.
87
88Examples:
89>
90 :luafile script.lua
91 :luafile %
92<
93
94All these commands execute a Lua chunk from either the command line (:lua and
95:luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
96interpreter, each chunk has its own scope and so only global variables are
Bram Moolenaar1dced572012-04-05 16:54:08 +020097shared between command calls. All Lua default libraries are available. In
98addition, Lua "print" function has its output redirected to the Vim message
99area, with arguments separated by a white space instead of a tab.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200100
Bram Moolenaar9855d6b2010-07-18 14:34:51 +0200101Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200102and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
103procedures that alter buffer content, open new buffers, and change cursor
Bram Moolenaar9855d6b2010-07-18 14:34:51 +0200104position are restricted when the command is executed in the |sandbox|.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200105
106
107==============================================================================
1082. The vim module *lua-vim*
109
110Lua interfaces Vim through the "vim" module. The first and last line of the
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200111input range are stored in "vim.firstline" and "vim.lastline" respectively. The
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200112module also includes routines for buffer, window, and current line queries,
113Vim evaluation and command execution, and others.
114
Bram Moolenaar52b91d82013-06-15 21:39:51 +0200115 vim.list([arg]) Returns an empty list or, if "arg" is a Lua
116 table with numeric keys 1, ..., n (a
117 "sequence"), returns a list l such that l[i] =
118 arg[i] for i = 1, ..., n (see |List|).
119 Non-numeric keys are not used to initialize
120 the list. See also |lua-eval| for conversion
121 rules. Example: >
122 :lua t = {math.pi, false, say = 'hi'}
123 :echo luaeval('vim.list(t)')
124 :" [3.141593, 0], 'say' is ignored
125<
126 vim.dict([arg]) Returns an empty dictionary or, if "arg" is a
127 Lua table, returns a dict d such that d[k] =
128 arg[k] for all string keys k in "arg" (see
129 |Dictionary|). Number keys are converted to
130 strings. Keys that are not strings are not
131 used to initialize the dictionary. See also
132 |lua-eval| for conversion rules. Example: >
133 :lua t = {math.pi, false, say = 'hi'}
134 :echo luaeval('vim.dict(t)')
135 :" {'say': 'hi'}, numeric keys ignored
136<
137 vim.funcref({name}) Returns a Funcref to function {name} (see
138 |Funcref|). It is equivalent to Vim's
Bram Moolenaar7cba6c02013-09-05 22:13:31 +0200139 "function". NOT IMPLEMENTED YET
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200140
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200141 vim.buffer([arg]) If "arg" is a number, returns buffer with
142 number "arg" in the buffer list or, if "arg"
143 is a string, returns buffer whose full or short
144 name is "arg". In both cases, returns 'nil'
145 (nil value, not string) if the buffer is not
146 found. Otherwise, if "toboolean(arg)" is
147 'true' returns the first buffer in the buffer
148 list or else the current buffer.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200149
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200150 vim.window([arg]) If "arg" is a number, returns window with
151 number "arg" or 'nil' (nil value, not string)
152 if not found. Otherwise, if "toboolean(arg)"
153 is 'true' returns the first window or else the
154 current window.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200155
Bram Moolenaar1dced572012-04-05 16:54:08 +0200156 vim.type({arg}) Returns the type of {arg}. It is equivalent to
157 Lua's "type" function, but returns "list",
Bram Moolenaar52b91d82013-06-15 21:39:51 +0200158 "dict", "funcref", "buffer", or "window" if
159 {arg} is a list, dictionary, funcref, buffer,
160 or window, respectively. Examples: >
Bram Moolenaar1dced572012-04-05 16:54:08 +0200161 :lua l = vim.list()
162 :lua print(type(l), vim.type(l))
163 :" userdata list
164<
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200165 vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200166 Examples: >
167 :lua vim.command"set tw=60"
168 :lua vim.command"normal ddp"
169<
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200170 vim.eval({expr}) Evaluates expression {expr} (see |expression|),
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200171 converts the result to Lua, and returns it.
172 Vim strings and numbers are directly converted
173 to Lua strings and numbers respectively. Vim
174 lists and dictionaries are converted to Lua
Bram Moolenaar1dced572012-04-05 16:54:08 +0200175 userdata (see |lua-list| and |lua-dict|).
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200176 Examples: >
177 :lua tw = vim.eval"&tw"
178 :lua print(vim.eval"{'a': 'one'}".a)
179<
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200180 vim.line() Returns the current line (without the trailing
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200181 <EOL>), a Lua string.
182
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200183 vim.beep() Beeps.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200184
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200185 vim.open({fname}) Opens a new buffer for file {fname} and
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200186 returns it. Note that the buffer is not set as
187 current.
188
189
190==============================================================================
Bram Moolenaar1dced572012-04-05 16:54:08 +02001913. List userdata *lua-list*
192
193List userdata represent vim lists, and the interface tries to follow closely
194Vim's syntax for lists. Since lists are objects, changes in list references in
195Lua are reflected in Vim and vice-versa. A list "l" has the following
196properties and methods:
197
198Properties
199----------
200 o "#l" is the number of items in list "l", equivalent to "len(l)"
201 in Vim.
202 o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
203 To modify the k-th item, simply do "l[k] = newitem"; in
204 particular, "l[k] = nil" removes the k-th item from "l".
205 o "l()" returns an iterator for "l".
206
207Methods
208-------
209 o "l:add(item)" appends "item" to the end of "l".
210 o "l:insert(item[, pos])" inserts "item" at (optional)
211 position "pos" in the list. The default value for "pos" is 0.
212
213Examples:
214>
215 :let l = [1, 'item']
216 :lua l = vim.eval('l') -- same 'l'
217 :lua l:add(vim.list())
218 :lua l[0] = math.pi
219 :echo l[0] " 3.141593
220 :lua l[0] = nil -- remove first item
221 :lua l:insert(true, 1)
222 :lua print(l, #l, l[0], l[1], l[-1])
223 :lua for item in l() do print(item) end
224<
225
226==============================================================================
2274. Dict userdata *lua-dict*
228
229Similarly to list userdata, dict userdata represent vim dictionaries; since
230dictionaries are also objects, references are kept between Lua and Vim. A dict
231"d" has the following properties:
232
233Properties
234----------
235 o "#d" is the number of items in dict "d", equivalent to "len(d)"
236 in Vim.
237 o "d.key" or "d['key']" returns the value at entry "key" in "d".
238 To modify the entry at this key, simply do "d.key = newvalue"; in
239 particular, "d.key = nil" removes the entry from "d".
240 o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
241 Vim.
242
243Examples:
244>
245 :let d = {'n':10}
246 :lua d = vim.eval('d') -- same 'd'
247 :lua print(d, d.n, #d)
248 :let d.self = d
249 :lua for k, v in d() do print(d, k, v) end
250 :lua d.x = math.pi
251 :lua d.self = nil -- remove entry
252 :echo d
253<
254
255==============================================================================
Bram Moolenaar52b91d82013-06-15 21:39:51 +02002565. Funcref userdata *lua-funcref*
257
258Funcref userdata represent funcref variables in Vim. Funcrefs that were
259defined with a "dict" attribute need to be obtained as a dictionary key
260in order to have "self" properly assigned to the dictionary (see examples
261below.) A funcref "f" has the following properties:
262
263Properties
264----------
265 o "#f" is the name of the function referenced by "f"
266 o "f(...)" calls the function referenced by "f" (with arguments)
267
268Examples:
269>
270 :function I(x)
271 : return a:x
272 : endfunction
273 :let R = function('I')
274 :lua i1 = vim.funcref('I')
275 :lua i2 = vim.eval('R')
276 :lua print(#i1, #i2) -- both 'I'
277 :lua print(i1, i2, #i2(i1) == #i1(i2))
278 :function Mylen() dict
279 : return len(self.data)
280 : endfunction
281 :let mydict = {'data': [0, 1, 2, 3]}
282 :lua d = vim.eval('mydict'); d.len = vim.funcref('Mylen')
283 :echo mydict.len()
284 :lua l = d.len -- assign d as 'self'
285 :lua print(l())
286<
287
288==============================================================================
2896. Buffer userdata *lua-buffer*
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200290
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200291Buffer userdata represent vim buffers. A buffer userdata "b" has the following
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200292properties and methods:
293
294Properties
295----------
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200296 o "b()" sets "b" as the current buffer.
297 o "#b" is the number of lines in buffer "b".
298 o "b[k]" represents line number k: "b[k] = newline" replaces line k
299 with string "newline" and "b[k] = nil" deletes line k.
300 o "b.name" contains the short name of buffer "b" (read-only).
301 o "b.fname" contains the full name of buffer "b" (read-only).
302 o "b.number" contains the position of buffer "b" in the buffer list
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200303 (read-only).
304
305Methods
306-------
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200307 o "b:insert(newline[, pos])" inserts string "newline" at (optional)
308 position "pos" in the buffer. The default value for "pos" is
309 "#b + 1". If "pos == 0" then "newline" becomes the first line in
310 the buffer.
311 o "b:next()" returns the buffer next to "b" in the buffer list.
312 o "b:previous()" returns the buffer previous to "b" in the buffer
313 list.
314 o "b:isvalid()" returns 'true' (boolean) if buffer "b" corresponds to
315 a "real" (not freed from memory) Vim buffer.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200316
317Examples:
318>
319 :lua b = vim.buffer() -- current buffer
320 :lua print(b.name, b.number)
321 :lua b[1] = "first line"
322 :lua b:insert("FIRST!", 0)
323 :lua b[1] = nil -- delete top line
324 :lua for i=1,3 do b:insert(math.random()) end
325 :3,4lua for i=vim.lastline,vim.firstline,-1 do b[i] = nil end
326 :lua vim.open"myfile"() -- open buffer and set it as current
327
328 function! ListBuffers()
329 lua << EOF
330 local b = vim.buffer(true) -- first buffer in list
331 while b ~= nil do
332 print(b.number, b.name, #b)
333 b = b:next()
334 end
335 vim.beep()
336 EOF
337 endfunction
338<
339
340==============================================================================
Bram Moolenaar52b91d82013-06-15 21:39:51 +02003417. Window userdata *lua-window*
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200342
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200343Window objects represent vim windows. A window userdata "w" has the following
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200344properties and methods:
345
346Properties
347----------
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200348 o "w()" sets "w" as the current window.
349 o "w.buffer" contains the buffer of window "w" (read-only).
350 o "w.line" represents the cursor line position in window "w".
351 o "w.col" represents the cursor column position in window "w".
352 o "w.width" represents the width of window "w".
353 o "w.height" represents the height of window "w".
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200354
355Methods
356-------
Bram Moolenaar2334b6d2010-07-22 21:32:16 +0200357 o "w:next()" returns the window next to "w".
358 o "w:previous()" returns the window previous to "w".
359 o "w:isvalid()" returns 'true' (boolean) if window "w" corresponds to
360 a "real" (not freed from memory) Vim window.
Bram Moolenaar0ba04292010-07-14 23:23:17 +0200361
362Examples:
363>
364 :lua w = vim.window() -- current window
365 :lua print(w.buffer.name, w.line, w.col)
366 :lua w.width = w.width + math.random(10)
367 :lua w.height = 2 * math.random() * w.height
368 :lua n,w = 0,vim.window(true) while w~=nil do n,w = n + 1,w:next() end
369 :lua print("There are " .. n .. " windows")
370<
371
372==============================================================================
Bram Moolenaar52b91d82013-06-15 21:39:51 +02003738. The luaeval function *lua-luaeval* *lua-eval*
Bram Moolenaar1dced572012-04-05 16:54:08 +0200374
375The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
376"luaeval". "luaeval" takes an expression string and an optional argument and
377returns the result of the expression. It is semantically equivalent in Lua to:
378>
379 local chunkheader = "local _A = select(1, ...) return "
380 function luaeval (expstr, arg)
381 local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
382 return chunk(arg) -- return typval
383 end
384<
Bram Moolenaar52b91d82013-06-15 21:39:51 +0200385Note that "_A" receives the argument to "luaeval". Lua numbers, strings, and
386list, dict, and funcref userdata are converted to their Vim respective types,
387while Lua booleans are converted to numbers. An error is thrown if conversion
388of any of the remaining Lua types, including userdata other than lists, dicts,
389and funcrefs, is attempted.
390
391Examples: >
Bram Moolenaar1dced572012-04-05 16:54:08 +0200392
393 :echo luaeval('math.pi')
394 :lua a = vim.list():add('newlist')
395 :let a = luaeval('a')
396 :echo a[0] " 'newlist'
397 :function Rand(x,y) " random uniform between x and y
398 : return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
399 : endfunction
400 :echo Rand(1,10)
401
402
403==============================================================================
Bram Moolenaard94464e2015-11-02 15:28:18 +01004049. Dynamic loading *lua-dynamic*
405
406On MS-Windows and Unix the Lua library can be loaded dynamically. The
407|:version| output then includes |+lua/dyn|.
408
409This means that Vim will search for the Lua DLL or shared library file only
410when needed. When you don't use the Lua interface you don't need it, thus
411you can use Vim without this file.
412
Bram Moolenaard94464e2015-11-02 15:28:18 +0100413
Bram Moolenaare18c0b32016-03-20 21:08:34 +0100414MS-Windows ~
415
416To use the Lua interface the Lua DLL must be in your search path. In a
417console window type "path" to see what directories are used. The 'luadll'
418option can be also used to specify the Lua DLL. The version of the DLL must
419match the Lua version Vim was compiled with.
420
421
422Unix ~
423
424The 'luadll' option can be used to specify the Lua shared library file instead
425of DYNAMIC_LUA_DLL file what was specified at compile time. The version of
426the shared library must match the Lua version Vim was compiled with.
Bram Moolenaard94464e2015-11-02 15:28:18 +0100427
428
429==============================================================================
Bram Moolenaar1dced572012-04-05 16:54:08 +0200430 vim:tw=78:ts=8:noet:ft=help:norl: