annotate runtime/doc/if_lua.txt @ 6999:dc1b678f0e4e v7.4.817

patch 7.4.817 Problem: Invalid memory access in file_pat_to_reg_pat(). Solution: Use vim_isspace() instead of checking for a space only. (Dominique Pelle)
author Bram Moolenaar <bram@vim.org>
date Tue, 11 Aug 2015 16:20:05 +0200
parents 22da5ab9aaa1
children 42717d048817
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5340
22da5ab9aaa1 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 5294
diff changeset
1 *if_lua.txt* For Vim version 7.4. Last change: 2013 Sep 04
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
2
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
3
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
4 VIM REFERENCE MANUAL by Luis Carvalho
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
5
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
6
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
7 The Lua Interface to Vim *lua* *Lua*
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
8
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
9 1. Commands |lua-commands|
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
10 2. The vim module |lua-vim|
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
11 3. List userdata |lua-list|
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
12 4. Dict userdata |lua-dict|
4911
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
13 5. Funcref userdata |lua-funcref|
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
14 6. Buffer userdata |lua-buffer|
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
15 7. Window userdata |lua-window|
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
16 8. The luaeval function |lua-luaeval|
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
17
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
18 {Vi does not have any of these commands}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
19
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
20 The Lua interface is available only when Vim was compiled with the
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
21 |+lua| feature.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
22
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
23 ==============================================================================
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
24 1. Commands *lua-commands*
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
25
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
26 *:lua*
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
27 :[range]lua {chunk}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
28 Execute Lua chunk {chunk}. {not in Vi}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
29
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
30 Examples:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
31 >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
32 :lua print("Hello, Vim!")
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
33 :lua local curbuf = vim.buffer() curbuf[7] = "line #7"
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
34 <
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
35
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
36 :[range]lua << {endmarker}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
37 {script}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
38 {endmarker}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
39 Execute Lua script {script}. {not in Vi}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
40 Note: This command doesn't work when the Lua
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
41 feature wasn't compiled in. To avoid errors, see
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
42 |script-here|.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
43
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
44 {endmarker} must NOT be preceded by any white space. If {endmarker} is
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
45 omitted from after the "<<", a dot '.' must be used after {script}, like
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
46 for the |:append| and |:insert| commands.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
47 This form of the |:lua| command is mainly useful for including Lua code
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
48 in Vim scripts.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
49
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
50 Example:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
51 >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
52 function! CurrentLineInfo()
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
53 lua << EOF
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
54 local linenr = vim.window().line
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
55 local curline = vim.buffer()[linenr]
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
56 print(string.format("Current line [%d] has %d chars",
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
57 linenr, #curline))
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
58 EOF
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
59 endfunction
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
60 <
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
61
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
62 *:luado*
3465
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
63 :[range]luado {body} Execute Lua function "function (line, linenr) {body}
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
64 end" for each line in the [range], with the function
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
65 argument being set to the text of each line in turn,
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
66 without a trailing <EOL>, and the current line number.
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
67 If the value returned by the function is a string it
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
68 becomes the text of the line in the current turn. The
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
69 default for [range] is the whole file: "1,$".
161d01cbb165 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3450
diff changeset
70 {not in Vi}
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
71
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
72 Examples:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
73 >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
74 :luado return string.format("%s\t%d", line:reverse(), #line)
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
75
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
76 :lua require"lpeg"
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
77 :lua -- balanced parenthesis grammar:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
78 :lua bp = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
79 :luado if bp:match(line) then return "-->\t" .. line end
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
80 <
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
81
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
82 *:luafile*
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
83 :[range]luafile {file}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
84 Execute Lua script in {file}. {not in Vi}
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
85 The whole argument is used as a single file name.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
86
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
87 Examples:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
88 >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
89 :luafile script.lua
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
90 :luafile %
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
91 <
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
92
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
93 All these commands execute a Lua chunk from either the command line (:lua and
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
94 :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
95 interpreter, each chunk has its own scope and so only global variables are
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
96 shared between command calls. All Lua default libraries are available. In
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
97 addition, Lua "print" function has its output redirected to the Vim message
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
98 area, with arguments separated by a white space instead of a tab.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
99
2337
a0f87fc19d1d Better conceal in help. (partly by Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
100 Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
101 and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
102 procedures that alter buffer content, open new buffers, and change cursor
2337
a0f87fc19d1d Better conceal in help. (partly by Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
103 position are restricted when the command is executed in the |sandbox|.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
104
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
105
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
106 ==============================================================================
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
107 2. The vim module *lua-vim*
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
108
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
109 Lua interfaces Vim through the "vim" module. The first and last line of the
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
110 input range are stored in "vim.firstline" and "vim.lastline" respectively. The
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
111 module also includes routines for buffer, window, and current line queries,
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
112 Vim evaluation and command execution, and others.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
113
4911
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
114 vim.list([arg]) Returns an empty list or, if "arg" is a Lua
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
115 table with numeric keys 1, ..., n (a
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
116 "sequence"), returns a list l such that l[i] =
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
117 arg[i] for i = 1, ..., n (see |List|).
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
118 Non-numeric keys are not used to initialize
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
119 the list. See also |lua-eval| for conversion
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
120 rules. Example: >
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
121 :lua t = {math.pi, false, say = 'hi'}
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
122 :echo luaeval('vim.list(t)')
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
123 :" [3.141593, 0], 'say' is ignored
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
124 <
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
125 vim.dict([arg]) Returns an empty dictionary or, if "arg" is a
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
126 Lua table, returns a dict d such that d[k] =
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
127 arg[k] for all string keys k in "arg" (see
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
128 |Dictionary|). Number keys are converted to
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
129 strings. Keys that are not strings are not
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
130 used to initialize the dictionary. See also
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
131 |lua-eval| for conversion rules. Example: >
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
132 :lua t = {math.pi, false, say = 'hi'}
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
133 :echo luaeval('vim.dict(t)')
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
134 :" {'say': 'hi'}, numeric keys ignored
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
135 <
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
136 vim.funcref({name}) Returns a Funcref to function {name} (see
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
137 |Funcref|). It is equivalent to Vim's
5340
22da5ab9aaa1 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 5294
diff changeset
138 "function". NOT IMPLEMENTED YET
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
139
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
140 vim.buffer([arg]) If "arg" is a number, returns buffer with
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
141 number "arg" in the buffer list or, if "arg"
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
142 is a string, returns buffer whose full or short
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
143 name is "arg". In both cases, returns 'nil'
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
144 (nil value, not string) if the buffer is not
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
145 found. Otherwise, if "toboolean(arg)" is
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
146 'true' returns the first buffer in the buffer
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
147 list or else the current buffer.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
148
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
149 vim.window([arg]) If "arg" is a number, returns window with
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
150 number "arg" or 'nil' (nil value, not string)
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
151 if not found. Otherwise, if "toboolean(arg)"
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
152 is 'true' returns the first window or else the
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
153 current window.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
154
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
155 vim.type({arg}) Returns the type of {arg}. It is equivalent to
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
156 Lua's "type" function, but returns "list",
4911
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
157 "dict", "funcref", "buffer", or "window" if
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
158 {arg} is a list, dictionary, funcref, buffer,
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
159 or window, respectively. Examples: >
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
160 :lua l = vim.list()
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
161 :lua print(type(l), vim.type(l))
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
162 :" userdata list
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
163 <
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
164 vim.command({cmd}) Executes the vim (ex-mode) command {cmd}.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
165 Examples: >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
166 :lua vim.command"set tw=60"
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
167 :lua vim.command"normal ddp"
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
168 <
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
169 vim.eval({expr}) Evaluates expression {expr} (see |expression|),
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
170 converts the result to Lua, and returns it.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
171 Vim strings and numbers are directly converted
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
172 to Lua strings and numbers respectively. Vim
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
173 lists and dictionaries are converted to Lua
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
174 userdata (see |lua-list| and |lua-dict|).
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
175 Examples: >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
176 :lua tw = vim.eval"&tw"
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
177 :lua print(vim.eval"{'a': 'one'}".a)
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
178 <
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
179 vim.line() Returns the current line (without the trailing
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
180 <EOL>), a Lua string.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
181
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
182 vim.beep() Beeps.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
183
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
184 vim.open({fname}) Opens a new buffer for file {fname} and
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
185 returns it. Note that the buffer is not set as
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
186 current.
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
187
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
188
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
189 ==============================================================================
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
190 3. List userdata *lua-list*
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
191
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
192 List userdata represent vim lists, and the interface tries to follow closely
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
193 Vim's syntax for lists. Since lists are objects, changes in list references in
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
194 Lua are reflected in Vim and vice-versa. A list "l" has the following
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
195 properties and methods:
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
196
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
197 Properties
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
198 ----------
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
199 o "#l" is the number of items in list "l", equivalent to "len(l)"
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
200 in Vim.
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
201 o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
202 To modify the k-th item, simply do "l[k] = newitem"; in
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
203 particular, "l[k] = nil" removes the k-th item from "l".
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
204 o "l()" returns an iterator for "l".
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
205
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
206 Methods
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
207 -------
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
208 o "l:add(item)" appends "item" to the end of "l".
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
209 o "l:insert(item[, pos])" inserts "item" at (optional)
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
210 position "pos" in the list. The default value for "pos" is 0.
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
211
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
212 Examples:
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
213 >
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
214 :let l = [1, 'item']
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
215 :lua l = vim.eval('l') -- same 'l'
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
216 :lua l:add(vim.list())
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
217 :lua l[0] = math.pi
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
218 :echo l[0] " 3.141593
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
219 :lua l[0] = nil -- remove first item
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
220 :lua l:insert(true, 1)
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
221 :lua print(l, #l, l[0], l[1], l[-1])
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
222 :lua for item in l() do print(item) end
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
223 <
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
224
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
225 ==============================================================================
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
226 4. Dict userdata *lua-dict*
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
227
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
228 Similarly to list userdata, dict userdata represent vim dictionaries; since
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
229 dictionaries are also objects, references are kept between Lua and Vim. A dict
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
230 "d" has the following properties:
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
231
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
232 Properties
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
233 ----------
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
234 o "#d" is the number of items in dict "d", equivalent to "len(d)"
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
235 in Vim.
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
236 o "d.key" or "d['key']" returns the value at entry "key" in "d".
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
237 To modify the entry at this key, simply do "d.key = newvalue"; in
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
238 particular, "d.key = nil" removes the entry from "d".
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
239 o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
240 Vim.
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
241
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
242 Examples:
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
243 >
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
244 :let d = {'n':10}
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
245 :lua d = vim.eval('d') -- same 'd'
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
246 :lua print(d, d.n, #d)
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
247 :let d.self = d
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
248 :lua for k, v in d() do print(d, k, v) end
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
249 :lua d.x = math.pi
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
250 :lua d.self = nil -- remove entry
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
251 :echo d
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
252 <
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
253
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
254 ==============================================================================
4911
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
255 5. Funcref userdata *lua-funcref*
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
256
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
257 Funcref userdata represent funcref variables in Vim. Funcrefs that were
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
258 defined with a "dict" attribute need to be obtained as a dictionary key
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
259 in order to have "self" properly assigned to the dictionary (see examples
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
260 below.) A funcref "f" has the following properties:
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
261
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
262 Properties
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
263 ----------
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
264 o "#f" is the name of the function referenced by "f"
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
265 o "f(...)" calls the function referenced by "f" (with arguments)
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
266
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
267 Examples:
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
268 >
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
269 :function I(x)
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
270 : return a:x
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
271 : endfunction
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
272 :let R = function('I')
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
273 :lua i1 = vim.funcref('I')
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
274 :lua i2 = vim.eval('R')
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
275 :lua print(#i1, #i2) -- both 'I'
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
276 :lua print(i1, i2, #i2(i1) == #i1(i2))
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
277 :function Mylen() dict
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
278 : return len(self.data)
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
279 : endfunction
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
280 :let mydict = {'data': [0, 1, 2, 3]}
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
281 :lua d = vim.eval('mydict'); d.len = vim.funcref('Mylen')
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
282 :echo mydict.len()
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
283 :lua l = d.len -- assign d as 'self'
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
284 :lua print(l())
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
285 <
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
286
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
287 ==============================================================================
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
288 6. Buffer userdata *lua-buffer*
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
289
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
290 Buffer userdata represent vim buffers. A buffer userdata "b" has the following
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
291 properties and methods:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
292
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
293 Properties
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
294 ----------
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
295 o "b()" sets "b" as the current buffer.
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
296 o "#b" is the number of lines in buffer "b".
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
297 o "b[k]" represents line number k: "b[k] = newline" replaces line k
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
298 with string "newline" and "b[k] = nil" deletes line k.
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
299 o "b.name" contains the short name of buffer "b" (read-only).
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
300 o "b.fname" contains the full name of buffer "b" (read-only).
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
301 o "b.number" contains the position of buffer "b" in the buffer list
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
302 (read-only).
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
303
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
304 Methods
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
305 -------
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
306 o "b:insert(newline[, pos])" inserts string "newline" at (optional)
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
307 position "pos" in the buffer. The default value for "pos" is
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
308 "#b + 1". If "pos == 0" then "newline" becomes the first line in
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
309 the buffer.
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
310 o "b:next()" returns the buffer next to "b" in the buffer list.
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
311 o "b:previous()" returns the buffer previous to "b" in the buffer
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
312 list.
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
313 o "b:isvalid()" returns 'true' (boolean) if buffer "b" corresponds to
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
314 a "real" (not freed from memory) Vim buffer.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
315
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
316 Examples:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
317 >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
318 :lua b = vim.buffer() -- current buffer
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
319 :lua print(b.name, b.number)
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
320 :lua b[1] = "first line"
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
321 :lua b:insert("FIRST!", 0)
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
322 :lua b[1] = nil -- delete top line
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
323 :lua for i=1,3 do b:insert(math.random()) end
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
324 :3,4lua for i=vim.lastline,vim.firstline,-1 do b[i] = nil end
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
325 :lua vim.open"myfile"() -- open buffer and set it as current
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
326
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
327 function! ListBuffers()
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
328 lua << EOF
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
329 local b = vim.buffer(true) -- first buffer in list
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
330 while b ~= nil do
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
331 print(b.number, b.name, #b)
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
332 b = b:next()
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
333 end
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
334 vim.beep()
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
335 EOF
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
336 endfunction
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
337 <
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
338
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
339 ==============================================================================
4911
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
340 7. Window userdata *lua-window*
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
341
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
342 Window objects represent vim windows. A window userdata "w" has the following
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
343 properties and methods:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
344
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
345 Properties
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
346 ----------
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
347 o "w()" sets "w" as the current window.
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
348 o "w.buffer" contains the buffer of window "w" (read-only).
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
349 o "w.line" represents the cursor line position in window "w".
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
350 o "w.col" represents the cursor column position in window "w".
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
351 o "w.width" represents the width of window "w".
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
352 o "w.height" represents the height of window "w".
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
353
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
354 Methods
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
355 -------
2373
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
356 o "w:next()" returns the window next to "w".
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
357 o "w:previous()" returns the window previous to "w".
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
358 o "w:isvalid()" returns 'true' (boolean) if window "w" corresponds to
f149bb1cf5be Make it possible to load Lua dynamically on Unix. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2345
diff changeset
359 a "real" (not freed from memory) Vim window.
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
360
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
361 Examples:
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
362 >
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
363 :lua w = vim.window() -- current window
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
364 :lua print(w.buffer.name, w.line, w.col)
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
365 :lua w.width = w.width + math.random(10)
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
366 :lua w.height = 2 * math.random() * w.height
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
367 :lua n,w = 0,vim.window(true) while w~=nil do n,w = n + 1,w:next() end
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
368 :lua print("There are " .. n .. " windows")
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
369 <
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
370
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents:
diff changeset
371 ==============================================================================
4911
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
372 8. The luaeval function *lua-luaeval* *lua-eval*
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
373
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
374 The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
375 "luaeval". "luaeval" takes an expression string and an optional argument and
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
376 returns the result of the expression. It is semantically equivalent in Lua to:
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
377 >
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
378 local chunkheader = "local _A = select(1, ...) return "
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
379 function luaeval (expstr, arg)
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
380 local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
381 return chunk(arg) -- return typval
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
382 end
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
383 <
4911
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
384 Note that "_A" receives the argument to "luaeval". Lua numbers, strings, and
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
385 list, dict, and funcref userdata are converted to their Vim respective types,
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
386 while Lua booleans are converted to numbers. An error is thrown if conversion
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
387 of any of the remaining Lua types, including userdata other than lists, dicts,
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
388 and funcrefs, is attempted.
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
389
78c318784090 Updated runtime files.
Bram Moolenaar <bram@vim.org>
parents: 3682
diff changeset
390 Examples: >
3450
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
391
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
392 :echo luaeval('math.pi')
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
393 :lua a = vim.list():add('newlist')
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
394 :let a = luaeval('a')
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
395 :echo a[0] " 'newlist'
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
396 :function Rand(x,y) " random uniform between x and y
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
397 : return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
398 : endfunction
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
399 :echo Rand(1,10)
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
400
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
401
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
402 ==============================================================================
b067b8b81be9 updated for version 7.3.490
Bram Moolenaar <bram@vim.org>
parents: 2572
diff changeset
403 vim:tw=78:ts=8:noet:ft=help:norl: