blob: 89f011b8cfc63964455d7100c1db3d810e1bbb45 [file] [log] [blame]
Bram Moolenaar388a5d42020-05-26 21:20:45 +02001*eval.txt* For Vim version 8.2. Last change: 2020 May 25
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
Bram Moolenaar446cb832008-06-24 21:56:24 +00004 VIM REFERENCE MANUAL by Bram Moolenaar
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
6
7Expression evaluation *expression* *expr* *E15* *eval*
8
9Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|.
10
11Note: Expression evaluation can be disabled at compile time. If this has been
Bram Moolenaar58b85342016-08-14 19:54:54 +020012done, the features in this document are not available. See |+eval| and
Bram Moolenaard8b02732005-01-14 21:48:43 +000013|no-eval-feature|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000014
Bram Moolenaar8a7d6542020-01-26 15:56:19 +010015This file is about the backwards compatible Vim script. For Vim9 script,
16which executes much faster, supports type checking and much more, see
17|vim9.txt|.
18
Bram Moolenaar13065c42005-01-08 16:08:21 +0000191. Variables |variables|
20 1.1 Variable types
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000021 1.2 Function references |Funcref|
Bram Moolenaar7c626922005-02-07 22:01:03 +000022 1.3 Lists |Lists|
Bram Moolenaard8b02732005-01-14 21:48:43 +000023 1.4 Dictionaries |Dictionaries|
Bram Moolenaard8968242019-01-15 22:51:57 +010024 1.5 Blobs |Blobs|
25 1.6 More about variables |more-variables|
Bram Moolenaar13065c42005-01-08 16:08:21 +0000262. Expression syntax |expression-syntax|
273. Internal variable |internal-variables|
284. Builtin Functions |functions|
295. Defining functions |user-functions|
306. Curly braces names |curly-braces-names|
317. Commands |expression-commands|
328. Exception handling |exception-handling|
339. Examples |eval-examples|
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02003410. Vim script version |vimscript-version|
3511. No +eval feature |no-eval-feature|
3612. The sandbox |eval-sandbox|
3713. Textlock |textlock|
Bram Moolenaared997ad2019-07-21 16:42:00 +020038
39Testing support is documented in |testing.txt|.
40Profiling is documented at |profiling|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
Bram Moolenaar071d4272004-06-13 20:20:40 +000042==============================================================================
431. Variables *variables*
44
Bram Moolenaar13065c42005-01-08 16:08:21 +0000451.1 Variable types ~
Bram Moolenaarbf821bc2019-01-23 21:15:02 +010046 *E712* *E896* *E897* *E899*
Bram Moolenaar06fe74a2019-08-31 16:20:32 +020047There are ten types of variables:
Bram Moolenaar071d4272004-06-13 20:20:40 +000048
Bram Moolenaar664f3cf2019-12-07 16:03:51 +010049 *Number* *Integer*
50Number A 32 or 64 bit signed number. |expr-number|
Bram Moolenaarf9706e92020-02-22 14:27:04 +010051 The number of bits is available in |v:numbersize|.
Bram Moolenaar7571d552016-08-18 22:54:46 +020052 Examples: -123 0x10 0177 0b1011
Bram Moolenaard8b02732005-01-14 21:48:43 +000053
Bram Moolenaar446cb832008-06-24 21:56:24 +000054Float A floating point number. |floating-point-format| *Float*
55 {only when compiled with the |+float| feature}
56 Examples: 123.456 1.15e-6 -1.1e3
57
Bram Moolenaar06481422016-04-30 15:13:38 +020058 *E928*
Bram Moolenaard8b02732005-01-14 21:48:43 +000059String A NUL terminated string of 8-bit unsigned characters (bytes).
Bram Moolenaar446cb832008-06-24 21:56:24 +000060 |expr-string| Examples: "ab\txx\"--" 'x-z''a,c'
Bram Moolenaard8b02732005-01-14 21:48:43 +000061
Bram Moolenaard8968242019-01-15 22:51:57 +010062List An ordered sequence of items, see |List| for details.
Bram Moolenaard8b02732005-01-14 21:48:43 +000063 Example: [1, 2, ['a', 'b']]
Bram Moolenaar071d4272004-06-13 20:20:40 +000064
Bram Moolenaar39a58ca2005-06-27 22:42:44 +000065Dictionary An associative, unordered array: Each entry has a key and a
66 value. |Dictionary|
Bram Moolenaard5abb4c2019-07-13 22:46:10 +020067 Examples:
68 {'blue': "#0000ff", 'red': "#ff0000"}
Bram Moolenaar4c6d9042019-07-16 22:04:02 +020069 #{blue: "#0000ff", red: "#ff0000"}
Bram Moolenaar39a58ca2005-06-27 22:42:44 +000070
Bram Moolenaar835dc632016-02-07 14:27:38 +010071Funcref A reference to a function |Funcref|.
72 Example: function("strlen")
Bram Moolenaar1d429612016-05-24 15:44:17 +020073 It can be bound to a dictionary and arguments, it then works
74 like a Partial.
75 Example: function("Callback", [arg], myDict)
Bram Moolenaar835dc632016-02-07 14:27:38 +010076
Bram Moolenaar02e83b42016-02-21 20:10:26 +010077Special |v:false|, |v:true|, |v:none| and |v:null|. *Special*
Bram Moolenaar835dc632016-02-07 14:27:38 +010078
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +020079Job Used for a job, see |job_start()|. *Job* *Jobs*
Bram Moolenaar38a55632016-02-15 22:07:32 +010080
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +020081Channel Used for a channel, see |ch_open()|. *Channel* *Channels*
Bram Moolenaar835dc632016-02-07 14:27:38 +010082
Bram Moolenaard8968242019-01-15 22:51:57 +010083Blob Binary Large Object. Stores any sequence of bytes. See |Blob|
84 for details
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010085 Example: 0zFF00ED015DAF
86 0z is an empty Blob.
87
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +000088The Number and String types are converted automatically, depending on how they
89are used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000090
91Conversion from a Number to a String is by making the ASCII representation of
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +020092the Number. Examples:
93 Number 123 --> String "123" ~
94 Number 0 --> String "0" ~
95 Number -1 --> String "-1" ~
Bram Moolenaar00a927d2010-05-14 23:24:24 +020096 *octal*
Bram Moolenaarfa735342016-01-03 22:14:44 +010097Conversion from a String to a Number is done by converting the first digits to
98a number. Hexadecimal "0xf9", Octal "017", and Binary "0b10" numbers are
Bram Moolenaar60a8de22019-09-15 14:33:22 +020099recognized (NOTE: when using |scriptversion-4| octal is not recognized). If
100the String doesn't start with digits, the result is zero.
Bram Moolenaarfa735342016-01-03 22:14:44 +0100101Examples:
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +0200102 String "456" --> Number 456 ~
103 String "6bar" --> Number 6 ~
104 String "foo" --> Number 0 ~
105 String "0xf1" --> Number 241 ~
106 String "0100" --> Number 64 ~
Bram Moolenaarfa735342016-01-03 22:14:44 +0100107 String "0b101" --> Number 5 ~
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +0200108 String "-8" --> Number -8 ~
109 String "+8" --> Number 0 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110
111To force conversion from String to Number, add zero to it: >
112 :echo "0100" + 0
Bram Moolenaar97b2ad32006-03-18 21:40:56 +0000113< 64 ~
114
115To avoid a leading zero to cause octal conversion, or for using a different
116base, use |str2nr()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117
Bram Moolenaard09091d2019-01-17 16:07:22 +0100118 *TRUE* *FALSE* *Boolean*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE.
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200120You can also use |v:false| and |v:true|. When TRUE is returned from a
121function it is the Number one, FALSE is the number zero.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200123Note that in the command: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124 :if "foo"
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200125 :" NOT executed
126"foo" is converted to 0, which means FALSE. If the string starts with a
127non-zero number it means TRUE: >
128 :if "8foo"
129 :" executed
130To test for a non-empty string, use empty(): >
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200131 :if !empty("foo")
Bram Moolenaar835dc632016-02-07 14:27:38 +0100132<
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200133 *non-zero-arg*
134Function arguments often behave slightly different from |TRUE|: If the
135argument is present and it evaluates to a non-zero Number, |v:true| or a
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200136non-empty String, then the value is considered to be TRUE.
Bram Moolenaar01164a62017-11-02 22:58:42 +0100137Note that " " and "0" are also non-empty strings, thus considered to be TRUE.
138A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE.
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200139
Bram Moolenaar38a55632016-02-15 22:07:32 +0100140 *E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100141 *E974* *E975* *E976*
Bram Moolenaard09091d2019-01-17 16:07:22 +0100142|List|, |Dictionary|, |Funcref|, |Job|, |Channel| and |Blob| types are not
143automatically converted.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000144
Bram Moolenaar446cb832008-06-24 21:56:24 +0000145 *E805* *E806* *E808*
Bram Moolenaar58b85342016-08-14 19:54:54 +0200146When mixing Number and Float the Number is converted to Float. Otherwise
Bram Moolenaar446cb832008-06-24 21:56:24 +0000147there is no automatic conversion of Float. You can use str2float() for String
148to Float, printf() for Float to String and float2nr() for Float to Number.
149
Bram Moolenaar38a55632016-02-15 22:07:32 +0100150 *E891* *E892* *E893* *E894* *E907* *E911* *E914*
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100151When expecting a Float a Number can also be used, but nothing else.
152
Bram Moolenaarf6f32c32016-03-12 19:03:59 +0100153 *no-type-checking*
154You will not get an error if you try to change the type of a variable.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000155
Bram Moolenaar13065c42005-01-08 16:08:21 +0000156
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00001571.2 Function references ~
Bram Moolenaar748bf032005-02-02 23:04:36 +0000158 *Funcref* *E695* *E718*
Bram Moolenaar58b85342016-08-14 19:54:54 +0200159A Funcref variable is obtained with the |function()| function, the |funcref()|
160function or created with the lambda expression |expr-lambda|. It can be used
161in an expression in the place of a function name, before the parenthesis
162around the arguments, to invoke the function it refers to. Example: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000163
164 :let Fn = function("MyFunc")
165 :echo Fn()
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000166< *E704* *E705* *E707*
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000167A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:". You
Bram Moolenaar7cba6c02013-09-05 22:13:31 +0200168can use "g:" but the following name must still start with a capital. You
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000169cannot have both a Funcref variable and a function with the same name.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000170
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000171A special case is defining a function and directly assigning its Funcref to a
172Dictionary entry. Example: >
173 :function dict.init() dict
174 : let self.val = 0
175 :endfunction
176
177The key of the Dictionary can start with a lower case letter. The actual
178function name is not used here. Also see |numbered-function|.
179
180A Funcref can also be used with the |:call| command: >
181 :call Fn()
182 :call dict.init()
Bram Moolenaar13065c42005-01-08 16:08:21 +0000183
184The name of the referenced function can be obtained with |string()|. >
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000185 :let func = string(Fn)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000186
187You can use |call()| to invoke a Funcref and use a list variable for the
188arguments: >
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000189 :let r = call(Fn, mylist)
Bram Moolenaar1d429612016-05-24 15:44:17 +0200190<
191 *Partial*
192A Funcref optionally binds a Dictionary and/or arguments. This is also called
193a Partial. This is created by passing the Dictionary and/or arguments to
Bram Moolenaar58b85342016-08-14 19:54:54 +0200194function() or funcref(). When calling the function the Dictionary and/or
195arguments will be passed to the function. Example: >
Bram Moolenaar1d429612016-05-24 15:44:17 +0200196
197 let Cb = function('Callback', ['foo'], myDict)
Bram Moolenaarba3ff532018-11-04 14:45:49 +0100198 call Cb('bar')
Bram Moolenaar1d429612016-05-24 15:44:17 +0200199
200This will invoke the function as if using: >
Bram Moolenaarba3ff532018-11-04 14:45:49 +0100201 call myDict.Callback('foo', 'bar')
Bram Moolenaar1d429612016-05-24 15:44:17 +0200202
203This is very useful when passing a function around, e.g. in the arguments of
204|ch_open()|.
205
206Note that binding a function to a Dictionary also happens when the function is
207a member of the Dictionary: >
208
209 let myDict.myFunction = MyFunction
210 call myDict.myFunction()
211
212Here MyFunction() will get myDict passed as "self". This happens when the
213"myFunction" member is accessed. When making assigning "myFunction" to
214otherDict and calling it, it will be bound to otherDict: >
215
216 let otherDict.myFunction = myDict.myFunction
217 call otherDict.myFunction()
218
219Now "self" will be "otherDict". But when the dictionary was bound explicitly
220this won't happen: >
221
222 let myDict.myFunction = function(MyFunction, myDict)
223 let otherDict.myFunction = myDict.myFunction
224 call otherDict.myFunction()
225
Bram Moolenaard823fa92016-08-12 16:29:27 +0200226Here "self" will be "myDict", because it was bound explicitly.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000227
228
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00002291.3 Lists ~
Bram Moolenaar7e38ea22014-04-05 22:55:53 +0200230 *list* *List* *Lists* *E686*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000231A List is an ordered sequence of items. An item can be of any type. Items
Bram Moolenaar58b85342016-08-14 19:54:54 +0200232can be accessed by their index number. Items can be added and removed at any
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000233position in the sequence.
234
Bram Moolenaar13065c42005-01-08 16:08:21 +0000235
236List creation ~
237 *E696* *E697*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000238A List is created with a comma separated list of items in square brackets.
Bram Moolenaar13065c42005-01-08 16:08:21 +0000239Examples: >
240 :let mylist = [1, two, 3, "four"]
241 :let emptylist = []
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000242
Bram Moolenaar58b85342016-08-14 19:54:54 +0200243An item can be any expression. Using a List for an item creates a
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000244List of Lists: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000245 :let nestlist = [[11, 12], [21, 22], [31, 32]]
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000246
247An extra comma after the last item is ignored.
248
Bram Moolenaar13065c42005-01-08 16:08:21 +0000249
250List index ~
251 *list-index* *E684*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000252An item in the List can be accessed by putting the index in square brackets
Bram Moolenaar13065c42005-01-08 16:08:21 +0000253after the List. Indexes are zero-based, thus the first item has index zero. >
254 :let item = mylist[0] " get the first item: 1
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000255 :let item = mylist[2] " get the third item: 3
Bram Moolenaar13065c42005-01-08 16:08:21 +0000256
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000257When the resulting item is a list this can be repeated: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000258 :let item = nestlist[0][1] " get the first list, second item: 12
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000259<
Bram Moolenaar13065c42005-01-08 16:08:21 +0000260A negative index is counted from the end. Index -1 refers to the last item in
261the List, -2 to the last but one item, etc. >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000262 :let last = mylist[-1] " get the last item: "four"
263
Bram Moolenaar13065c42005-01-08 16:08:21 +0000264To avoid an error for an invalid index use the |get()| function. When an item
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000265is not available it returns zero or the default value you specify: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000266 :echo get(mylist, idx)
267 :echo get(mylist, idx, "NONE")
268
269
270List concatenation ~
271
272Two lists can be concatenated with the "+" operator: >
273 :let longlist = mylist + [5, 6]
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000274 :let mylist += [7, 8]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000275
276To prepend or append an item turn the item into a list by putting [] around
277it. To change a list in-place see |list-modification| below.
278
279
280Sublist ~
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200281 *sublist*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000282A part of the List can be obtained by specifying the first and last index,
283separated by a colon in square brackets: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000284 :let shortlist = mylist[2:-1] " get List [3, "four"]
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000285
286Omitting the first index is similar to zero. Omitting the last index is
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000287similar to -1. >
Bram Moolenaar540d6e32005-01-09 21:20:18 +0000288 :let endlist = mylist[2:] " from item 2 to the end: [3, "four"]
289 :let shortlist = mylist[2:2] " List with one item: [3]
290 :let otherlist = mylist[:] " make a copy of the List
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000291
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000292If the first index is beyond the last item of the List or the second item is
293before the first item, the result is an empty list. There is no error
294message.
295
296If the second index is equal to or greater than the length of the list the
297length minus one is used: >
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000298 :let mylist = [0, 1, 2, 3]
299 :echo mylist[2:8] " result: [2, 3]
300
Bram Moolenaara7fc0102005-05-18 22:17:12 +0000301NOTE: mylist[s:e] means using the variable "s:e" as index. Watch out for
Bram Moolenaar58b85342016-08-14 19:54:54 +0200302using a single letter variable before the ":". Insert a space when needed:
Bram Moolenaara7fc0102005-05-18 22:17:12 +0000303mylist[s : e].
304
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000305
Bram Moolenaar13065c42005-01-08 16:08:21 +0000306List identity ~
Bram Moolenaard8b02732005-01-14 21:48:43 +0000307 *list-identity*
Bram Moolenaar13065c42005-01-08 16:08:21 +0000308When variable "aa" is a list and you assign it to another variable "bb", both
309variables refer to the same list. Thus changing the list "aa" will also
310change "bb": >
311 :let aa = [1, 2, 3]
312 :let bb = aa
313 :call add(aa, 4)
314 :echo bb
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000315< [1, 2, 3, 4]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000316
317Making a copy of a list is done with the |copy()| function. Using [:] also
318works, as explained above. This creates a shallow copy of the list: Changing
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000319a list item in the list will also change the item in the copied list: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000320 :let aa = [[1, 'a'], 2, 3]
321 :let bb = copy(aa)
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000322 :call add(aa, 4)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000323 :let aa[0][1] = 'aaa'
324 :echo aa
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000325< [[1, aaa], 2, 3, 4] >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000326 :echo bb
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000327< [[1, aaa], 2, 3]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000328
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000329To make a completely independent list use |deepcopy()|. This also makes a
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000330copy of the values in the list, recursively. Up to a hundred levels deep.
Bram Moolenaar13065c42005-01-08 16:08:21 +0000331
332The operator "is" can be used to check if two variables refer to the same
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000333List. "isnot" does the opposite. In contrast "==" compares if two lists have
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000334the same value. >
335 :let alist = [1, 2, 3]
336 :let blist = [1, 2, 3]
337 :echo alist is blist
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000338< 0 >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000339 :echo alist == blist
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000340< 1
Bram Moolenaar13065c42005-01-08 16:08:21 +0000341
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000342Note about comparing lists: Two lists are considered equal if they have the
343same length and all items compare equal, as with using "==". There is one
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000344exception: When comparing a number with a string they are considered
345different. There is no automatic type conversion, as with using "==" on
346variables. Example: >
347 echo 4 == "4"
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000348< 1 >
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000349 echo [4] == ["4"]
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000350< 0
351
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000352Thus comparing Lists is more strict than comparing numbers and strings. You
Bram Moolenaar446cb832008-06-24 21:56:24 +0000353can compare simple values this way too by putting them in a list: >
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000354
355 :let a = 5
356 :let b = "5"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000357 :echo a == b
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000358< 1 >
Bram Moolenaar446cb832008-06-24 21:56:24 +0000359 :echo [a] == [b]
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000360< 0
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000361
Bram Moolenaar13065c42005-01-08 16:08:21 +0000362
363List unpack ~
364
365To unpack the items in a list to individual variables, put the variables in
366square brackets, like list items: >
367 :let [var1, var2] = mylist
368
369When the number of variables does not match the number of items in the list
370this produces an error. To handle any extra items from the list append ";"
371and a variable name: >
372 :let [var1, var2; rest] = mylist
373
374This works like: >
375 :let var1 = mylist[0]
376 :let var2 = mylist[1]
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000377 :let rest = mylist[2:]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000378
379Except that there is no error if there are only two items. "rest" will be an
380empty list then.
381
382
383List modification ~
384 *list-modification*
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000385To change a specific item of a list use |:let| this way: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000386 :let list[4] = "four"
387 :let listlist[0][3] = item
388
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000389To change part of a list you can specify the first and last item to be
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000390modified. The value must at least have the number of items in the range: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000391 :let list[3:5] = [3, 4, 5]
392
Bram Moolenaar13065c42005-01-08 16:08:21 +0000393Adding and removing items from a list is done with functions. Here are a few
394examples: >
395 :call insert(list, 'a') " prepend item 'a'
396 :call insert(list, 'a', 3) " insert item 'a' before list[3]
397 :call add(list, "new") " append String item
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000398 :call add(list, [1, 2]) " append a List as one new item
Bram Moolenaar13065c42005-01-08 16:08:21 +0000399 :call extend(list, [1, 2]) " extend the list with two more items
400 :let i = remove(list, 3) " remove item 3
Bram Moolenaar9cd15162005-01-16 22:02:49 +0000401 :unlet list[3] " idem
Bram Moolenaar13065c42005-01-08 16:08:21 +0000402 :let l = remove(list, 3, -1) " remove items 3 to last item
Bram Moolenaar9cd15162005-01-16 22:02:49 +0000403 :unlet list[3 : ] " idem
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000404 :call filter(list, 'v:val !~ "x"') " remove items with an 'x'
Bram Moolenaar13065c42005-01-08 16:08:21 +0000405
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000406Changing the order of items in a list: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000407 :call sort(list) " sort a list alphabetically
408 :call reverse(list) " reverse the order of items
Bram Moolenaar327aa022014-03-25 18:24:23 +0100409 :call uniq(sort(list)) " sort and remove duplicates
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000410
Bram Moolenaar13065c42005-01-08 16:08:21 +0000411
412For loop ~
413
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000414The |:for| loop executes commands for each item in a list. A variable is set
415to each item in the list in sequence. Example: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000416 :for item in mylist
417 : call Doit(item)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000418 :endfor
419
420This works like: >
421 :let index = 0
422 :while index < len(mylist)
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000423 : let item = mylist[index]
424 : :call Doit(item)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000425 : let index = index + 1
426 :endwhile
427
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000428If all you want to do is modify each item in the list then the |map()|
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000429function will be a simpler method than a for loop.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000430
Bram Moolenaar58b85342016-08-14 19:54:54 +0200431Just like the |:let| command, |:for| also accepts a list of variables. This
Bram Moolenaar13065c42005-01-08 16:08:21 +0000432requires the argument to be a list of lists. >
433 :for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
434 : call Doit(lnum, col)
435 :endfor
436
437This works like a |:let| command is done for each list item. Again, the types
438must remain the same to avoid an error.
439
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000440It is also possible to put remaining items in a List variable: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000441 :for [i, j; rest] in listlist
442 : call Doit(i, j)
443 : if !empty(rest)
444 : echo "remainder: " . string(rest)
445 : endif
446 :endfor
447
448
449List functions ~
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000450 *E714*
Bram Moolenaar13065c42005-01-08 16:08:21 +0000451Functions that are useful with a List: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000452 :let r = call(funcname, list) " call a function with an argument list
Bram Moolenaar13065c42005-01-08 16:08:21 +0000453 :if empty(list) " check if list is empty
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000454 :let l = len(list) " number of items in list
455 :let big = max(list) " maximum value in list
456 :let small = min(list) " minimum value in list
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000457 :let xs = count(list, 'x') " count nr of times 'x' appears in list
458 :let i = index(list, 'x') " index of first 'x' in list
Bram Moolenaar13065c42005-01-08 16:08:21 +0000459 :let lines = getline(1, 10) " get ten text lines from buffer
460 :call append('$', lines) " append text lines in buffer
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000461 :let list = split("a b c") " create list from items in a string
462 :let string = join(list, ', ') " create string from list items
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000463 :let s = string(list) " String representation of list
464 :call map(list, '">> " . v:val') " prepend ">> " to each item
Bram Moolenaar13065c42005-01-08 16:08:21 +0000465
Bram Moolenaar0cb032e2005-04-23 20:52:00 +0000466Don't forget that a combination of features can make things simple. For
467example, to add up all the numbers in a list: >
468 :exe 'let sum = ' . join(nrlist, '+')
469
Bram Moolenaar13065c42005-01-08 16:08:21 +0000470
Bram Moolenaard8b02732005-01-14 21:48:43 +00004711.4 Dictionaries ~
Bram Moolenaard8968242019-01-15 22:51:57 +0100472 *dict* *Dict* *Dictionaries* *Dictionary*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000473A Dictionary is an associative array: Each entry has a key and a value. The
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000474entry can be located with the key. The entries are stored without a specific
475ordering.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000476
477
478Dictionary creation ~
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000479 *E720* *E721* *E722* *E723*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000480A Dictionary is created with a comma separated list of entries in curly
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000481braces. Each entry has a key and a value, separated by a colon. Each key can
482only appear once. Examples: >
Bram Moolenaard8b02732005-01-14 21:48:43 +0000483 :let mydict = {1: 'one', 2: 'two', 3: 'three'}
484 :let emptydict = {}
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000485< *E713* *E716* *E717*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000486A key is always a String. You can use a Number, it will be converted to a
487String automatically. Thus the String '4' and the number 4 will find the same
Bram Moolenaar58b85342016-08-14 19:54:54 +0200488entry. Note that the String '04' and the Number 04 are different, since the
Bram Moolenaard5abb4c2019-07-13 22:46:10 +0200489Number will be converted to the String '4'. The empty string can also be used
490as a key.
Bram Moolenaar56c860c2019-08-17 20:09:31 +0200491 *literal-Dict* *#{}*
Bram Moolenaar4c6d9042019-07-16 22:04:02 +0200492To avoid having to put quotes around every key the #{} form can be used. This
Bram Moolenaard5abb4c2019-07-13 22:46:10 +0200493does require the key to consist only of ASCII letters, digits, '-' and '_'.
494Example: >
Bram Moolenaar10455d42019-11-21 15:36:18 +0100495 :let mydict = #{zero: 0, one_key: 1, two-key: 2, 333: 3}
Bram Moolenaar4c6d9042019-07-16 22:04:02 +0200496Note that 333 here is the string "333". Empty keys are not possible with #{}.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000497
Bram Moolenaar58b85342016-08-14 19:54:54 +0200498A value can be any expression. Using a Dictionary for a value creates a
Bram Moolenaard8b02732005-01-14 21:48:43 +0000499nested Dictionary: >
500 :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}
501
502An extra comma after the last entry is ignored.
503
504
505Accessing entries ~
506
507The normal way to access an entry is by putting the key in square brackets: >
508 :let val = mydict["one"]
509 :let mydict["four"] = 4
510
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000511You can add new entries to an existing Dictionary this way, unlike Lists.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000512
513For keys that consist entirely of letters, digits and underscore the following
514form can be used |expr-entry|: >
515 :let val = mydict.one
516 :let mydict.four = 4
517
518Since an entry can be any type, also a List and a Dictionary, the indexing and
519key lookup can be repeated: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000520 :echo dict.key[idx].key
Bram Moolenaard8b02732005-01-14 21:48:43 +0000521
522
523Dictionary to List conversion ~
524
Bram Moolenaar58b85342016-08-14 19:54:54 +0200525You may want to loop over the entries in a dictionary. For this you need to
Bram Moolenaard8b02732005-01-14 21:48:43 +0000526turn the Dictionary into a List and pass it to |:for|.
527
528Most often you want to loop over the keys, using the |keys()| function: >
529 :for key in keys(mydict)
530 : echo key . ': ' . mydict[key]
531 :endfor
532
533The List of keys is unsorted. You may want to sort them first: >
534 :for key in sort(keys(mydict))
535
536To loop over the values use the |values()| function: >
537 :for v in values(mydict)
538 : echo "value: " . v
539 :endfor
540
541If you want both the key and the value use the |items()| function. It returns
Bram Moolenaard47d5222018-12-09 20:43:55 +0100542a List in which each item is a List with two items, the key and the value: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000543 :for [key, value] in items(mydict)
544 : echo key . ': ' . value
Bram Moolenaard8b02732005-01-14 21:48:43 +0000545 :endfor
546
547
548Dictionary identity ~
Bram Moolenaar7c626922005-02-07 22:01:03 +0000549 *dict-identity*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000550Just like Lists you need to use |copy()| and |deepcopy()| to make a copy of a
551Dictionary. Otherwise, assignment results in referring to the same
552Dictionary: >
553 :let onedict = {'a': 1, 'b': 2}
554 :let adict = onedict
555 :let adict['a'] = 11
556 :echo onedict['a']
557 11
558
Bram Moolenaarf3bd51a2005-06-14 22:11:18 +0000559Two Dictionaries compare equal if all the key-value pairs compare equal. For
560more info see |list-identity|.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000561
562
563Dictionary modification ~
564 *dict-modification*
565To change an already existing entry of a Dictionary, or to add a new entry,
566use |:let| this way: >
567 :let dict[4] = "four"
568 :let dict['one'] = item
569
Bram Moolenaar9cd15162005-01-16 22:02:49 +0000570Removing an entry from a Dictionary is done with |remove()| or |:unlet|.
571Three ways to remove the entry with key "aaa" from dict: >
572 :let i = remove(dict, 'aaa')
573 :unlet dict.aaa
574 :unlet dict['aaa']
Bram Moolenaard8b02732005-01-14 21:48:43 +0000575
576Merging a Dictionary with another is done with |extend()|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000577 :call extend(adict, bdict)
578This extends adict with all entries from bdict. Duplicate keys cause entries
579in adict to be overwritten. An optional third argument can change this.
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000580Note that the order of entries in a Dictionary is irrelevant, thus don't
581expect ":echo adict" to show the items from bdict after the older entries in
582adict.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000583
584Weeding out entries from a Dictionary can be done with |filter()|: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000585 :call filter(dict, 'v:val =~ "x"')
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000586This removes all entries from "dict" with a value not matching 'x'.
Bram Moolenaar388a5d42020-05-26 21:20:45 +0200587This can also be used to remove all entries: >
588 call filter(dict, 0)
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000589
590
591Dictionary function ~
Bram Moolenaar26402cb2013-02-20 21:26:00 +0100592 *Dictionary-function* *self* *E725* *E862*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000593When a function is defined with the "dict" attribute it can be used in a
Bram Moolenaar58b85342016-08-14 19:54:54 +0200594special way with a dictionary. Example: >
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000595 :function Mylen() dict
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000596 : return len(self.data)
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000597 :endfunction
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000598 :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
599 :echo mydict.len()
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000600
601This is like a method in object oriented programming. The entry in the
602Dictionary is a |Funcref|. The local variable "self" refers to the dictionary
603the function was invoked from.
604
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000605It is also possible to add a function without the "dict" attribute as a
606Funcref to a Dictionary, but the "self" variable is not available then.
607
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000608 *numbered-function* *anonymous-function*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000609To avoid the extra name for the function it can be defined and directly
610assigned to a Dictionary in this way: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000611 :let mydict = {'data': [0, 1, 2, 3]}
Bram Moolenaar5a5f4592015-04-13 12:43:06 +0200612 :function mydict.len()
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000613 : return len(self.data)
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000614 :endfunction
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000615 :echo mydict.len()
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000616
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000617The function will then get a number and the value of dict.len is a |Funcref|
Bram Moolenaar58b85342016-08-14 19:54:54 +0200618that references this function. The function can only be used through a
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000619|Funcref|. It will automatically be deleted when there is no |Funcref|
620remaining that refers to it.
621
622It is not necessary to use the "dict" attribute for a numbered function.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000623
Bram Moolenaar1affd722010-08-04 17:49:30 +0200624If you get an error for a numbered function, you can find out what it is with
625a trick. Assuming the function is 42, the command is: >
626 :function {42}
627
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000628
629Functions for Dictionaries ~
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000630 *E715*
631Functions that can be used with a Dictionary: >
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000632 :if has_key(dict, 'foo') " TRUE if dict has entry with key "foo"
633 :if empty(dict) " TRUE if dict is empty
634 :let l = len(dict) " number of items in dict
635 :let big = max(dict) " maximum value in dict
636 :let small = min(dict) " minimum value in dict
637 :let xs = count(dict, 'x') " count nr of times 'x' appears in dict
638 :let s = string(dict) " String representation of dict
639 :call map(dict, '">> " . v:val') " prepend ">> " to each item
Bram Moolenaard8b02732005-01-14 21:48:43 +0000640
641
Bram Moolenaard8968242019-01-15 22:51:57 +01006421.5 Blobs ~
643 *blob* *Blob* *Blobs* *E978*
Bram Moolenaaraff74912019-03-30 18:11:49 +0100644A Blob is a binary object. It can be used to read an image from a file and
645send it over a channel, for example.
646
647A Blob mostly behaves like a |List| of numbers, where each number has the
648value of an 8-bit byte, from 0 to 255.
Bram Moolenaard8968242019-01-15 22:51:57 +0100649
650
651Blob creation ~
652
653A Blob can be created with a |blob-literal|: >
654 :let b = 0zFF00ED015DAF
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +0100655Dots can be inserted between bytes (pair of hex characters) for readability,
656they don't change the value: >
657 :let b = 0zFF00.ED01.5DAF
Bram Moolenaard8968242019-01-15 22:51:57 +0100658
659A blob can be read from a file with |readfile()| passing the {type} argument
660set to "B", for example: >
661 :let b = readfile('image.png', 'B')
662
663A blob can be read from a channel with the |ch_readblob()| function.
664
665
666Blob index ~
667 *blob-index* *E979*
668A byte in the Blob can be accessed by putting the index in square brackets
669after the Blob. Indexes are zero-based, thus the first byte has index zero. >
670 :let myblob = 0z00112233
671 :let byte = myblob[0] " get the first byte: 0x00
672 :let byte = myblob[2] " get the third byte: 0x22
673
674A negative index is counted from the end. Index -1 refers to the last byte in
675the Blob, -2 to the last but one byte, etc. >
676 :let last = myblob[-1] " get the last byte: 0x33
677
678To avoid an error for an invalid index use the |get()| function. When an item
679is not available it returns -1 or the default value you specify: >
680 :echo get(myblob, idx)
681 :echo get(myblob, idx, 999)
682
683
Bram Moolenaar5e66b422019-01-24 21:58:10 +0100684Blob iteration ~
685
686The |:for| loop executes commands for each byte of a Blob. The loop variable is
687set to each byte in the Blob. Example: >
688 :for byte in 0z112233
689 : call Doit(byte)
690 :endfor
691This calls Doit() with 0x11, 0x22 and 0x33.
692
693
Bram Moolenaard8968242019-01-15 22:51:57 +0100694Blob concatenation ~
695
696Two blobs can be concatenated with the "+" operator: >
697 :let longblob = myblob + 0z4455
698 :let myblob += 0z6677
699
700To change a blob in-place see |blob-modification| below.
701
702
703Part of a blob ~
704
705A part of the Blob can be obtained by specifying the first and last index,
706separated by a colon in square brackets: >
707 :let myblob = 0z00112233
Bram Moolenaard09091d2019-01-17 16:07:22 +0100708 :let shortblob = myblob[1:2] " get 0z1122
Bram Moolenaard8968242019-01-15 22:51:57 +0100709 :let shortblob = myblob[2:-1] " get 0z2233
710
711Omitting the first index is similar to zero. Omitting the last index is
712similar to -1. >
713 :let endblob = myblob[2:] " from item 2 to the end: 0z2233
714 :let shortblob = myblob[2:2] " Blob with one byte: 0z22
715 :let otherblob = myblob[:] " make a copy of the Blob
716
Bram Moolenaard09091d2019-01-17 16:07:22 +0100717If the first index is beyond the last byte of the Blob or the second index is
Bram Moolenaaraa5df7e2019-02-03 14:53:10 +0100718before the first index, the result is an empty Blob. There is no error
Bram Moolenaard8968242019-01-15 22:51:57 +0100719message.
720
721If the second index is equal to or greater than the length of the list the
722length minus one is used: >
723 :echo myblob[2:8] " result: 0z2233
724
725
726Blob modification ~
727 *blob-modification*
728To change a specific byte of a blob use |:let| this way: >
729 :let blob[4] = 0x44
730
731When the index is just one beyond the end of the Blob, it is appended. Any
732higher index is an error.
733
734To change a sequence of bytes the [:] notation can be used: >
735 let blob[1:3] = 0z445566
Bram Moolenaard09091d2019-01-17 16:07:22 +0100736The length of the replaced bytes must be exactly the same as the value
Bram Moolenaard8968242019-01-15 22:51:57 +0100737provided. *E972*
738
739To change part of a blob you can specify the first and last byte to be
Bram Moolenaard09091d2019-01-17 16:07:22 +0100740modified. The value must have the same number of bytes in the range: >
741 :let blob[3:5] = 0z334455
Bram Moolenaard8968242019-01-15 22:51:57 +0100742
743You can also use the functions |add()|, |remove()| and |insert()|.
744
745
746Blob identity ~
747
748Blobs can be compared for equality: >
749 if blob == 0z001122
750And for equal identity: >
751 if blob is otherblob
752< *blob-identity* *E977*
753When variable "aa" is a Blob and you assign it to another variable "bb", both
754variables refer to the same Blob. Then the "is" operator returns true.
755
756When making a copy using [:] or |copy()| the values are the same, but the
757identity is different: >
758 :let blob = 0z112233
759 :let blob2 = blob
760 :echo blob == blob2
761< 1 >
762 :echo blob is blob2
763< 1 >
764 :let blob3 = blob[:]
765 :echo blob == blob3
766< 1 >
767 :echo blob is blob3
768< 0
769
Bram Moolenaard09091d2019-01-17 16:07:22 +0100770Making a copy of a Blob is done with the |copy()| function. Using [:] also
Bram Moolenaard8968242019-01-15 22:51:57 +0100771works, as explained above.
772
773
7741.6 More about variables ~
Bram Moolenaar13065c42005-01-08 16:08:21 +0000775 *more-variables*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000776If you need to know the type of a variable or expression, use the |type()|
777function.
778
779When the '!' flag is included in the 'viminfo' option, global variables that
780start with an uppercase letter, and don't contain a lowercase letter, are
781stored in the viminfo file |viminfo-file|.
782
783When the 'sessionoptions' option contains "global", global variables that
784start with an uppercase letter and contain at least one lowercase letter are
785stored in the session file |session-file|.
786
787variable name can be stored where ~
788my_var_6 not
789My_Var_6 session file
790MY_VAR_6 viminfo file
791
792
793It's possible to form a variable name with curly braces, see
794|curly-braces-names|.
795
796==============================================================================
7972. Expression syntax *expression-syntax*
798
799Expression syntax summary, from least to most significant:
800
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200801|expr1| expr2
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200802 expr2 ? expr1 : expr1 if-then-else
Bram Moolenaar071d4272004-06-13 20:20:40 +0000803
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200804|expr2| expr3
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200805 expr3 || expr3 ... logical OR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000806
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200807|expr3| expr4
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200808 expr4 && expr4 ... logical AND
Bram Moolenaar071d4272004-06-13 20:20:40 +0000809
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200810|expr4| expr5
811 expr5 == expr5 equal
Bram Moolenaar071d4272004-06-13 20:20:40 +0000812 expr5 != expr5 not equal
813 expr5 > expr5 greater than
814 expr5 >= expr5 greater than or equal
815 expr5 < expr5 smaller than
816 expr5 <= expr5 smaller than or equal
817 expr5 =~ expr5 regexp matches
818 expr5 !~ expr5 regexp doesn't match
819
820 expr5 ==? expr5 equal, ignoring case
821 expr5 ==# expr5 equal, match case
822 etc. As above, append ? for ignoring case, # for
823 matching case
824
Bram Moolenaar5e66b422019-01-24 21:58:10 +0100825 expr5 is expr5 same |List|, |Dictionary| or |Blob| instance
826 expr5 isnot expr5 different |List|, |Dictionary| or |Blob|
827 instance
Bram Moolenaarde8866b2005-01-06 23:24:37 +0000828
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200829|expr5| expr6
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200830 expr6 + expr6 ... number addition, list or blob concatenation
831 expr6 - expr6 ... number subtraction
832 expr6 . expr6 ... string concatenation
833 expr6 .. expr6 ... string concatenation
Bram Moolenaar071d4272004-06-13 20:20:40 +0000834
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200835|expr6| expr7
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200836 expr7 * expr7 ... number multiplication
837 expr7 / expr7 ... number division
838 expr7 % expr7 ... number modulo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000839
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200840|expr7| expr8
841 ! expr7 logical NOT
Bram Moolenaar071d4272004-06-13 20:20:40 +0000842 - expr7 unary minus
843 + expr7 unary plus
Bram Moolenaar071d4272004-06-13 20:20:40 +0000844
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200845|expr8| expr9
846 expr8[expr1] byte of a String or item of a |List|
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000847 expr8[expr1 : expr1] substring of a String or sublist of a |List|
848 expr8.name entry in a |Dictionary|
849 expr8(expr1, ...) function call with |Funcref| variable
Bram Moolenaar25e42232019-08-04 15:04:10 +0200850 expr8->name(expr1, ...) |method| call
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000851
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200852|expr9| number number constant
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000853 "string" string constant, backslash is special
Bram Moolenaard8b02732005-01-14 21:48:43 +0000854 'string' string constant, ' is doubled
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000855 [expr1, ...] |List|
856 {expr1: expr1, ...} |Dictionary|
Bram Moolenaar25e42232019-08-04 15:04:10 +0200857 #{key: expr1, ...} |Dictionary|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000858 &option option value
859 (expr1) nested expression
860 variable internal variable
861 va{ria}ble internal variable with curly braces
862 $VAR environment variable
863 @r contents of register 'r'
864 function(expr1, ...) function call
865 func{ti}on(expr1, ...) function call with curly braces
Bram Moolenaar069c1e72016-07-15 21:25:08 +0200866 {args -> expr1} lambda expression
Bram Moolenaar071d4272004-06-13 20:20:40 +0000867
868
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200869"..." indicates that the operations in this level can be concatenated.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000870Example: >
871 &nu || &list && &shell == "csh"
872
873All expressions within one level are parsed from left to right.
874
875
876expr1 *expr1* *E109*
877-----
878
879expr2 ? expr1 : expr1
880
881The expression before the '?' is evaluated to a number. If it evaluates to
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200882|TRUE|, the result is the value of the expression between the '?' and ':',
Bram Moolenaar071d4272004-06-13 20:20:40 +0000883otherwise the result is the value of the expression after the ':'.
884Example: >
885 :echo lnum == 1 ? "top" : lnum
886
887Since the first expression is an "expr2", it cannot contain another ?:. The
888other two expressions can, thus allow for recursive use of ?:.
889Example: >
890 :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
891
892To keep this readable, using |line-continuation| is suggested: >
893 :echo lnum == 1
894 :\ ? "top"
895 :\ : lnum == 1000
896 :\ ? "last"
897 :\ : lnum
898
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000899You should always put a space before the ':', otherwise it can be mistaken for
900use in a variable such as "a:1".
901
Bram Moolenaar071d4272004-06-13 20:20:40 +0000902
903expr2 and expr3 *expr2* *expr3*
904---------------
905
Bram Moolenaar04186092016-08-29 21:55:35 +0200906expr3 || expr3 .. logical OR *expr-barbar*
907expr4 && expr4 .. logical AND *expr-&&*
908
Bram Moolenaar071d4272004-06-13 20:20:40 +0000909The "||" and "&&" operators take one argument on each side. The arguments
910are (converted to) Numbers. The result is:
911
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200912 input output ~
913n1 n2 n1 || n2 n1 && n2 ~
914|FALSE| |FALSE| |FALSE| |FALSE|
915|FALSE| |TRUE| |TRUE| |FALSE|
916|TRUE| |FALSE| |TRUE| |FALSE|
917|TRUE| |TRUE| |TRUE| |TRUE|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000918
919The operators can be concatenated, for example: >
920
921 &nu || &list && &shell == "csh"
922
923Note that "&&" takes precedence over "||", so this has the meaning of: >
924
925 &nu || (&list && &shell == "csh")
926
927Once the result is known, the expression "short-circuits", that is, further
928arguments are not evaluated. This is like what happens in C. For example: >
929
930 let a = 1
931 echo a || b
932
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200933This is valid even if there is no variable called "b" because "a" is |TRUE|,
934so the result must be |TRUE|. Similarly below: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000935
936 echo exists("b") && b == "yes"
937
938This is valid whether "b" has been defined or not. The second clause will
939only be evaluated if "b" has been defined.
940
941
942expr4 *expr4*
943-----
944
945expr5 {cmp} expr5
946
947Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1
948if it evaluates to true.
949
Bram Moolenaar446cb832008-06-24 21:56:24 +0000950 *expr-==* *expr-!=* *expr->* *expr->=*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000951 *expr-<* *expr-<=* *expr-=~* *expr-!~*
952 *expr-==#* *expr-!=#* *expr->#* *expr->=#*
953 *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#*
954 *expr-==?* *expr-!=?* *expr->?* *expr->=?*
955 *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
Bram Moolenaar251e1912011-06-19 05:09:16 +0200956 *expr-is* *expr-isnot* *expr-is#* *expr-isnot#*
957 *expr-is?* *expr-isnot?*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000958 use 'ignorecase' match case ignore case ~
959equal == ==# ==?
960not equal != !=# !=?
961greater than > ># >?
962greater than or equal >= >=# >=?
963smaller than < <# <?
964smaller than or equal <= <=# <=?
965regexp matches =~ =~# =~?
966regexp doesn't match !~ !~# !~?
Bram Moolenaar251e1912011-06-19 05:09:16 +0200967same instance is is# is?
968different instance isnot isnot# isnot?
Bram Moolenaar071d4272004-06-13 20:20:40 +0000969
970Examples:
971"abc" ==# "Abc" evaluates to 0
972"abc" ==? "Abc" evaluates to 1
973"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise
974
Bram Moolenaar13065c42005-01-08 16:08:21 +0000975 *E691* *E692*
Bram Moolenaar01164a62017-11-02 22:58:42 +0100976A |List| can only be compared with a |List| and only "equal", "not equal",
977"is" and "isnot" can be used. This compares the values of the list,
978recursively. Ignoring case means case is ignored when comparing item values.
Bram Moolenaarde8866b2005-01-06 23:24:37 +0000979
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000980 *E735* *E736*
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000981A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not
Bram Moolenaar01164a62017-11-02 22:58:42 +0100982equal", "is" and "isnot" can be used. This compares the key/values of the
983|Dictionary| recursively. Ignoring case means case is ignored when comparing
984item values.
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000985
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200986 *E694*
Bram Moolenaare18dbe82016-07-02 21:42:23 +0200987A |Funcref| can only be compared with a |Funcref| and only "equal", "not
988equal", "is" and "isnot" can be used. Case is never ignored. Whether
989arguments or a Dictionary are bound (with a partial) matters. The
990Dictionaries must also be equal (or the same, in case of "is") and the
991arguments must be equal (or the same).
992
993To compare Funcrefs to see if they refer to the same function, ignoring bound
994Dictionary and arguments, use |get()| to get the function name: >
995 if get(Part1, 'name') == get(Part2, 'name')
996 " Part1 and Part2 refer to the same function
Bram Moolenaarde8866b2005-01-06 23:24:37 +0000997
Bram Moolenaar5e66b422019-01-24 21:58:10 +0100998Using "is" or "isnot" with a |List|, |Dictionary| or |Blob| checks whether
999the expressions are referring to the same |List|, |Dictionary| or |Blob|
1000instance. A copy of a |List| is different from the original |List|. When
1001using "is" without a |List|, |Dictionary| or |Blob|, it is equivalent to
1002using "equal", using "isnot" equivalent to using "not equal". Except that
1003a different type means the values are different: >
Bram Moolenaar86edef62016-03-13 18:07:30 +01001004 echo 4 == '4'
1005 1
1006 echo 4 is '4'
1007 0
1008 echo 0 is []
1009 0
1010"is#"/"isnot#" and "is?"/"isnot?" can be used to match and ignore case.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00001011
Bram Moolenaar071d4272004-06-13 20:20:40 +00001012When comparing a String with a Number, the String is converted to a Number,
Bram Moolenaar58b85342016-08-14 19:54:54 +02001013and the comparison is done on Numbers. This means that: >
Bram Moolenaar86edef62016-03-13 18:07:30 +01001014 echo 0 == 'x'
1015 1
1016because 'x' converted to a Number is zero. However: >
1017 echo [0] == ['x']
1018 0
1019Inside a List or Dictionary this conversion is not used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001020
1021When comparing two Strings, this is done with strcmp() or stricmp(). This
1022results in the mathematical difference (comparing byte values), not
1023necessarily the alphabetical difference in the local language.
1024
Bram Moolenaar446cb832008-06-24 21:56:24 +00001025When using the operators with a trailing '#', or the short version and
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001026'ignorecase' is off, the comparing is done with strcmp(): case matters.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001027
1028When using the operators with a trailing '?', or the short version and
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001029'ignorecase' is set, the comparing is done with stricmp(): case is ignored.
1030
1031'smartcase' is not used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001032
1033The "=~" and "!~" operators match the lefthand argument with the righthand
1034argument, which is used as a pattern. See |pattern| for what a pattern is.
1035This matching is always done like 'magic' was set and 'cpoptions' is empty, no
1036matter what the actual value of 'magic' or 'cpoptions' is. This makes scripts
1037portable. To avoid backslashes in the regexp pattern to be doubled, use a
1038single-quote string, see |literal-string|.
1039Since a string is considered to be a single line, a multi-line pattern
1040(containing \n, backslash-n) will not match. However, a literal NL character
1041can be matched like an ordinary character. Examples:
1042 "foo\nbar" =~ "\n" evaluates to 1
1043 "foo\nbar" =~ "\\n" evaluates to 0
1044
1045
1046expr5 and expr6 *expr5* *expr6*
1047---------------
Bram Moolenaar0f248b02019-04-04 15:36:05 +02001048expr6 + expr6 Number addition, |List| or |Blob| concatenation *expr-+*
1049expr6 - expr6 Number subtraction *expr--*
1050expr6 . expr6 String concatenation *expr-.*
1051expr6 .. expr6 String concatenation *expr-..*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001052
Bram Moolenaara23ccb82006-02-27 00:08:02 +00001053For |Lists| only "+" is possible and then both expr6 must be a list. The
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001054result is a new list with the two lists Concatenated.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00001055
Bram Moolenaar0f248b02019-04-04 15:36:05 +02001056For String concatenation ".." is preferred, since "." is ambiguous, it is also
1057used for |Dict| member access and floating point numbers.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001058When |vimscript-version| is 2 or higher, using "." is not allowed.
Bram Moolenaar0f248b02019-04-04 15:36:05 +02001059
Bram Moolenaar5e66b422019-01-24 21:58:10 +01001060expr7 * expr7 Number multiplication *expr-star*
1061expr7 / expr7 Number division *expr-/*
1062expr7 % expr7 Number modulo *expr-%*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001063
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02001064For all, except "." and "..", Strings are converted to Numbers.
Bram Moolenaard6e256c2011-12-14 15:32:50 +01001065For bitwise operators see |and()|, |or()| and |xor()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001066
1067Note the difference between "+" and ".":
1068 "123" + "456" = 579
1069 "123" . "456" = "123456"
1070
Bram Moolenaar446cb832008-06-24 21:56:24 +00001071Since '.' has the same precedence as '+' and '-', you need to read: >
1072 1 . 90 + 90.0
1073As: >
1074 (1 . 90) + 90.0
1075That works, since the String "190" is automatically converted to the Number
1076190, which can be added to the Float 90.0. However: >
1077 1 . 90 * 90.0
1078Should be read as: >
1079 1 . (90 * 90.0)
1080Since '.' has lower precedence than '*'. This does NOT work, since this
1081attempts to concatenate a Float and a String.
1082
1083When dividing a Number by zero the result depends on the value:
1084 0 / 0 = -0x80000000 (like NaN for Float)
1085 >0 / 0 = 0x7fffffff (like positive infinity)
1086 <0 / 0 = -0x7fffffff (like negative infinity)
1087 (before Vim 7.2 it was always 0x7fffffff)
1088
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02001089When 64-bit Number support is enabled:
1090 0 / 0 = -0x8000000000000000 (like NaN for Float)
1091 >0 / 0 = 0x7fffffffffffffff (like positive infinity)
1092 <0 / 0 = -0x7fffffffffffffff (like negative infinity)
1093
Bram Moolenaar071d4272004-06-13 20:20:40 +00001094When the righthand side of '%' is zero, the result is 0.
1095
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001096None of these work for |Funcref|s.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00001097
Bram Moolenaar446cb832008-06-24 21:56:24 +00001098. and % do not work for Float. *E804*
1099
Bram Moolenaar071d4272004-06-13 20:20:40 +00001100
1101expr7 *expr7*
1102-----
1103! expr7 logical NOT *expr-!*
1104- expr7 unary minus *expr-unary--*
1105+ expr7 unary plus *expr-unary-+*
1106
Bram Moolenaare381d3d2016-07-07 14:50:41 +02001107For '!' |TRUE| becomes |FALSE|, |FALSE| becomes |TRUE| (one).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001108For '-' the sign of the number is changed.
1109For '+' the number is unchanged.
1110
1111A String will be converted to a Number first.
1112
Bram Moolenaar58b85342016-08-14 19:54:54 +02001113These three can be repeated and mixed. Examples:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001114 !-1 == 0
1115 !!8 == 1
1116 --9 == 9
1117
1118
1119expr8 *expr8*
1120-----
Bram Moolenaarfc65cab2018-08-28 22:58:02 +02001121This expression is either |expr9| or a sequence of the alternatives below,
1122in any order. E.g., these are all possible:
Bram Moolenaar25e42232019-08-04 15:04:10 +02001123 expr8[expr1].name
1124 expr8.name[expr1]
1125 expr8(expr1, ...)[expr1].name
1126 expr8->(expr1, ...)[expr1]
Bram Moolenaarac92e252019-08-03 21:58:38 +02001127Evaluation is always from left to right.
Bram Moolenaarfc65cab2018-08-28 22:58:02 +02001128
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001129expr8[expr1] item of String or |List| *expr-[]* *E111*
Bram Moolenaar03413f42016-04-12 21:07:15 +02001130 *E909* *subscript*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001131If expr8 is a Number or String this results in a String that contains the
1132expr1'th single byte from expr8. expr8 is used as a String, expr1 as a
Bram Moolenaar50ba5262016-09-22 22:33:02 +02001133Number. This doesn't recognize multi-byte encodings, see `byteidx()` for
Bram Moolenaar03413f42016-04-12 21:07:15 +02001134an alternative, or use `split()` to turn the string into a list of characters.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001135
Bram Moolenaar256972a2015-12-29 19:10:25 +01001136Index zero gives the first byte. This is like it works in C. Careful:
1137text column numbers start with one! Example, to get the byte under the
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001138cursor: >
Bram Moolenaar61660ea2006-04-07 21:40:07 +00001139 :let c = getline(".")[col(".") - 1]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001140
1141If the length of the String is less than the index, the result is an empty
Bram Moolenaar85084ef2016-01-17 22:26:33 +01001142String. A negative index always results in an empty string (reason: backward
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001143compatibility). Use [-1:] to get the last byte.
1144
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001145If expr8 is a |List| then it results the item at index expr1. See |list-index|
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001146for possible index values. If the index is out of range this results in an
Bram Moolenaar58b85342016-08-14 19:54:54 +02001147error. Example: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001148 :let item = mylist[-1] " get last item
1149
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001150Generally, if a |List| index is equal to or higher than the length of the
1151|List|, or more negative than the length of the |List|, this results in an
1152error.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001153
Bram Moolenaard8b02732005-01-14 21:48:43 +00001154
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001155expr8[expr1a : expr1b] substring or sublist *expr-[:]*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001156
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001157If expr8 is a Number or String this results in the substring with the bytes
1158from expr1a to and including expr1b. expr8 is used as a String, expr1a and
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001159expr1b are used as a Number. This doesn't recognize multi-byte encodings, see
1160|byteidx()| for computing the indexes.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001161
1162If expr1a is omitted zero is used. If expr1b is omitted the length of the
1163string minus one is used.
1164
1165A negative number can be used to measure from the end of the string. -1 is
1166the last character, -2 the last but one, etc.
1167
1168If an index goes out of range for the string characters are omitted. If
1169expr1b is smaller than expr1a the result is an empty string.
1170
1171Examples: >
1172 :let c = name[-1:] " last byte of a string
1173 :let c = name[-2:-2] " last but one byte of a string
1174 :let s = line(".")[4:] " from the fifth byte to the end
1175 :let s = s[:-3] " remove last two bytes
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001176<
Bram Moolenaarbc8801c2016-08-02 21:04:33 +02001177 *slice*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001178If expr8 is a |List| this results in a new |List| with the items indicated by
Bram Moolenaar58b85342016-08-14 19:54:54 +02001179the indexes expr1a and expr1b. This works like with a String, as explained
Bram Moolenaarbc8801c2016-08-02 21:04:33 +02001180just above. Also see |sublist| below. Examples: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001181 :let l = mylist[:3] " first four items
1182 :let l = mylist[4:4] " List with one item
1183 :let l = mylist[:] " shallow copy of a List
1184
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01001185If expr8 is a |Blob| this results in a new |Blob| with the bytes in the
1186indexes expr1a and expr1b, inclusive. Examples: >
1187 :let b = 0zDEADBEEF
1188 :let bs = b[1:2] " 0zADBE
Bram Moolenaard09091d2019-01-17 16:07:22 +01001189 :let bs = b[:] " copy of 0zDEADBEEF
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01001190
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001191Using expr8[expr1] or expr8[expr1a : expr1b] on a |Funcref| results in an
1192error.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001193
Bram Moolenaarda440d22016-01-16 21:27:23 +01001194Watch out for confusion between a namespace and a variable followed by a colon
1195for a sublist: >
1196 mylist[n:] " uses variable n
1197 mylist[s:] " uses namespace s:, error!
1198
Bram Moolenaard8b02732005-01-14 21:48:43 +00001199
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001200expr8.name entry in a |Dictionary| *expr-entry*
Bram Moolenaard8b02732005-01-14 21:48:43 +00001201
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001202If expr8 is a |Dictionary| and it is followed by a dot, then the following
1203name will be used as a key in the |Dictionary|. This is just like:
1204expr8[name].
Bram Moolenaard8b02732005-01-14 21:48:43 +00001205
1206The name must consist of alphanumeric characters, just like a variable name,
1207but it may start with a number. Curly braces cannot be used.
1208
1209There must not be white space before or after the dot.
1210
1211Examples: >
1212 :let dict = {"one": 1, 2: "two"}
Bram Moolenaar68e65602019-05-26 21:33:31 +02001213 :echo dict.one " shows "1"
1214 :echo dict.2 " shows "two"
1215 :echo dict .2 " error because of space before the dot
Bram Moolenaard8b02732005-01-14 21:48:43 +00001216
1217Note that the dot is also used for String concatenation. To avoid confusion
1218always put spaces around the dot for String concatenation.
1219
1220
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001221expr8(expr1, ...) |Funcref| function call
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001222
1223When expr8 is a |Funcref| type variable, invoke the function it refers to.
1224
1225
Bram Moolenaar22a0c0c2019-08-09 23:25:08 +02001226expr8->name([args]) method call *method* *->*
1227expr8->{lambda}([args])
Bram Moolenaar56c860c2019-08-17 20:09:31 +02001228 *E276*
Bram Moolenaar25e42232019-08-04 15:04:10 +02001229For methods that are also available as global functions this is the same as: >
Bram Moolenaarac92e252019-08-03 21:58:38 +02001230 name(expr8 [, args])
1231There can also be methods specifically for the type of "expr8".
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001232
Bram Moolenaar51841322019-08-08 21:10:01 +02001233This allows for chaining, passing the value that one method returns to the
1234next method: >
Bram Moolenaar25e42232019-08-04 15:04:10 +02001235 mylist->filter(filterexpr)->map(mapexpr)->sort()->join()
1236<
Bram Moolenaar22a0c0c2019-08-09 23:25:08 +02001237Example of using a lambda: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02001238 GetPercentage()->{x -> x * 100}()->printf('%d%%')
Bram Moolenaar56c860c2019-08-17 20:09:31 +02001239<
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02001240When using -> the |expr7| operators will be applied first, thus: >
1241 -1.234->string()
1242Is equivalent to: >
1243 (-1.234)->string()
1244And NOT: >
1245 -(1.234->string())
1246<
Bram Moolenaar51841322019-08-08 21:10:01 +02001247 *E274*
1248"->name(" must not contain white space. There can be white space before the
1249"->" and after the "(", thus you can split the lines like this: >
1250 mylist
1251 \ ->filter(filterexpr)
1252 \ ->map(mapexpr)
1253 \ ->sort()
1254 \ ->join()
Bram Moolenaar56c860c2019-08-17 20:09:31 +02001255
1256When using the lambda form there must be no white space between the } and the
1257(.
1258
Bram Moolenaar25e42232019-08-04 15:04:10 +02001259
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001260 *expr9*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001261number
1262------
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001263number number constant *expr-number*
Bram Moolenaar7571d552016-08-18 22:54:46 +02001264 *hex-number* *octal-number* *binary-number*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001265
Bram Moolenaar7571d552016-08-18 22:54:46 +02001266Decimal, Hexadecimal (starting with 0x or 0X), Binary (starting with 0b or 0B)
1267and Octal (starting with 0).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268
Bram Moolenaar446cb832008-06-24 21:56:24 +00001269 *floating-point-format*
1270Floating point numbers can be written in two forms:
1271
1272 [-+]{N}.{M}
Bram Moolenaar8a94d872015-01-25 13:02:57 +01001273 [-+]{N}.{M}[eE][-+]{exp}
Bram Moolenaar446cb832008-06-24 21:56:24 +00001274
1275{N} and {M} are numbers. Both {N} and {M} must be present and can only
1276contain digits.
1277[-+] means there is an optional plus or minus sign.
1278{exp} is the exponent, power of 10.
Bram Moolenaar58b85342016-08-14 19:54:54 +02001279Only a decimal point is accepted, not a comma. No matter what the current
Bram Moolenaar446cb832008-06-24 21:56:24 +00001280locale is.
1281{only when compiled with the |+float| feature}
1282
1283Examples:
1284 123.456
1285 +0.0001
1286 55.0
1287 -0.123
1288 1.234e03
1289 1.0E-6
1290 -3.1416e+88
1291
1292These are INVALID:
1293 3. empty {M}
1294 1e40 missing .{M}
1295
1296Rationale:
1297Before floating point was introduced, the text "123.456" was interpreted as
1298the two numbers "123" and "456", both converted to a string and concatenated,
1299resulting in the string "123456". Since this was considered pointless, and we
Bram Moolenaare37d50a2008-08-06 17:06:04 +00001300could not find it intentionally being used in Vim scripts, this backwards
Bram Moolenaar446cb832008-06-24 21:56:24 +00001301incompatibility was accepted in favor of being able to use the normal notation
1302for floating point numbers.
1303
Bram Moolenaard47d5222018-12-09 20:43:55 +01001304 *float-pi* *float-e*
1305A few useful values to copy&paste: >
1306 :let pi = 3.14159265359
1307 :let e = 2.71828182846
1308Or, if you don't want to write them in as floating-point literals, you can
1309also use functions, like the following: >
1310 :let pi = acos(-1.0)
1311 :let e = exp(1.0)
Bram Moolenaar98aefe72018-12-13 22:20:09 +01001312<
Bram Moolenaar446cb832008-06-24 21:56:24 +00001313 *floating-point-precision*
1314The precision and range of floating points numbers depends on what "double"
1315means in the library Vim was compiled with. There is no way to change this at
1316runtime.
1317
1318The default for displaying a |Float| is to use 6 decimal places, like using
1319printf("%g", f). You can select something else when using the |printf()|
1320function. Example: >
1321 :echo printf('%.15e', atan(1))
1322< 7.853981633974483e-01
1323
1324
Bram Moolenaar071d4272004-06-13 20:20:40 +00001325
Bram Moolenaar979243b2015-06-26 19:35:49 +02001326string *string* *String* *expr-string* *E114*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001327------
1328"string" string constant *expr-quote*
1329
1330Note that double quotes are used.
1331
1332A string constant accepts these special characters:
1333\... three-digit octal number (e.g., "\316")
1334\.. two-digit octal number (must be followed by non-digit)
1335\. one-digit octal number (must be followed by non-digit)
1336\x.. byte specified with two hex numbers (e.g., "\x1f")
1337\x. byte specified with one hex number (must be followed by non-hex char)
1338\X.. same as \x..
1339\X. same as \x.
Bram Moolenaar446cb832008-06-24 21:56:24 +00001340\u.... character specified with up to 4 hex numbers, stored according to the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001341 current value of 'encoding' (e.g., "\u02a4")
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001342\U.... same as \u but allows up to 8 hex numbers.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001343\b backspace <BS>
1344\e escape <Esc>
1345\f formfeed <FF>
1346\n newline <NL>
1347\r return <CR>
1348\t tab <Tab>
1349\\ backslash
1350\" double quote
Bram Moolenaar00a927d2010-05-14 23:24:24 +02001351\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W. This is for use
Bram Moolenaar58b85342016-08-14 19:54:54 +02001352 in mappings, the 0x80 byte is escaped.
1353 To use the double quote character it must be escaped: "<M-\">".
1354 Don't use <Char-xxxx> to get a utf-8 character, use \uxxxx as
1355 mentioned above.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001356
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001357Note that "\xff" is stored as the byte 255, which may be invalid in some
1358encodings. Use "\u00ff" to store character 255 according to the current value
1359of 'encoding'.
1360
Bram Moolenaar071d4272004-06-13 20:20:40 +00001361Note that "\000" and "\x00" force the end of the string.
1362
1363
Bram Moolenaard8968242019-01-15 22:51:57 +01001364blob-literal *blob-literal* *E973*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01001365------------
1366
1367Hexadecimal starting with 0z or 0Z, with an arbitrary number of bytes.
1368The sequence must be an even number of hex characters. Example: >
1369 :let b = 0zFF00ED015DAF
1370
1371
Bram Moolenaar071d4272004-06-13 20:20:40 +00001372literal-string *literal-string* *E115*
1373---------------
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001374'string' string constant *expr-'*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001375
1376Note that single quotes are used.
1377
Bram Moolenaar58b85342016-08-14 19:54:54 +02001378This string is taken as it is. No backslashes are removed or have a special
Bram Moolenaard8b02732005-01-14 21:48:43 +00001379meaning. The only exception is that two quotes stand for one quote.
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001380
1381Single quoted strings are useful for patterns, so that backslashes do not need
Bram Moolenaar58b85342016-08-14 19:54:54 +02001382to be doubled. These two commands are equivalent: >
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001383 if a =~ "\\s*"
1384 if a =~ '\s*'
Bram Moolenaar071d4272004-06-13 20:20:40 +00001385
1386
1387option *expr-option* *E112* *E113*
1388------
1389&option option value, local value if possible
1390&g:option global option value
1391&l:option local option value
1392
1393Examples: >
1394 echo "tabstop is " . &tabstop
1395 if &insertmode
1396
1397Any option name can be used here. See |options|. When using the local value
1398and there is no buffer-local or window-local value, the global value is used
1399anyway.
1400
1401
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001402register *expr-register* *@r*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001403--------
1404@r contents of register 'r'
1405
1406The result is the contents of the named register, as a single string.
1407Newlines are inserted where required. To get the contents of the unnamed
Bram Moolenaar58b85342016-08-14 19:54:54 +02001408register use @" or @@. See |registers| for an explanation of the available
Bram Moolenaare7566042005-06-17 22:00:15 +00001409registers.
1410
1411When using the '=' register you get the expression itself, not what it
1412evaluates to. Use |eval()| to evaluate it.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001413
1414
1415nesting *expr-nesting* *E110*
1416-------
1417(expr1) nested expression
1418
1419
1420environment variable *expr-env*
1421--------------------
1422$VAR environment variable
1423
1424The String value of any environment variable. When it is not defined, the
1425result is an empty string.
Bram Moolenaar691ddee2019-05-09 14:52:41 +02001426
1427The functions `getenv()` and `setenv()` can also be used and work for
1428environment variables with non-alphanumeric names.
1429The function `environ()` can be used to get a Dict with all environment
1430variables.
1431
1432
Bram Moolenaar071d4272004-06-13 20:20:40 +00001433 *expr-env-expand*
1434Note that there is a difference between using $VAR directly and using
1435expand("$VAR"). Using it directly will only expand environment variables that
1436are known inside the current Vim session. Using expand() will first try using
1437the environment variables known inside the current Vim session. If that
1438fails, a shell will be used to expand the variable. This can be slow, but it
1439does expand all variables that the shell knows about. Example: >
Bram Moolenaar34401cc2014-08-29 15:12:19 +02001440 :echo $shell
1441 :echo expand("$shell")
1442The first one probably doesn't echo anything, the second echoes the $shell
Bram Moolenaar071d4272004-06-13 20:20:40 +00001443variable (if your shell supports it).
1444
1445
1446internal variable *expr-variable*
1447-----------------
1448variable internal variable
1449See below |internal-variables|.
1450
1451
Bram Moolenaar05159a02005-02-26 23:04:13 +00001452function call *expr-function* *E116* *E118* *E119* *E120*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001453-------------
1454function(expr1, ...) function call
1455See below |functions|.
1456
1457
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001458lambda expression *expr-lambda* *lambda*
1459-----------------
1460{args -> expr1} lambda expression
1461
1462A lambda expression creates a new unnamed function which returns the result of
Bram Moolenaar42ebd062016-07-17 13:35:14 +02001463evaluating |expr1|. Lambda expressions differ from |user-functions| in
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001464the following ways:
1465
14661. The body of the lambda expression is an |expr1| and not a sequence of |Ex|
1467 commands.
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +020014682. The prefix "a:" should not be used for arguments. E.g.: >
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001469 :let F = {arg1, arg2 -> arg1 - arg2}
1470 :echo F(5, 2)
1471< 3
1472
1473The arguments are optional. Example: >
1474 :let F = {-> 'error function'}
1475 :echo F()
1476< error function
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +02001477 *closure*
1478Lambda expressions can access outer scope variables and arguments. This is
Bram Moolenaar50ba5262016-09-22 22:33:02 +02001479often called a closure. Example where "i" and "a:arg" are used in a lambda
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01001480while they already exist in the function scope. They remain valid even after
1481the function returns: >
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +02001482 :function Foo(arg)
1483 : let i = 3
1484 : return {x -> x + i - a:arg}
1485 :endfunction
1486 :let Bar = Foo(4)
1487 :echo Bar(6)
1488< 5
Bram Moolenaar437bafe2016-08-01 15:40:54 +02001489
Bram Moolenaar388a5d42020-05-26 21:20:45 +02001490Note that the variables must exist in the outer scope before the lambda is
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01001491defined for this to work. See also |:func-closure|.
1492
1493Lambda and closure support can be checked with: >
Bram Moolenaar437bafe2016-08-01 15:40:54 +02001494 if has('lambda')
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001495
1496Examples for using a lambda expression with |sort()|, |map()| and |filter()|: >
1497 :echo map([1, 2, 3], {idx, val -> val + 1})
1498< [2, 3, 4] >
1499 :echo sort([3,7,2,1,4], {a, b -> a - b})
1500< [1, 2, 3, 4, 7]
1501
1502The lambda expression is also useful for Channel, Job and timer: >
1503 :let timer = timer_start(500,
1504 \ {-> execute("echo 'Handler called'", "")},
1505 \ {'repeat': 3})
1506< Handler called
1507 Handler called
1508 Handler called
1509
1510Note how execute() is used to execute an Ex command. That's ugly though.
1511
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +02001512
1513Lambda expressions have internal names like '<lambda>42'. If you get an error
1514for a lambda expression, you can find what it is with the following command: >
1515 :function {'<lambda>42'}
1516See also: |numbered-function|
1517
Bram Moolenaar071d4272004-06-13 20:20:40 +00001518==============================================================================
Bram Moolenaar4a748032010-09-30 21:47:56 +020015193. Internal variable *internal-variables* *E461*
1520
Bram Moolenaar071d4272004-06-13 20:20:40 +00001521An internal variable name can be made up of letters, digits and '_'. But it
1522cannot start with a digit. It's also possible to use curly braces, see
1523|curly-braces-names|.
1524
1525An internal variable is created with the ":let" command |:let|.
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00001526An internal variable is explicitly destroyed with the ":unlet" command
1527|:unlet|.
1528Using a name that is not an internal variable or refers to a variable that has
1529been destroyed results in an error.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001530
1531There are several name spaces for variables. Which one is to be used is
1532specified by what is prepended:
1533
1534 (nothing) In a function: local to a function; otherwise: global
1535|buffer-variable| b: Local to the current buffer.
1536|window-variable| w: Local to the current window.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001537|tabpage-variable| t: Local to the current tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001538|global-variable| g: Global.
1539|local-variable| l: Local to a function.
1540|script-variable| s: Local to a |:source|'ed Vim script.
1541|function-argument| a: Function argument (only inside a function).
Bram Moolenaar75b81562014-04-06 14:09:13 +02001542|vim-variable| v: Global, predefined by Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001543
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001544The scope name by itself can be used as a |Dictionary|. For example, to
1545delete all script-local variables: >
Bram Moolenaar8f999f12005-01-25 22:12:55 +00001546 :for k in keys(s:)
1547 : unlet s:[k]
1548 :endfor
1549<
Bram Moolenaar531da592013-05-06 05:58:55 +02001550 *buffer-variable* *b:var* *b:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001551A variable name that is preceded with "b:" is local to the current buffer.
1552Thus you can have several "b:foo" variables, one for each buffer.
1553This kind of variable is deleted when the buffer is wiped out or deleted with
1554|:bdelete|.
1555
1556One local buffer variable is predefined:
Bram Moolenaarbf884932013-04-05 22:26:15 +02001557 *b:changedtick* *changetick*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001558b:changedtick The total number of changes to the current buffer. It is
1559 incremented for each change. An undo command is also a change
Bram Moolenaarc024b462019-06-08 18:07:21 +02001560 in this case. Resetting 'modified' when writing the buffer is
1561 also counted.
1562 This can be used to perform an action only when the buffer has
1563 changed. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001564 :if my_changedtick != b:changedtick
Bram Moolenaar446cb832008-06-24 21:56:24 +00001565 : let my_changedtick = b:changedtick
1566 : call My_Update()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001567 :endif
Bram Moolenaar3df01732017-02-17 22:47:16 +01001568< You cannot change or delete the b:changedtick variable.
1569
Bram Moolenaar531da592013-05-06 05:58:55 +02001570 *window-variable* *w:var* *w:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001571A variable name that is preceded with "w:" is local to the current window. It
1572is deleted when the window is closed.
1573
Bram Moolenaarad3b3662013-05-17 18:14:19 +02001574 *tabpage-variable* *t:var* *t:*
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001575A variable name that is preceded with "t:" is local to the current tab page,
1576It is deleted when the tab page is closed. {not available when compiled
Bram Moolenaardb84e452010-08-15 13:50:43 +02001577without the |+windows| feature}
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001578
Bram Moolenaar531da592013-05-06 05:58:55 +02001579 *global-variable* *g:var* *g:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001580Inside functions global variables are accessed with "g:". Omitting this will
Bram Moolenaar58b85342016-08-14 19:54:54 +02001581access a variable local to a function. But "g:" can also be used in any other
Bram Moolenaar071d4272004-06-13 20:20:40 +00001582place if you like.
1583
Bram Moolenaar531da592013-05-06 05:58:55 +02001584 *local-variable* *l:var* *l:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001585Inside functions local variables are accessed without prepending anything.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001586But you can also prepend "l:" if you like. However, without prepending "l:"
1587you may run into reserved variable names. For example "count". By itself it
1588refers to "v:count". Using "l:count" you can have a local variable with the
1589same name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001590
1591 *script-variable* *s:var*
1592In a Vim script variables starting with "s:" can be used. They cannot be
1593accessed from outside of the scripts, thus are local to the script.
1594
1595They can be used in:
1596- commands executed while the script is sourced
1597- functions defined in the script
1598- autocommands defined in the script
1599- functions and autocommands defined in functions and autocommands which were
1600 defined in the script (recursively)
1601- user defined commands defined in the script
1602Thus not in:
1603- other scripts sourced from this one
1604- mappings
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001605- menus
Bram Moolenaar071d4272004-06-13 20:20:40 +00001606- etc.
1607
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001608Script variables can be used to avoid conflicts with global variable names.
1609Take this example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001610
1611 let s:counter = 0
1612 function MyCounter()
1613 let s:counter = s:counter + 1
1614 echo s:counter
1615 endfunction
1616 command Tick call MyCounter()
1617
1618You can now invoke "Tick" from any script, and the "s:counter" variable in
1619that script will not be changed, only the "s:counter" in the script where
1620"Tick" was defined is used.
1621
1622Another example that does the same: >
1623
1624 let s:counter = 0
1625 command Tick let s:counter = s:counter + 1 | echo s:counter
1626
1627When calling a function and invoking a user-defined command, the context for
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001628script variables is set to the script where the function or command was
Bram Moolenaar071d4272004-06-13 20:20:40 +00001629defined.
1630
1631The script variables are also available when a function is defined inside a
1632function that is defined in a script. Example: >
1633
1634 let s:counter = 0
1635 function StartCounting(incr)
1636 if a:incr
1637 function MyCounter()
1638 let s:counter = s:counter + 1
1639 endfunction
1640 else
1641 function MyCounter()
1642 let s:counter = s:counter - 1
1643 endfunction
1644 endif
1645 endfunction
1646
1647This defines the MyCounter() function either for counting up or counting down
1648when calling StartCounting(). It doesn't matter from where StartCounting() is
1649called, the s:counter variable will be accessible in MyCounter().
1650
1651When the same script is sourced again it will use the same script variables.
1652They will remain valid as long as Vim is running. This can be used to
1653maintain a counter: >
1654
1655 if !exists("s:counter")
1656 let s:counter = 1
1657 echo "script executed for the first time"
1658 else
1659 let s:counter = s:counter + 1
1660 echo "script executed " . s:counter . " times now"
1661 endif
1662
1663Note that this means that filetype plugins don't get a different set of script
1664variables for each buffer. Use local buffer variables instead |b:var|.
1665
1666
Bram Moolenaard47d5222018-12-09 20:43:55 +01001667PREDEFINED VIM VARIABLES *vim-variable* *v:var* *v:*
1668 *E963*
1669Some variables can be set by the user, but the type cannot be changed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001670
Bram Moolenaar69bf6342019-10-29 04:16:57 +01001671 *v:argv* *argv-variable*
1672v:argv The command line arguments Vim was invoked with. This is a
1673 list of strings. The first item is the Vim command.
1674
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001675 *v:beval_col* *beval_col-variable*
1676v:beval_col The number of the column, over which the mouse pointer is.
1677 This is the byte index in the |v:beval_lnum| line.
1678 Only valid while evaluating the 'balloonexpr' option.
1679
1680 *v:beval_bufnr* *beval_bufnr-variable*
1681v:beval_bufnr The number of the buffer, over which the mouse pointer is. Only
1682 valid while evaluating the 'balloonexpr' option.
1683
1684 *v:beval_lnum* *beval_lnum-variable*
1685v:beval_lnum The number of the line, over which the mouse pointer is. Only
1686 valid while evaluating the 'balloonexpr' option.
1687
1688 *v:beval_text* *beval_text-variable*
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +00001689v:beval_text The text under or after the mouse pointer. Usually a word as
1690 it is useful for debugging a C program. 'iskeyword' applies,
1691 but a dot and "->" before the position is included. When on a
1692 ']' the text before it is used, including the matching '[' and
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001693 word before it. When on a Visual area within one line the
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02001694 highlighted text is used. Also see |<cexpr>|.
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001695 Only valid while evaluating the 'balloonexpr' option.
1696
1697 *v:beval_winnr* *beval_winnr-variable*
1698v:beval_winnr The number of the window, over which the mouse pointer is. Only
Bram Moolenaar00654022011-02-25 14:42:19 +01001699 valid while evaluating the 'balloonexpr' option. The first
1700 window has number zero (unlike most other places where a
1701 window gets a number).
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001702
Bram Moolenaar511972d2016-06-04 18:09:59 +02001703 *v:beval_winid* *beval_winid-variable*
Bram Moolenaar7571d552016-08-18 22:54:46 +02001704v:beval_winid The |window-ID| of the window, over which the mouse pointer
1705 is. Otherwise like v:beval_winnr.
Bram Moolenaar511972d2016-06-04 18:09:59 +02001706
Bram Moolenaarf193fff2006-04-27 00:02:13 +00001707 *v:char* *char-variable*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001708v:char Argument for evaluating 'formatexpr' and used for the typed
Bram Moolenaar945e2db2010-06-05 17:43:32 +02001709 character when using <expr> in an abbreviation |:map-<expr>|.
Bram Moolenaare6ae6222013-05-21 21:01:10 +02001710 It is also used by the |InsertCharPre| and |InsertEnter| events.
Bram Moolenaarf193fff2006-04-27 00:02:13 +00001711
Bram Moolenaar071d4272004-06-13 20:20:40 +00001712 *v:charconvert_from* *charconvert_from-variable*
1713v:charconvert_from
1714 The name of the character encoding of a file to be converted.
1715 Only valid while evaluating the 'charconvert' option.
1716
1717 *v:charconvert_to* *charconvert_to-variable*
1718v:charconvert_to
1719 The name of the character encoding of a file after conversion.
1720 Only valid while evaluating the 'charconvert' option.
1721
1722 *v:cmdarg* *cmdarg-variable*
1723v:cmdarg This variable is used for two purposes:
1724 1. The extra arguments given to a file read/write command.
1725 Currently these are "++enc=" and "++ff=". This variable is
1726 set before an autocommand event for a file read/write
1727 command is triggered. There is a leading space to make it
1728 possible to append this variable directly after the
Bram Moolenaar58b85342016-08-14 19:54:54 +02001729 read/write command. Note: The "+cmd" argument isn't
Bram Moolenaar071d4272004-06-13 20:20:40 +00001730 included here, because it will be executed anyway.
1731 2. When printing a PostScript file with ":hardcopy" this is
1732 the argument for the ":hardcopy" command. This can be used
1733 in 'printexpr'.
1734
1735 *v:cmdbang* *cmdbang-variable*
1736v:cmdbang Set like v:cmdarg for a file read/write command. When a "!"
1737 was used the value is 1, otherwise it is 0. Note that this
1738 can only be used in autocommands. For user commands |<bang>|
1739 can be used.
1740
Bram Moolenaar42a45122015-07-10 17:56:23 +02001741 *v:completed_item* *completed_item-variable*
1742v:completed_item
1743 |Dictionary| containing the |complete-items| for the most
1744 recently completed word after |CompleteDone|. The
1745 |Dictionary| is empty if the completion failed.
1746
Bram Moolenaar071d4272004-06-13 20:20:40 +00001747 *v:count* *count-variable*
1748v:count The count given for the last Normal mode command. Can be used
Bram Moolenaar58b85342016-08-14 19:54:54 +02001749 to get the count before a mapping. Read-only. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001750 :map _x :<C-U>echo "the count is " . v:count<CR>
1751< Note: The <C-U> is required to remove the line range that you
1752 get when typing ':' after a count.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001753 When there are two counts, as in "3d2w", they are multiplied,
1754 just like what happens in the command, "d6w" for the example.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001755 Also used for evaluating the 'formatexpr' option.
Bram Moolenaard2e716e2019-04-20 14:39:52 +02001756 "count" also works, for backwards compatibility, unless
1757 |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001758
1759 *v:count1* *count1-variable*
1760v:count1 Just like "v:count", but defaults to one when no count is
1761 used.
1762
1763 *v:ctype* *ctype-variable*
1764v:ctype The current locale setting for characters of the runtime
1765 environment. This allows Vim scripts to be aware of the
1766 current locale encoding. Technical: it's the value of
1767 LC_CTYPE. When not using a locale the value is "C".
1768 This variable can not be set directly, use the |:language|
1769 command.
1770 See |multi-lang|.
1771
1772 *v:dying* *dying-variable*
Bram Moolenaar58b85342016-08-14 19:54:54 +02001773v:dying Normally zero. When a deadly signal is caught it's set to
Bram Moolenaar071d4272004-06-13 20:20:40 +00001774 one. When multiple signals are caught the number increases.
1775 Can be used in an autocommand to check if Vim didn't
1776 terminate normally. {only works on Unix}
1777 Example: >
1778 :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
Bram Moolenaar0e1e25f2010-05-28 21:07:08 +02001779< Note: if another deadly signal is caught when v:dying is one,
1780 VimLeave autocommands will not be executed.
1781
Bram Moolenaar37f4cbd2019-08-23 20:58:45 +02001782 *v:echospace* *echospace-variable*
1783v:echospace Number of screen cells that can be used for an `:echo` message
1784 in the last screen line before causing the |hit-enter-prompt|.
1785 Depends on 'showcmd', 'ruler' and 'columns'. You need to
1786 check 'cmdheight' for whether there are full-width lines
1787 available above the last line.
1788
Bram Moolenaar071d4272004-06-13 20:20:40 +00001789 *v:errmsg* *errmsg-variable*
1790v:errmsg Last given error message. It's allowed to set this variable.
1791 Example: >
1792 :let v:errmsg = ""
1793 :silent! next
1794 :if v:errmsg != ""
1795 : ... handle error
Bram Moolenaard2e716e2019-04-20 14:39:52 +02001796< "errmsg" also works, for backwards compatibility, unless
1797 |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001798
Bram Moolenaar65a54642018-04-28 16:56:53 +02001799 *v:errors* *errors-variable* *assert-return*
Bram Moolenaar683fa182015-11-30 21:38:24 +01001800v:errors Errors found by assert functions, such as |assert_true()|.
Bram Moolenaar43345542015-11-29 17:35:35 +01001801 This is a list of strings.
1802 The assert functions append an item when an assert fails.
Bram Moolenaar65a54642018-04-28 16:56:53 +02001803 The return value indicates this: a one is returned if an item
1804 was added to v:errors, otherwise zero is returned.
Bram Moolenaar43345542015-11-29 17:35:35 +01001805 To remove old results make it empty: >
1806 :let v:errors = []
1807< If v:errors is set to anything but a list it is made an empty
1808 list by the assert function.
1809
Bram Moolenaar7e1652c2017-12-16 18:27:02 +01001810 *v:event* *event-variable*
1811v:event Dictionary containing information about the current
Bram Moolenaar560979e2020-02-04 22:53:05 +01001812 |autocommand|. See the specific event for what it puts in
1813 this dictionary.
Bram Moolenaar2c7f8c52020-04-20 19:52:53 +02001814 The dictionary is emptied when the |autocommand| finishes,
1815 please refer to |dict-identity| for how to get an independent
1816 copy of it. Use |deepcopy()| if you want to keep the
1817 information after the event triggers. Example: >
1818 au TextYankPost * let g:foo = deepcopy(v:event)
1819<
Bram Moolenaar071d4272004-06-13 20:20:40 +00001820 *v:exception* *exception-variable*
1821v:exception The value of the exception most recently caught and not
1822 finished. See also |v:throwpoint| and |throw-variables|.
1823 Example: >
1824 :try
1825 : throw "oops"
1826 :catch /.*/
Bram Moolenaar54775062019-07-31 21:07:14 +02001827 : echo "caught " .. v:exception
Bram Moolenaar071d4272004-06-13 20:20:40 +00001828 :endtry
1829< Output: "caught oops".
1830
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001831 *v:false* *false-variable*
1832v:false A Number with value zero. Used to put "false" in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01001833 |json_encode()|.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001834 When used as a string this evaluates to "v:false". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01001835 echo v:false
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001836< v:false ~
1837 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02001838 value. Read-only.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001839
Bram Moolenaar19a09a12005-03-04 23:39:37 +00001840 *v:fcs_reason* *fcs_reason-variable*
1841v:fcs_reason The reason why the |FileChangedShell| event was triggered.
1842 Can be used in an autocommand to decide what to do and/or what
1843 to set v:fcs_choice to. Possible values:
1844 deleted file no longer exists
1845 conflict file contents, mode or timestamp was
1846 changed and buffer is modified
1847 changed file contents has changed
1848 mode mode of file changed
1849 time only file timestamp changed
1850
1851 *v:fcs_choice* *fcs_choice-variable*
1852v:fcs_choice What should happen after a |FileChangedShell| event was
1853 triggered. Can be used in an autocommand to tell Vim what to
1854 do with the affected buffer:
1855 reload Reload the buffer (does not work if
1856 the file was deleted).
1857 ask Ask the user what to do, as if there
1858 was no autocommand. Except that when
1859 only the timestamp changed nothing
1860 will happen.
1861 <empty> Nothing, the autocommand should do
1862 everything that needs to be done.
1863 The default is empty. If another (invalid) value is used then
1864 Vim behaves like it is empty, there is no warning message.
1865
Bram Moolenaar071d4272004-06-13 20:20:40 +00001866 *v:fname_in* *fname_in-variable*
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001867v:fname_in The name of the input file. Valid while evaluating:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001868 option used for ~
1869 'charconvert' file to be converted
1870 'diffexpr' original file
1871 'patchexpr' original file
1872 'printexpr' file to be printed
Bram Moolenaar2c7a29c2005-12-12 22:02:31 +00001873 And set to the swap file name for |SwapExists|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001874
1875 *v:fname_out* *fname_out-variable*
1876v:fname_out The name of the output file. Only valid while
1877 evaluating:
1878 option used for ~
1879 'charconvert' resulting converted file (*)
1880 'diffexpr' output of diff
1881 'patchexpr' resulting patched file
1882 (*) When doing conversion for a write command (e.g., ":w
Bram Moolenaar58b85342016-08-14 19:54:54 +02001883 file") it will be equal to v:fname_in. When doing conversion
Bram Moolenaar071d4272004-06-13 20:20:40 +00001884 for a read command (e.g., ":e file") it will be a temporary
1885 file and different from v:fname_in.
1886
1887 *v:fname_new* *fname_new-variable*
1888v:fname_new The name of the new version of the file. Only valid while
1889 evaluating 'diffexpr'.
1890
1891 *v:fname_diff* *fname_diff-variable*
1892v:fname_diff The name of the diff (patch) file. Only valid while
1893 evaluating 'patchexpr'.
1894
1895 *v:folddashes* *folddashes-variable*
1896v:folddashes Used for 'foldtext': dashes representing foldlevel of a closed
1897 fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001898 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001899
1900 *v:foldlevel* *foldlevel-variable*
1901v:foldlevel Used for 'foldtext': foldlevel of closed fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001902 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001903
1904 *v:foldend* *foldend-variable*
1905v:foldend Used for 'foldtext': last line of closed fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001906 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001907
1908 *v:foldstart* *foldstart-variable*
1909v:foldstart Used for 'foldtext': first line of closed fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001910 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001911
Bram Moolenaar817a8802013-11-09 01:44:43 +01001912 *v:hlsearch* *hlsearch-variable*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001913v:hlsearch Variable that indicates whether search highlighting is on.
Bram Moolenaar76440e22014-11-27 19:14:49 +01001914 Setting it makes sense only if 'hlsearch' is enabled which
1915 requires |+extra_search|. Setting this variable to zero acts
Bram Moolenaar705ada12016-01-24 17:56:50 +01001916 like the |:nohlsearch| command, setting it to one acts like >
Bram Moolenaar817a8802013-11-09 01:44:43 +01001917 let &hlsearch = &hlsearch
Bram Moolenaar86ae7202015-07-10 19:31:35 +02001918< Note that the value is restored when returning from a
1919 function. |function-search-undo|.
1920
Bram Moolenaar843ee412004-06-30 16:16:41 +00001921 *v:insertmode* *insertmode-variable*
1922v:insertmode Used for the |InsertEnter| and |InsertChange| autocommand
1923 events. Values:
1924 i Insert mode
1925 r Replace mode
1926 v Virtual Replace mode
1927
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001928 *v:key* *key-variable*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001929v:key Key of the current item of a |Dictionary|. Only valid while
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001930 evaluating the expression used with |map()| and |filter()|.
1931 Read-only.
1932
Bram Moolenaar071d4272004-06-13 20:20:40 +00001933 *v:lang* *lang-variable*
1934v:lang The current locale setting for messages of the runtime
1935 environment. This allows Vim scripts to be aware of the
1936 current language. Technical: it's the value of LC_MESSAGES.
1937 The value is system dependent.
1938 This variable can not be set directly, use the |:language|
1939 command.
1940 It can be different from |v:ctype| when messages are desired
1941 in a different language than what is used for character
1942 encoding. See |multi-lang|.
1943
1944 *v:lc_time* *lc_time-variable*
1945v:lc_time The current locale setting for time messages of the runtime
1946 environment. This allows Vim scripts to be aware of the
1947 current language. Technical: it's the value of LC_TIME.
1948 This variable can not be set directly, use the |:language|
1949 command. See |multi-lang|.
1950
1951 *v:lnum* *lnum-variable*
Bram Moolenaar368373e2010-07-19 20:46:22 +02001952v:lnum Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and
1953 'indentexpr' expressions, tab page number for 'guitablabel'
1954 and 'guitabtooltip'. Only valid while one of these
1955 expressions is being evaluated. Read-only when in the
1956 |sandbox|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001957
Bram Moolenaar219b8702006-11-01 14:32:36 +00001958 *v:mouse_win* *mouse_win-variable*
1959v:mouse_win Window number for a mouse click obtained with |getchar()|.
1960 First window has number 1, like with |winnr()|. The value is
1961 zero when there was no mouse button click.
1962
Bram Moolenaar511972d2016-06-04 18:09:59 +02001963 *v:mouse_winid* *mouse_winid-variable*
1964v:mouse_winid Window ID for a mouse click obtained with |getchar()|.
1965 The value is zero when there was no mouse button click.
1966
Bram Moolenaar219b8702006-11-01 14:32:36 +00001967 *v:mouse_lnum* *mouse_lnum-variable*
1968v:mouse_lnum Line number for a mouse click obtained with |getchar()|.
1969 This is the text line number, not the screen line number. The
1970 value is zero when there was no mouse button click.
1971
1972 *v:mouse_col* *mouse_col-variable*
1973v:mouse_col Column number for a mouse click obtained with |getchar()|.
1974 This is the screen column number, like with |virtcol()|. The
1975 value is zero when there was no mouse button click.
1976
Bram Moolenaard09091d2019-01-17 16:07:22 +01001977 *v:none* *none-variable* *None*
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001978v:none An empty String. Used to put an empty item in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01001979 |json_encode()|.
Bram Moolenaar705ada12016-01-24 17:56:50 +01001980 When used as a number this evaluates to zero.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001981 When used as a string this evaluates to "v:none". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01001982 echo v:none
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001983< v:none ~
1984 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02001985 value. Read-only.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001986
1987 *v:null* *null-variable*
1988v:null An empty String. Used to put "null" in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01001989 |json_encode()|.
Bram Moolenaar705ada12016-01-24 17:56:50 +01001990 When used as a number this evaluates to zero.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001991 When used as a string this evaluates to "v:null". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01001992 echo v:null
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001993< v:null ~
1994 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02001995 value. Read-only.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001996
Bram Moolenaarf9706e92020-02-22 14:27:04 +01001997 *v:numbersize* *numbersize-variable*
1998v:numbersize Number of bits in a Number. This is normally 64, but on some
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +01001999 systems it may be 32.
Bram Moolenaarf9706e92020-02-22 14:27:04 +01002000
Bram Moolenaard812df62008-11-09 12:46:09 +00002001 *v:oldfiles* *oldfiles-variable*
2002v:oldfiles List of file names that is loaded from the |viminfo| file on
2003 startup. These are the files that Vim remembers marks for.
2004 The length of the List is limited by the ' argument of the
2005 'viminfo' option (default is 100).
Bram Moolenaar8d043172014-01-23 14:24:41 +01002006 When the |viminfo| file is not used the List is empty.
Bram Moolenaard812df62008-11-09 12:46:09 +00002007 Also see |:oldfiles| and |c_#<|.
2008 The List can be modified, but this has no effect on what is
2009 stored in the |viminfo| file later. If you use values other
2010 than String this will cause trouble.
Bram Moolenaardb84e452010-08-15 13:50:43 +02002011 {only when compiled with the |+viminfo| feature}
Bram Moolenaard812df62008-11-09 12:46:09 +00002012
Bram Moolenaar53744302015-07-17 17:38:22 +02002013 *v:option_new*
2014v:option_new New value of the option. Valid while executing an |OptionSet|
2015 autocommand.
2016 *v:option_old*
2017v:option_old Old value of the option. Valid while executing an |OptionSet|
Bram Moolenaard7c96872019-06-15 17:12:48 +02002018 autocommand. Depending on the command used for setting and the
2019 kind of option this is either the local old value or the
2020 global old value.
2021 *v:option_oldlocal*
2022v:option_oldlocal
2023 Old local value of the option. Valid while executing an
2024 |OptionSet| autocommand.
2025 *v:option_oldglobal*
2026v:option_oldglobal
2027 Old global value of the option. Valid while executing an
2028 |OptionSet| autocommand.
Bram Moolenaar53744302015-07-17 17:38:22 +02002029 *v:option_type*
2030v:option_type Scope of the set command. Valid while executing an
2031 |OptionSet| autocommand. Can be either "global" or "local"
Bram Moolenaard7c96872019-06-15 17:12:48 +02002032 *v:option_command*
2033v:option_command
2034 Command used to set the option. Valid while executing an
2035 |OptionSet| autocommand.
2036 value option was set via ~
2037 "setlocal" |:setlocal| or ":let l:xxx"
2038 "setglobal" |:setglobal| or ":let g:xxx"
2039 "set" |:set| or |:let|
2040 "modeline" |modeline|
Bram Moolenaar8af1fbf2008-01-05 12:35:21 +00002041 *v:operator* *operator-variable*
2042v:operator The last operator given in Normal mode. This is a single
2043 character except for commands starting with <g> or <z>,
2044 in which case it is two characters. Best used alongside
2045 |v:prevcount| and |v:register|. Useful if you want to cancel
2046 Operator-pending mode and then use the operator, e.g.: >
2047 :omap O <Esc>:call MyMotion(v:operator)<CR>
2048< The value remains set until another operator is entered, thus
2049 don't expect it to be empty.
2050 v:operator is not set for |:delete|, |:yank| or other Ex
2051 commands.
2052 Read-only.
2053
Bram Moolenaar071d4272004-06-13 20:20:40 +00002054 *v:prevcount* *prevcount-variable*
2055v:prevcount The count given for the last but one Normal mode command.
2056 This is the v:count value of the previous command. Useful if
Bram Moolenaar8af1fbf2008-01-05 12:35:21 +00002057 you want to cancel Visual or Operator-pending mode and then
2058 use the count, e.g.: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00002059 :vmap % <Esc>:call MyFilter(v:prevcount)<CR>
2060< Read-only.
2061
Bram Moolenaar05159a02005-02-26 23:04:13 +00002062 *v:profiling* *profiling-variable*
Bram Moolenaar58b85342016-08-14 19:54:54 +02002063v:profiling Normally zero. Set to one after using ":profile start".
Bram Moolenaar05159a02005-02-26 23:04:13 +00002064 See |profiling|.
2065
Bram Moolenaar071d4272004-06-13 20:20:40 +00002066 *v:progname* *progname-variable*
2067v:progname Contains the name (with path removed) with which Vim was
Bram Moolenaard38b0552012-04-25 19:07:41 +02002068 invoked. Allows you to do special initialisations for |view|,
2069 |evim| etc., or any other name you might symlink to Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002070 Read-only.
2071
Bram Moolenaara1706c92014-04-01 19:55:49 +02002072 *v:progpath* *progpath-variable*
Bram Moolenaar56c860c2019-08-17 20:09:31 +02002073v:progpath Contains the command with which Vim was invoked, in a form
2074 that when passed to the shell will run the same Vim executable
2075 as the current one (if $PATH remains unchanged).
2076 Useful if you want to message a Vim server using a
Bram Moolenaara1706c92014-04-01 19:55:49 +02002077 |--remote-expr|.
Bram Moolenaarc7f02552014-04-01 21:00:59 +02002078 To get the full path use: >
2079 echo exepath(v:progpath)
Bram Moolenaar56c860c2019-08-17 20:09:31 +02002080< If the command has a relative path it will be expanded to the
2081 full path, so that it still works after `:cd`. Thus starting
2082 "./vim" results in "/home/user/path/to/vim/src/vim".
2083 On Linux and other systems it will always be the full path.
2084 On Mac it may just be "vim" and using exepath() as mentioned
2085 above should be used to get the full path.
Bram Moolenaar08cab962017-03-04 14:37:18 +01002086 On MS-Windows the executable may be called "vim.exe", but the
2087 ".exe" is not added to v:progpath.
Bram Moolenaara1706c92014-04-01 19:55:49 +02002088 Read-only.
2089
Bram Moolenaar071d4272004-06-13 20:20:40 +00002090 *v:register* *register-variable*
Bram Moolenaard58e9292011-02-09 17:07:58 +01002091v:register The name of the register in effect for the current normal mode
Bram Moolenaard38b0552012-04-25 19:07:41 +02002092 command (regardless of whether that command actually used a
2093 register). Or for the currently executing normal mode mapping
2094 (use this in custom commands that take a register).
2095 If none is supplied it is the default register '"', unless
2096 'clipboard' contains "unnamed" or "unnamedplus", then it is
2097 '*' or '+'.
Bram Moolenaard58e9292011-02-09 17:07:58 +01002098 Also see |getreg()| and |setreg()|
Bram Moolenaar071d4272004-06-13 20:20:40 +00002099
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00002100 *v:scrollstart* *scrollstart-variable*
2101v:scrollstart String describing the script or function that caused the
2102 screen to scroll up. It's only set when it is empty, thus the
2103 first reason is remembered. It is set to "Unknown" for a
2104 typed command.
2105 This can be used to find out why your script causes the
2106 hit-enter prompt.
2107
Bram Moolenaar071d4272004-06-13 20:20:40 +00002108 *v:servername* *servername-variable*
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +02002109v:servername The resulting registered |client-server-name| if any.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002110 Read-only.
2111
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002112
Bram Moolenaar446cb832008-06-24 21:56:24 +00002113v:searchforward *v:searchforward* *searchforward-variable*
2114 Search direction: 1 after a forward search, 0 after a
2115 backward search. It is reset to forward when directly setting
2116 the last search pattern, see |quote/|.
2117 Note that the value is restored when returning from a
2118 function. |function-search-undo|.
2119 Read-write.
2120
Bram Moolenaar071d4272004-06-13 20:20:40 +00002121 *v:shell_error* *shell_error-variable*
2122v:shell_error Result of the last shell command. When non-zero, the last
2123 shell command had an error. When zero, there was no problem.
2124 This only works when the shell returns the error code to Vim.
2125 The value -1 is often used when the command could not be
2126 executed. Read-only.
2127 Example: >
2128 :!mv foo bar
2129 :if v:shell_error
2130 : echo 'could not rename "foo" to "bar"!'
2131 :endif
Bram Moolenaard2e716e2019-04-20 14:39:52 +02002132< "shell_error" also works, for backwards compatibility, unless
2133 |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002134
2135 *v:statusmsg* *statusmsg-variable*
2136v:statusmsg Last given status message. It's allowed to set this variable.
2137
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00002138 *v:swapname* *swapname-variable*
2139v:swapname Only valid when executing |SwapExists| autocommands: Name of
2140 the swap file found. Read-only.
2141
2142 *v:swapchoice* *swapchoice-variable*
2143v:swapchoice |SwapExists| autocommands can set this to the selected choice
2144 for handling an existing swap file:
2145 'o' Open read-only
2146 'e' Edit anyway
2147 'r' Recover
2148 'd' Delete swapfile
2149 'q' Quit
2150 'a' Abort
Bram Moolenaar58b85342016-08-14 19:54:54 +02002151 The value should be a single-character string. An empty value
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00002152 results in the user being asked, as would happen when there is
2153 no SwapExists autocommand. The default is empty.
2154
Bram Moolenaarb3480382005-12-11 21:33:32 +00002155 *v:swapcommand* *swapcommand-variable*
Bram Moolenaar4770d092006-01-12 23:22:24 +00002156v:swapcommand Normal mode command to be executed after a file has been
Bram Moolenaarb3480382005-12-11 21:33:32 +00002157 opened. Can be used for a |SwapExists| autocommand to have
Bram Moolenaar58b85342016-08-14 19:54:54 +02002158 another Vim open the file and jump to the right place. For
Bram Moolenaarb3480382005-12-11 21:33:32 +00002159 example, when jumping to a tag the value is ":tag tagname\r".
Bram Moolenaar1f35bf92006-03-07 22:38:47 +00002160 For ":edit +cmd file" the value is ":cmd\r".
Bram Moolenaarb3480382005-12-11 21:33:32 +00002161
Bram Moolenaard823fa92016-08-12 16:29:27 +02002162 *v:t_TYPE* *v:t_bool* *t_bool-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002163v:t_bool Value of |Boolean| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002164 *v:t_channel* *t_channel-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002165v:t_channel Value of |Channel| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002166 *v:t_dict* *t_dict-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002167v:t_dict Value of |Dictionary| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002168 *v:t_float* *t_float-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002169v:t_float Value of |Float| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002170 *v:t_func* *t_func-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002171v:t_func Value of |Funcref| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002172 *v:t_job* *t_job-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002173v:t_job Value of |Job| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002174 *v:t_list* *t_list-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002175v:t_list Value of |List| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002176 *v:t_none* *t_none-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002177v:t_none Value of |None| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002178 *v:t_number* *t_number-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002179v:t_number Value of |Number| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002180 *v:t_string* *t_string-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002181v:t_string Value of |String| type. Read-only. See: |type()|
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002182 *v:t_blob* *t_blob-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002183v:t_blob Value of |Blob| type. Read-only. See: |type()|
Bram Moolenaarf562e722016-07-19 17:25:25 +02002184
Bram Moolenaar071d4272004-06-13 20:20:40 +00002185 *v:termresponse* *termresponse-variable*
2186v:termresponse The escape sequence returned by the terminal for the |t_RV|
Bram Moolenaar58b85342016-08-14 19:54:54 +02002187 termcap entry. It is set when Vim receives an escape sequence
Bram Moolenaarb4230122019-05-30 18:40:53 +02002188 that starts with ESC [ or CSI, then '>' or '?' and ends in a
2189 'c', with only digits and ';' in between.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002190 When this option is set, the TermResponse autocommand event is
2191 fired, so that you can react to the response from the
2192 terminal.
Bram Moolenaarb4230122019-05-30 18:40:53 +02002193 The response from a new xterm is: "<Esc>[> Pp ; Pv ; Pc c". Pp
Bram Moolenaar071d4272004-06-13 20:20:40 +00002194 is the terminal type: 0 for vt100 and 1 for vt220. Pv is the
2195 patch level (since this was introduced in patch 95, it's
2196 always 95 or bigger). Pc is always zero.
2197 {only when compiled with |+termresponse| feature}
2198
Bram Moolenaarf3af54e2017-08-30 14:53:06 +02002199 *v:termblinkresp*
2200v:termblinkresp The escape sequence returned by the terminal for the |t_RC|
2201 termcap entry. This is used to find out whether the terminal
2202 cursor is blinking. This is used by |term_getcursor()|.
2203
2204 *v:termstyleresp*
2205v:termstyleresp The escape sequence returned by the terminal for the |t_RS|
2206 termcap entry. This is used to find out what the shape of the
2207 cursor is. This is used by |term_getcursor()|.
2208
Bram Moolenaar65e4c4f2017-10-14 23:24:25 +02002209 *v:termrbgresp*
2210v:termrbgresp The escape sequence returned by the terminal for the |t_RB|
Bram Moolenaarf3af54e2017-08-30 14:53:06 +02002211 termcap entry. This is used to find out what the terminal
2212 background color is, see 'background'.
2213
Bram Moolenaar65e4c4f2017-10-14 23:24:25 +02002214 *v:termrfgresp*
2215v:termrfgresp The escape sequence returned by the terminal for the |t_RF|
2216 termcap entry. This is used to find out what the terminal
2217 foreground color is.
2218
Bram Moolenaarf3af54e2017-08-30 14:53:06 +02002219 *v:termu7resp*
2220v:termu7resp The escape sequence returned by the terminal for the |t_u7|
2221 termcap entry. This is used to find out what the terminal
2222 does with ambiguous width characters, see 'ambiwidth'.
2223
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02002224 *v:testing* *testing-variable*
Bram Moolenaar8e8df252016-05-25 21:23:21 +02002225v:testing Must be set before using `test_garbagecollect_now()`.
Bram Moolenaar036986f2017-03-16 17:41:02 +01002226 Also, when set certain error messages won't be shown for 2
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002227 seconds. (e.g. "'dictionary' option is empty")
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02002228
Bram Moolenaar071d4272004-06-13 20:20:40 +00002229 *v:this_session* *this_session-variable*
2230v:this_session Full filename of the last loaded or saved session file. See
2231 |:mksession|. It is allowed to set this variable. When no
2232 session file has been saved, this variable is empty.
Bram Moolenaard2e716e2019-04-20 14:39:52 +02002233 "this_session" also works, for backwards compatibility, unless
2234 |scriptversion| is 3 or higher
Bram Moolenaar071d4272004-06-13 20:20:40 +00002235
2236 *v:throwpoint* *throwpoint-variable*
2237v:throwpoint The point where the exception most recently caught and not
Bram Moolenaar58b85342016-08-14 19:54:54 +02002238 finished was thrown. Not set when commands are typed. See
Bram Moolenaar071d4272004-06-13 20:20:40 +00002239 also |v:exception| and |throw-variables|.
2240 Example: >
2241 :try
2242 : throw "oops"
2243 :catch /.*/
2244 : echo "Exception from" v:throwpoint
2245 :endtry
2246< Output: "Exception from test.vim, line 2"
2247
Bram Moolenaar520e1e42016-01-23 19:46:28 +01002248 *v:true* *true-variable*
2249v:true A Number with value one. Used to put "true" in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01002250 |json_encode()|.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02002251 When used as a string this evaluates to "v:true". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01002252 echo v:true
Bram Moolenaarc95a3022016-06-12 23:01:46 +02002253< v:true ~
2254 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02002255 value. Read-only.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00002256 *v:val* *val-variable*
Bram Moolenaar58b85342016-08-14 19:54:54 +02002257v:val Value of the current item of a |List| or |Dictionary|. Only
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002258 valid while evaluating the expression used with |map()| and
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00002259 |filter()|. Read-only.
2260
Bram Moolenaar071d4272004-06-13 20:20:40 +00002261 *v:version* *version-variable*
2262v:version Version number of Vim: Major version number times 100 plus
Bram Moolenaar9b283522019-06-17 22:19:33 +02002263 minor version number. Version 5.0 is 500. Version 5.1
Bram Moolenaar071d4272004-06-13 20:20:40 +00002264 is 501. Read-only. "version" also works, for backwards
Bram Moolenaard2e716e2019-04-20 14:39:52 +02002265 compatibility, unless |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002266 Use |has()| to check if a certain patch was included, e.g.: >
Bram Moolenaar6716d9a2014-04-02 12:12:08 +02002267 if has("patch-7.4.123")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002268< Note that patch numbers are specific to the version, thus both
2269 version 5.0 and 5.1 may have a patch 123, but these are
2270 completely different.
2271
Bram Moolenaar37df9a42019-06-14 14:39:51 +02002272 *v:versionlong* *versionlong-variable*
Bram Moolenaar9b283522019-06-17 22:19:33 +02002273v:versionlong Like v:version, but also including the patchlevel in the last
2274 four digits. Version 8.1 with patch 123 has value 8010123.
2275 This can be used like this: >
2276 if v:versionlong >= 8010123
Bram Moolenaar37df9a42019-06-14 14:39:51 +02002277< However, if there are gaps in the list of patches included
2278 this will not work well. This can happen if a recent patch
2279 was included into an older version, e.g. for a security fix.
2280 Use the has() function to make sure the patch is actually
2281 included.
2282
Bram Moolenaar14735512016-03-26 21:00:08 +01002283 *v:vim_did_enter* *vim_did_enter-variable*
2284v:vim_did_enter Zero until most of startup is done. It is set to one just
2285 before |VimEnter| autocommands are triggered.
2286
Bram Moolenaar071d4272004-06-13 20:20:40 +00002287 *v:warningmsg* *warningmsg-variable*
2288v:warningmsg Last given warning message. It's allowed to set this variable.
2289
Bram Moolenaar727c8762010-10-20 19:17:48 +02002290 *v:windowid* *windowid-variable*
2291v:windowid When any X11 based GUI is running or when running in a
2292 terminal and Vim connects to the X server (|-X|) this will be
Bram Moolenaar264e9fd2010-10-27 12:33:17 +02002293 set to the window ID.
2294 When an MS-Windows GUI is running this will be set to the
2295 window handle.
2296 Otherwise the value is zero.
Bram Moolenaar7571d552016-08-18 22:54:46 +02002297 Note: for windows inside Vim use |winnr()| or |win_getid()|,
2298 see |window-ID|.
Bram Moolenaar727c8762010-10-20 19:17:48 +02002299
Bram Moolenaar071d4272004-06-13 20:20:40 +00002300==============================================================================
23014. Builtin Functions *functions*
2302
2303See |function-list| for a list grouped by what the function is used for.
2304
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00002305(Use CTRL-] on the function name to jump to the full explanation.)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002306
2307USAGE RESULT DESCRIPTION ~
2308
Bram Moolenaar81edd172016-04-14 13:51:37 +02002309abs({expr}) Float or Number absolute value of {expr}
2310acos({expr}) Float arc cosine of {expr}
Bram Moolenaard8968242019-01-15 22:51:57 +01002311add({object}, {item}) List/Blob append {item} to {object}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002312and({expr}, {expr}) Number bitwise AND
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002313append({lnum}, {text}) Number append {text} below line {lnum}
2314appendbufline({expr}, {lnum}, {text})
2315 Number append {text} below line {lnum}
2316 in buffer {expr}
Bram Moolenaarf0d58ef2018-11-16 16:13:44 +01002317argc([{winid}]) Number number of files in the argument list
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002318argidx() Number current index in the argument list
Bram Moolenaar81edd172016-04-14 13:51:37 +02002319arglistid([{winnr} [, {tabnr}]]) Number argument list id
Bram Moolenaare6e39892018-10-25 12:32:11 +02002320argv({nr} [, {winid}]) String {nr} entry of the argument list
2321argv([-1, {winid}]) List the argument list
Bram Moolenaar65a54642018-04-28 16:56:53 +02002322assert_beeps({cmd}) Number assert {cmd} causes a beep
Bram Moolenaar42205552017-03-18 19:42:22 +01002323assert_equal({exp}, {act} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002324 Number assert {exp} is equal to {act}
Bram Moolenaard96ff162018-02-18 22:13:29 +01002325assert_equalfile({fname-one}, {fname-two})
Bram Moolenaar65a54642018-04-28 16:56:53 +02002326 Number assert file contents is equal
Bram Moolenaar42205552017-03-18 19:42:22 +01002327assert_exception({error} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002328 Number assert {error} is in v:exception
Bram Moolenaar2c64ca12018-10-19 16:22:31 +02002329assert_fails({cmd} [, {error} [, {msg}]])
2330 Number assert {cmd} fails
Bram Moolenaar42205552017-03-18 19:42:22 +01002331assert_false({actual} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002332 Number assert {actual} is false
Bram Moolenaar61c04492016-07-23 15:35:35 +02002333assert_inrange({lower}, {upper}, {actual} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002334 Number assert {actual} is inside the range
Bram Moolenaar42205552017-03-18 19:42:22 +01002335assert_match({pat}, {text} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002336 Number assert {pat} matches {text}
Bram Moolenaar42205552017-03-18 19:42:22 +01002337assert_notequal({exp}, {act} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002338 Number assert {exp} is not equal {act}
Bram Moolenaar42205552017-03-18 19:42:22 +01002339assert_notmatch({pat}, {text} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002340 Number assert {pat} not matches {text}
2341assert_report({msg}) Number report a test failure
2342assert_true({actual} [, {msg}]) Number assert {actual} is true
Bram Moolenaar81edd172016-04-14 13:51:37 +02002343asin({expr}) Float arc sine of {expr}
2344atan({expr}) Float arc tangent of {expr}
Bram Moolenaar04186092016-08-29 21:55:35 +02002345atan2({expr1}, {expr2}) Float arc tangent of {expr1} / {expr2}
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02002346balloon_gettext() String current text in the balloon
Bram Moolenaar74240d32017-12-10 15:26:15 +01002347balloon_show({expr}) none show {expr} inside the balloon
Bram Moolenaar246fe032017-11-19 19:56:27 +01002348balloon_split({msg}) List split {msg} as used for a balloon
Bram Moolenaar81edd172016-04-14 13:51:37 +02002349browse({save}, {title}, {initdir}, {default})
Bram Moolenaar071d4272004-06-13 20:20:40 +00002350 String put up a file requester
Bram Moolenaar81edd172016-04-14 13:51:37 +02002351browsedir({title}, {initdir}) String put up a directory requester
Bram Moolenaar15e248e2019-06-30 20:21:37 +02002352bufadd({name}) Number add a buffer to the buffer list
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002353bufexists({expr}) Number |TRUE| if buffer {expr} exists
2354buflisted({expr}) Number |TRUE| if buffer {expr} is listed
Bram Moolenaar15e248e2019-06-30 20:21:37 +02002355bufload({expr}) Number load buffer {expr} if not loaded yet
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002356bufloaded({expr}) Number |TRUE| if buffer {expr} is loaded
Bram Moolenaara8eee212019-08-24 22:14:58 +02002357bufname([{expr}]) String Name of the buffer {expr}
2358bufnr([{expr} [, {create}]]) Number Number of the buffer {expr}
Bram Moolenaarb3619a92016-06-04 17:58:52 +02002359bufwinid({expr}) Number window ID of buffer {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002360bufwinnr({expr}) Number window number of buffer {expr}
2361byte2line({byte}) Number line number at byte count {byte}
2362byteidx({expr}, {nr}) Number byte index of {nr}'th char in {expr}
2363byteidxcomp({expr}, {nr}) Number byte index of {nr}'th char in {expr}
2364call({func}, {arglist} [, {dict}])
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00002365 any call {func} with arguments {arglist}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002366ceil({expr}) Float round {expr} up
Bram Moolenaar4b785f62016-11-29 21:54:44 +01002367ch_canread({handle}) Number check if there is something to read
Bram Moolenaar81edd172016-04-14 13:51:37 +02002368ch_close({handle}) none close {handle}
Bram Moolenaar0874a832016-09-01 15:11:51 +02002369ch_close_in({handle}) none close in part of {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002370ch_evalexpr({handle}, {expr} [, {options}])
Bram Moolenaar5f148ec2016-03-07 22:59:26 +01002371 any evaluate {expr} on JSON {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002372ch_evalraw({handle}, {string} [, {options}])
Bram Moolenaar5f148ec2016-03-07 22:59:26 +01002373 any evaluate {string} on raw {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002374ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what}
2375ch_getjob({channel}) Job get the Job of {channel}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002376ch_info({handle}) String info about channel {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002377ch_log({msg} [, {handle}]) none write {msg} in the channel log file
2378ch_logfile({fname} [, {mode}]) none start logging channel activity
2379ch_open({address} [, {options}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002380 Channel open a channel to {address}
2381ch_read({handle} [, {options}]) String read from {handle}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002382ch_readblob({handle} [, {options}])
2383 Blob read Blob from {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002384ch_readraw({handle} [, {options}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002385 String read raw from {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002386ch_sendexpr({handle}, {expr} [, {options}])
Bram Moolenaar5f148ec2016-03-07 22:59:26 +01002387 any send {expr} over JSON {handle}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002388ch_sendraw({handle}, {expr} [, {options}])
2389 any send {expr} over raw {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002390ch_setoptions({handle}, {options})
2391 none set options for {handle}
Bram Moolenaar7ef38102016-09-26 22:36:58 +02002392ch_status({handle} [, {options}])
2393 String status of channel {handle}
Bram Moolenaar446cb832008-06-24 21:56:24 +00002394changenr() Number current change number
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002395char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr}
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02002396chdir({dir}) String change current working directory
Bram Moolenaar81edd172016-04-14 13:51:37 +02002397cindent({lnum}) Number C indent for line {lnum}
Bram Moolenaaraff74912019-03-30 18:11:49 +01002398clearmatches([{win}]) none clear all matches
Bram Moolenaar81edd172016-04-14 13:51:37 +02002399col({expr}) Number column nr of cursor or mark
2400complete({startcol}, {matches}) none set Insert mode completion
2401complete_add({expr}) Number add completion match
Bram Moolenaar446cb832008-06-24 21:56:24 +00002402complete_check() Number check for key typed during completion
Bram Moolenaarfd133322019-03-29 12:20:27 +01002403complete_info([{what}]) Dict get current completion information
Bram Moolenaar81edd172016-04-14 13:51:37 +02002404confirm({msg} [, {choices} [, {default} [, {type}]]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002405 Number number of choice picked by user
Bram Moolenaar81edd172016-04-14 13:51:37 +02002406copy({expr}) any make a shallow copy of {expr}
2407cos({expr}) Float cosine of {expr}
2408cosh({expr}) Float hyperbolic cosine of {expr}
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002409count({comp}, {expr} [, {ic} [, {start}]])
2410 Number count how many {expr} are in {comp}
Bram Moolenaardc1f1642016-08-16 18:33:43 +02002411cscope_connection([{num}, {dbpath} [, {prepend}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002412 Number checks existence of cscope connection
Bram Moolenaar81edd172016-04-14 13:51:37 +02002413cursor({lnum}, {col} [, {off}])
Bram Moolenaar2f3b5102014-11-19 18:54:17 +01002414 Number move cursor to {lnum}, {col}, {off}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002415cursor({list}) Number move cursor to position in {list}
Bram Moolenaar4551c0a2018-06-20 22:38:21 +02002416debugbreak({pid}) Number interrupt process being debugged
Bram Moolenaar81edd172016-04-14 13:51:37 +02002417deepcopy({expr} [, {noref}]) any make a full copy of {expr}
2418delete({fname} [, {flags}]) Number delete the file or directory {fname}
Bram Moolenaard473c8c2018-08-11 18:00:22 +02002419deletebufline({expr}, {first} [, {last}])
Bram Moolenaard79a2622018-06-07 18:17:46 +02002420 Number delete lines from buffer {expr}
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002421did_filetype() Number |TRUE| if FileType autocmd event used
Bram Moolenaar81edd172016-04-14 13:51:37 +02002422diff_filler({lnum}) Number diff filler lines about {lnum}
2423diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col}
Bram Moolenaar4132eb52020-02-14 16:53:00 +01002424echoraw({expr}) none output {expr} as-is
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002425empty({expr}) Number |TRUE| if {expr} is empty
Bram Moolenaar691ddee2019-05-09 14:52:41 +02002426environ() Dict return environment variables
Bram Moolenaar81edd172016-04-14 13:51:37 +02002427escape({string}, {chars}) String escape {chars} in {string} with '\'
2428eval({string}) any evaluate {string} into its value
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002429eventhandler() Number |TRUE| if inside an event handler
Bram Moolenaar81edd172016-04-14 13:51:37 +02002430executable({expr}) Number 1 if executable {expr} exists
Bram Moolenaar79815f12016-07-09 17:07:29 +02002431execute({command}) String execute {command} and get the output
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002432exepath({expr}) String full path of the command {expr}
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002433exists({expr}) Number |TRUE| if {expr} exists
Bram Moolenaar81edd172016-04-14 13:51:37 +02002434extend({expr1}, {expr2} [, {expr3}])
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00002435 List/Dict insert items of {expr2} into {expr1}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002436exp({expr}) Float exponential of {expr}
2437expand({expr} [, {nosuf} [, {list}]])
Bram Moolenaar146e9c32012-03-07 19:18:23 +01002438 any expand special keywords in {expr}
Bram Moolenaar80dad482019-06-09 17:22:31 +02002439expandcmd({expr}) String expand {expr} like with `:edit`
Bram Moolenaar81edd172016-04-14 13:51:37 +02002440feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002441filereadable({file}) Number |TRUE| if {file} is a readable file
2442filewritable({file}) Number |TRUE| if {file} is a writable file
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002443filter({expr1}, {expr2}) List/Dict remove items from {expr1} where
2444 {expr2} is 0
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002445finddir({name} [, {path} [, {count}]])
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00002446 String find directory {name} in {path}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002447findfile({name} [, {path} [, {count}]])
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00002448 String find file {name} in {path}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002449float2nr({expr}) Number convert Float {expr} to a Number
2450floor({expr}) Float round {expr} down
2451fmod({expr1}, {expr2}) Float remainder of {expr1} / {expr2}
2452fnameescape({fname}) String escape special characters in {fname}
2453fnamemodify({fname}, {mods}) String modify file name
2454foldclosed({lnum}) Number first line of fold at {lnum} if closed
2455foldclosedend({lnum}) Number last line of fold at {lnum} if closed
2456foldlevel({lnum}) Number fold level at {lnum}
Bram Moolenaare0fa3742016-02-20 15:47:01 +01002457foldtext() String line displayed for closed fold
Bram Moolenaar81edd172016-04-14 13:51:37 +02002458foldtextresult({lnum}) String text for closed fold at {lnum}
Bram Moolenaare0fa3742016-02-20 15:47:01 +01002459foreground() Number bring the Vim window to the foreground
Bram Moolenaar437bafe2016-08-01 15:40:54 +02002460funcref({name} [, {arglist}] [, {dict}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002461 Funcref reference to function {name}
Bram Moolenaar437bafe2016-08-01 15:40:54 +02002462function({name} [, {arglist}] [, {dict}])
2463 Funcref named reference to function {name}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002464garbagecollect([{atexit}]) none free memory, breaking cyclic references
Bram Moolenaar81edd172016-04-14 13:51:37 +02002465get({list}, {idx} [, {def}]) any get item {idx} from {list} or {def}
2466get({dict}, {key} [, {def}]) any get item {key} from {dict} or {def}
Bram Moolenaar03e19a02016-05-24 22:29:49 +02002467get({func}, {what}) any get property of funcref/partial {func}
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002468getbufinfo([{expr}]) List information about buffers
Bram Moolenaar81edd172016-04-14 13:51:37 +02002469getbufline({expr}, {lnum} [, {end}])
Bram Moolenaar45360022005-07-21 21:08:21 +00002470 List lines {lnum} to {end} of buffer {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002471getbufvar({expr}, {varname} [, {def}])
Bram Moolenaar63dbda12013-02-20 21:12:10 +01002472 any variable {varname} in buffer {expr}
Bram Moolenaar4c313b12019-08-24 22:58:31 +02002473getchangelist([{expr}]) List list of change list items
Bram Moolenaar81edd172016-04-14 13:51:37 +02002474getchar([expr]) Number get one character from the user
Bram Moolenaare0fa3742016-02-20 15:47:01 +01002475getcharmod() Number modifiers for the last typed character
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +02002476getcharsearch() Dict last character search
Bram Moolenaar071d4272004-06-13 20:20:40 +00002477getcmdline() String return the current command-line
2478getcmdpos() Number return cursor position in command-line
Bram Moolenaarfb539272014-08-22 19:21:47 +02002479getcmdtype() String return current command-line type
2480getcmdwintype() String return current command-line window type
Bram Moolenaare9d58a62016-08-13 15:07:41 +02002481getcompletion({pat}, {type} [, {filtered}])
2482 List list of cmdline completion matches
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02002483getcurpos() List position of the cursor
Bram Moolenaar81edd172016-04-14 13:51:37 +02002484getcwd([{winnr} [, {tabnr}]]) String get the current working directory
Bram Moolenaar691ddee2019-05-09 14:52:41 +02002485getenv({name}) String return environment variable
Bram Moolenaar81edd172016-04-14 13:51:37 +02002486getfontname([{name}]) String name of font being used
2487getfperm({fname}) String file permissions of file {fname}
2488getfsize({fname}) Number size in bytes of file {fname}
2489getftime({fname}) Number last modification time of file
2490getftype({fname}) String description of type of file {fname}
Bram Moolenaara3a12462019-09-07 15:08:38 +02002491getimstatus() Number |TRUE| if the IME status is active
Bram Moolenaar4f505882018-02-10 21:06:32 +01002492getjumplist([{winnr} [, {tabnr}]])
2493 List list of jump list items
Bram Moolenaar81edd172016-04-14 13:51:37 +02002494getline({lnum}) String line {lnum} of current buffer
2495getline({lnum}, {end}) List lines {lnum} to {end} of current buffer
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002496getloclist({nr} [, {what}]) List list of location list items
Bram Moolenaaraff74912019-03-30 18:11:49 +01002497getmatches([{win}]) List list of current matches
Bram Moolenaardb3a2052019-11-16 18:22:41 +01002498getmousepos() Dict last known mouse position
Bram Moolenaar18081e32008-02-20 19:11:07 +00002499getpid() Number process ID of Vim
Bram Moolenaar81edd172016-04-14 13:51:37 +02002500getpos({expr}) List position of cursor, mark, etc.
Bram Moolenaard823fa92016-08-12 16:29:27 +02002501getqflist([{what}]) List list of quickfix items
Bram Moolenaar81edd172016-04-14 13:51:37 +02002502getreg([{regname} [, 1 [, {list}]]])
Bram Moolenaarb7cb42b2014-04-02 19:55:10 +02002503 String or List contents of register
Bram Moolenaar81edd172016-04-14 13:51:37 +02002504getregtype([{regname}]) String type of register
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002505gettabinfo([{expr}]) List list of tab pages
Bram Moolenaar81edd172016-04-14 13:51:37 +02002506gettabvar({nr}, {varname} [, {def}])
Bram Moolenaar63dbda12013-02-20 21:12:10 +01002507 any variable {varname} in tab {nr} or {def}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002508gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00002509 any {name} in {winnr} in tab page {tabnr}
Bram Moolenaarf49cc602018-11-11 15:21:05 +01002510gettagstack([{nr}]) Dict get the tag stack of window {nr}
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02002511getwininfo([{winid}]) List list of info about each window
Bram Moolenaar98ef2332018-03-18 14:44:37 +01002512getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01002513getwinposx() Number X coord in pixels of the Vim window
2514getwinposy() Number Y coord in pixels of the Vim window
Bram Moolenaar81edd172016-04-14 13:51:37 +02002515getwinvar({nr}, {varname} [, {def}])
Bram Moolenaar63dbda12013-02-20 21:12:10 +01002516 any variable {varname} in window {nr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002517glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])
Bram Moolenaar146e9c32012-03-07 19:18:23 +01002518 any expand file wildcards in {expr}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002519glob2regpat({expr}) String convert a glob pat into a search pat
Bram Moolenaar81edd172016-04-14 13:51:37 +02002520globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00002521 String do glob({expr}) for all dirs in {path}
Bram Moolenaar79296512020-03-22 16:17:14 +01002522has({feature} [, {check}]) Number |TRUE| if feature {feature} supported
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002523has_key({dict}, {key}) Number |TRUE| if {dict} has entry {key}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002524haslocaldir([{winnr} [, {tabnr}]])
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002525 Number |TRUE| if the window executed |:lcd|
Bram Moolenaar00aa0692019-04-27 20:37:57 +02002526 or |:tcd|
Bram Moolenaar81edd172016-04-14 13:51:37 +02002527hasmapto({what} [, {mode} [, {abbr}]])
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002528 Number |TRUE| if mapping to {what} exists
Bram Moolenaar8a7d6542020-01-26 15:56:19 +01002529histadd({history}, {item}) Number add an item to a history
2530histdel({history} [, {item}]) Number remove an item from a history
Bram Moolenaar81edd172016-04-14 13:51:37 +02002531histget({history} [, {index}]) String get the item {index} from a history
2532histnr({history}) Number highest index of a history
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002533hlexists({name}) Number |TRUE| if highlight group {name} exists
Bram Moolenaar81edd172016-04-14 13:51:37 +02002534hlID({name}) Number syntax ID of highlight group {name}
Bram Moolenaar071d4272004-06-13 20:20:40 +00002535hostname() String name of the machine Vim is running on
Bram Moolenaar81edd172016-04-14 13:51:37 +02002536iconv({expr}, {from}, {to}) String convert encoding of {expr}
2537indent({lnum}) Number indent of line {lnum}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002538index({object}, {expr} [, {start} [, {ic}]])
2539 Number index in {object} where {expr} appears
Bram Moolenaar81edd172016-04-14 13:51:37 +02002540input({prompt} [, {text} [, {completion}]])
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00002541 String get input from the user
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +02002542inputdialog({prompt} [, {text} [, {completion}]])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002543 String like input() but in a GUI dialog
Bram Moolenaar81edd172016-04-14 13:51:37 +02002544inputlist({textlist}) Number let the user pick from a choice list
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002545inputrestore() Number restore typeahead
2546inputsave() Number save and clear typeahead
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002547inputsecret({prompt} [, {text}]) String like input() but hiding the text
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002548insert({object}, {item} [, {idx}]) List insert {item} in {object} [before {idx}]
Bram Moolenaar67a2deb2019-11-25 00:05:32 +01002549interrupt() none interrupt script execution
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002550invert({expr}) Number bitwise invert
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002551isdirectory({directory}) Number |TRUE| if {directory} is a directory
Bram Moolenaarfda1bff2019-04-04 13:44:37 +02002552isinf({expr}) Number determine if {expr} is infinity value
2553 (positive or negative)
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002554islocked({expr}) Number |TRUE| if {expr} is locked
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002555isnan({expr}) Number |TRUE| if {expr} is NaN
Bram Moolenaar81edd172016-04-14 13:51:37 +02002556items({dict}) List key-value pairs in {dict}
2557job_getchannel({job}) Channel get the channel handle for {job}
Bram Moolenaare1fc5152018-04-21 19:49:08 +02002558job_info([{job}]) Dict get information about {job}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002559job_setoptions({job}, {options}) none set options for {job}
2560job_start({command} [, {options}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002561 Job start a job
Bram Moolenaar81edd172016-04-14 13:51:37 +02002562job_status({job}) String get the status of {job}
2563job_stop({job} [, {how}]) Number stop {job}
2564join({list} [, {sep}]) String join {list} items into one String
2565js_decode({string}) any decode JS style JSON
2566js_encode({expr}) String encode JS style JSON
2567json_decode({string}) any decode JSON
2568json_encode({expr}) String encode JSON
2569keys({dict}) List keys in {dict}
2570len({expr}) Number the length of {expr}
2571libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002572libcallnr({lib}, {func}, {arg}) Number idem, but return a Number
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02002573line({expr} [, {winid}]) Number line nr of cursor, last line or mark
Bram Moolenaar81edd172016-04-14 13:51:37 +02002574line2byte({lnum}) Number byte count of line {lnum}
2575lispindent({lnum}) Number Lisp indent for line {lnum}
Bram Moolenaar9d401282019-04-06 13:18:12 +02002576list2str({list} [, {utf8}]) String turn numbers in {list} into a String
Bram Moolenaara3347722019-05-11 21:14:24 +02002577listener_add({callback} [, {buf}])
2578 Number add a callback to listen to changes
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02002579listener_flush([{buf}]) none invoke listener callbacks
Bram Moolenaara3347722019-05-11 21:14:24 +02002580listener_remove({id}) none remove a listener callback
Bram Moolenaar071d4272004-06-13 20:20:40 +00002581localtime() Number current time
Bram Moolenaar81edd172016-04-14 13:51:37 +02002582log({expr}) Float natural logarithm (base e) of {expr}
2583log10({expr}) Float logarithm of Float {expr} to base 10
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002584luaeval({expr} [, {expr}]) any evaluate |Lua| expression
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002585map({expr1}, {expr2}) List/Dict change each item in {expr1} to {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002586maparg({name} [, {mode} [, {abbr} [, {dict}]]])
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01002587 String or Dict
2588 rhs of mapping {name} in mode {mode}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002589mapcheck({name} [, {mode} [, {abbr}]])
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002590 String check for mappings matching {name}
Bram Moolenaar9c652532020-05-24 13:10:18 +02002591mapset({mode}, {abbr}, {dict})
Bram Moolenaar4c9243f2020-05-22 13:10:44 +02002592 none restore mapping from |maparg()| result
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002593match({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002594 Number position where {pat} matches in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002595matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaar6ee10162007-07-26 20:58:42 +00002596 Number highlight {pattern} with {group}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002597matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaarb3414592014-06-17 17:48:32 +02002598 Number highlight positions with {group}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002599matcharg({nr}) List arguments of |:match|
Bram Moolenaaraff74912019-03-30 18:11:49 +01002600matchdelete({id} [, {win}]) Number delete match identified by {id}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002601matchend({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002602 Number position where {pat} ends in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002603matchlist({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00002604 List match and submatches of {pat} in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002605matchstr({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00002606 String {count}'th match of {pat} in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002607matchstrpos({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar7fed5c12016-03-29 23:10:31 +02002608 List {count}'th match of {pat} in {expr}
Bram Moolenaar690afe12017-01-28 18:34:47 +01002609max({expr}) Number maximum value of items in {expr}
Bram Moolenaar0eabd4d2020-03-15 16:13:53 +01002610menu_info({name} [, {mode}]) Dict get menu item information
Bram Moolenaar690afe12017-01-28 18:34:47 +01002611min({expr}) Number minimum value of items in {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002612mkdir({name} [, {path} [, {prot}]])
Bram Moolenaar26a60b42005-02-22 08:49:11 +00002613 Number create directory {name}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002614mode([expr]) String current editing mode
2615mzeval({expr}) any evaluate |MzScheme| expression
2616nextnonblank({lnum}) Number line nr of non-blank line >= {lnum}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002617nr2char({expr} [, {utf8}]) String single char with ASCII/UTF8 value {expr}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002618or({expr}, {expr}) Number bitwise OR
Bram Moolenaar81edd172016-04-14 13:51:37 +02002619pathshorten({expr}) String shorten directory names in a path
2620perleval({expr}) any evaluate |Perl| expression
Bram Moolenaar931a2772019-07-04 16:54:54 +02002621popup_atcursor({what}, {options}) Number create popup window near the cursor
Bram Moolenaar589edb32019-09-20 14:38:13 +02002622popup_beval({what}, {options}) Number create popup window for 'ballooneval'
Bram Moolenaar931a2772019-07-04 16:54:54 +02002623popup_clear() none close all popup windows
2624popup_close({id} [, {result}]) none close popup window {id}
2625popup_create({what}, {options}) Number create a popup window
2626popup_dialog({what}, {options}) Number create a popup window used as a dialog
2627popup_filter_menu({id}, {key}) Number filter for a menu popup window
2628popup_filter_yesno({id}, {key}) Number filter for a dialog popup window
Bram Moolenaare49fbff2019-08-21 22:50:07 +02002629popup_findinfo() Number get window ID of info popup window
2630popup_findpreview() Number get window ID of preview popup window
Bram Moolenaar931a2772019-07-04 16:54:54 +02002631popup_getoptions({id}) Dict get options of popup window {id}
2632popup_getpos({id}) Dict get position of popup window {id}
2633popup_hide({id}) none hide popup menu {id}
Bram Moolenaaref6b9792020-05-13 16:34:15 +02002634popup_list() List get a list of window IDs of al popups
2635popup_locate({row}, {col}) Number get window ID of popup at position
Bram Moolenaar931a2772019-07-04 16:54:54 +02002636popup_menu({what}, {options}) Number create a popup window used as a menu
2637popup_move({id}, {options}) none set position of popup window {id}
2638popup_notification({what}, {options})
2639 Number create a notification popup window
2640popup_show({id}) none unhide popup window {id}
2641popup_setoptions({id}, {options})
2642 none set options for popup window {id}
2643popup_settext({id}, {text}) none set the text of popup window {id}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002644pow({x}, {y}) Float {x} to the power of {y}
2645prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
2646printf({fmt}, {expr1}...) String format text
Bram Moolenaarf2732452018-06-03 14:47:35 +02002647prompt_setcallback({buf}, {expr}) none set prompt callback function
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02002648prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
2649prompt_setprompt({buf}, {text}) none set prompt text
Bram Moolenaar98aefe72018-12-13 22:20:09 +01002650prop_add({lnum}, {col}, {props}) none add a text property
Bram Moolenaare3d31b02018-12-24 23:07:04 +01002651prop_clear({lnum} [, {lnum-end} [, {props}]])
Bram Moolenaar98aefe72018-12-13 22:20:09 +01002652 none remove all text properties
2653prop_find({props} [, {direction}])
2654 Dict search for a text property
Bram Moolenaar7ceefb32020-05-01 16:07:38 +02002655prop_list({lnum} [, {props}]) List text properties in {lnum}
Bram Moolenaarc8c88492018-12-27 23:59:26 +01002656prop_remove({props} [, {lnum} [, {lnum-end}]])
Bram Moolenaar98aefe72018-12-13 22:20:09 +01002657 Number remove a text property
2658prop_type_add({name}, {props}) none define a new property type
2659prop_type_change({name}, {props})
2660 none change an existing property type
2661prop_type_delete({name} [, {props}])
2662 none delete a property type
Bram Moolenaar7ceefb32020-05-01 16:07:38 +02002663prop_type_get([{name} [, {props}]])
Bram Moolenaar98aefe72018-12-13 22:20:09 +01002664 Dict get property type values
2665prop_type_list([{props}]) List get list of property types
Bram Moolenaare9bd5722019-08-17 19:36:06 +02002666pum_getpos() Dict position and size of pum if visible
Bram Moolenaar446cb832008-06-24 21:56:24 +00002667pumvisible() Number whether popup menu is visible
Bram Moolenaar81edd172016-04-14 13:51:37 +02002668pyeval({expr}) any evaluate |Python| expression
2669py3eval({expr}) any evaluate |python3| expression
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01002670pyxeval({expr}) any evaluate |python_x| expression
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01002671rand([{expr}]) Number get pseudo-random number
Bram Moolenaar81edd172016-04-14 13:51:37 +02002672range({expr} [, {max} [, {stride}]])
Bram Moolenaard8b02732005-01-14 21:48:43 +00002673 List items from {expr} to {max}
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02002674readdir({dir} [, {expr}]) List file names in {dir} selected by {expr}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002675readfile({fname} [, {type} [, {max}]])
Bram Moolenaar26a60b42005-02-22 08:49:11 +00002676 List get list of lines from file {fname}
Bram Moolenaarf2732452018-06-03 14:47:35 +02002677reg_executing() String get the executing register name
Bram Moolenaar0b6d9112018-05-22 20:35:17 +02002678reg_recording() String get the recording register name
Bram Moolenaar81edd172016-04-14 13:51:37 +02002679reltime([{start} [, {end}]]) List get time value
2680reltimefloat({time}) Float turn the time value into a Float
2681reltimestr({time}) String turn time value into a String
Bram Moolenaar3c2881d2017-03-21 19:18:29 +01002682remote_expr({server}, {string} [, {idvar} [, {timeout}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002683 String send expression
Bram Moolenaar81edd172016-04-14 13:51:37 +02002684remote_foreground({server}) Number bring Vim server to the foreground
2685remote_peek({serverid} [, {retvar}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002686 Number check for reply string
Bram Moolenaar3c2881d2017-03-21 19:18:29 +01002687remote_read({serverid} [, {timeout}])
2688 String read reply string
Bram Moolenaar81edd172016-04-14 13:51:37 +02002689remote_send({server}, {string} [, {idvar}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002690 String send key sequence
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01002691remote_startserver({name}) none become server {name}
Bram Moolenaar10455d42019-11-21 15:36:18 +01002692remove({list}, {idx} [, {end}]) any/List
Bram Moolenaar39536dd2019-01-29 22:58:21 +01002693 remove items {idx}-{end} from {list}
2694remove({blob}, {idx} [, {end}]) Number/Blob
2695 remove bytes {idx}-{end} from {blob}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002696remove({dict}, {key}) any remove entry {key} from {dict}
2697rename({from}, {to}) Number rename (move) file from {from} to {to}
2698repeat({expr}, {count}) String repeat {expr} {count} times
2699resolve({filename}) String get filename a shortcut points to
2700reverse({list}) List reverse {list} in-place
2701round({expr}) Float round off {expr}
Bram Moolenaare99be0e2019-03-26 22:51:09 +01002702rubyeval({expr}) any evaluate |Ruby| expression
Bram Moolenaar81edd172016-04-14 13:51:37 +02002703screenattr({row}, {col}) Number attribute at screen position
2704screenchar({row}, {col}) Number character at screen position
Bram Moolenaar2912abb2019-03-29 14:16:42 +01002705screenchars({row}, {col}) List List of characters at screen position
Bram Moolenaar9750bb12012-12-05 16:10:42 +01002706screencol() Number current cursor column
Bram Moolenaarb3d17a22019-07-07 18:28:14 +02002707screenpos({winid}, {lnum}, {col}) Dict screen row and col of a text character
Bram Moolenaar9750bb12012-12-05 16:10:42 +01002708screenrow() Number current cursor row
Bram Moolenaar2912abb2019-03-29 14:16:42 +01002709screenstring({row}, {col}) String characters at screen position
Bram Moolenaar81edd172016-04-14 13:51:37 +02002710search({pattern} [, {flags} [, {stopline} [, {timeout}]]])
Bram Moolenaar76929292008-01-06 19:07:36 +00002711 Number search for {pattern}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002712searchdecl({name} [, {global} [, {thisblock}]])
Bram Moolenaar446cb832008-06-24 21:56:24 +00002713 Number search for variable declaration
Bram Moolenaar81edd172016-04-14 13:51:37 +02002714searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002715 Number search for other end of start/end pair
Bram Moolenaar81edd172016-04-14 13:51:37 +02002716searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00002717 List search for other end of start/end pair
Bram Moolenaar81edd172016-04-14 13:51:37 +02002718searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]])
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00002719 List search for {pattern}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002720server2client({clientid}, {string})
Bram Moolenaar071d4272004-06-13 20:20:40 +00002721 Number send reply string
2722serverlist() String get a list of available servers
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002723setbufline({expr}, {lnum}, {text})
2724 Number set line {lnum} to {text} in buffer
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02002725 {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002726setbufvar({expr}, {varname}, {val})
2727 none set {varname} in buffer {expr} to {val}
2728setcharsearch({dict}) Dict set character search from {dict}
2729setcmdpos({pos}) Number set cursor position in command-line
Bram Moolenaar691ddee2019-05-09 14:52:41 +02002730setenv({name}, {val}) none set environment variable
Bram Moolenaar81edd172016-04-14 13:51:37 +02002731setfperm({fname}, {mode}) Number set {fname} file permissions to {mode}
2732setline({lnum}, {line}) Number set line {lnum} to {line}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002733setloclist({nr}, {list} [, {action} [, {what}]])
Bram Moolenaar17c7c012006-01-26 22:25:15 +00002734 Number modify location list using {list}
Bram Moolenaaraff74912019-03-30 18:11:49 +01002735setmatches({list} [, {win}]) Number restore a list of matches
Bram Moolenaar81edd172016-04-14 13:51:37 +02002736setpos({expr}, {list}) Number set the {expr} position to {list}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002737setqflist({list} [, {action} [, {what}]])
Bram Moolenaard823fa92016-08-12 16:29:27 +02002738 Number modify quickfix list using {list}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002739setreg({n}, {v} [, {opt}]) Number set register to value and type
Bram Moolenaar81edd172016-04-14 13:51:37 +02002740settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val}
2741settabwinvar({tabnr}, {winnr}, {varname}, {val})
2742 none set {varname} in window {winnr} in tab
2743 page {tabnr} to {val}
Bram Moolenaarf49cc602018-11-11 15:21:05 +01002744settagstack({nr}, {dict} [, {action}])
2745 Number modify tag stack using {dict}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002746setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val}
2747sha256({string}) String SHA256 checksum of {string}
2748shellescape({string} [, {special}])
Bram Moolenaar05bb9532008-07-04 09:44:11 +00002749 String escape {string} for use as shell
Bram Moolenaar60a495f2006-10-03 12:44:42 +00002750 command argument
Bram Moolenaarf9514162018-11-22 03:08:29 +01002751shiftwidth([{col}]) Number effective value of 'shiftwidth'
Bram Moolenaar162b7142018-12-21 15:17:36 +01002752sign_define({name} [, {dict}]) Number define or update a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002753sign_define({list}) List define or update a list of signs
Bram Moolenaar162b7142018-12-21 15:17:36 +01002754sign_getdefined([{name}]) List get a list of defined signs
2755sign_getplaced([{expr} [, {dict}]])
2756 List get a list of placed signs
Bram Moolenaar6b7b7192019-01-11 13:42:41 +01002757sign_jump({id}, {group}, {expr})
2758 Number jump to a sign
Bram Moolenaar162b7142018-12-21 15:17:36 +01002759sign_place({id}, {group}, {name}, {expr} [, {dict}])
2760 Number place a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002761sign_placelist({list}) List place a list of signs
Bram Moolenaar162b7142018-12-21 15:17:36 +01002762sign_undefine([{name}]) Number undefine a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002763sign_undefine({list}) List undefine a list of signs
Bram Moolenaar162b7142018-12-21 15:17:36 +01002764sign_unplace({group} [, {dict}])
2765 Number unplace a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002766sign_unplacelist({list}) List unplace a list of signs
Bram Moolenaar81edd172016-04-14 13:51:37 +02002767simplify({filename}) String simplify filename as much as possible
2768sin({expr}) Float sine of {expr}
2769sinh({expr}) Float hyperbolic sine of {expr}
2770sort({list} [, {func} [, {dict}]])
Bram Moolenaar5f894962011-06-19 02:55:37 +02002771 List sort {list}, using {func} to compare
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02002772sound_clear() none stop playing all sounds
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002773sound_playevent({name} [, {callback}])
2774 Number play an event sound
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02002775sound_playfile({path} [, {callback}])
2776 Number play sound file {path}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002777sound_stop({id}) none stop playing sound {id}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002778soundfold({word}) String sound-fold {word}
Bram Moolenaard857f0e2005-06-21 22:37:39 +00002779spellbadword() String badly spelled word at cursor
Bram Moolenaar81edd172016-04-14 13:51:37 +02002780spellsuggest({word} [, {max} [, {capital}]])
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00002781 List spelling suggestions
Bram Moolenaar81edd172016-04-14 13:51:37 +02002782split({expr} [, {pat} [, {keepempty}]])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002783 List make |List| from {pat} separated {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002784sqrt({expr}) Float square root of {expr}
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01002785srand([{expr}]) List get seed for |rand()|
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02002786state([{what}]) String current state of Vim
Bram Moolenaar81edd172016-04-14 13:51:37 +02002787str2float({expr}) Float convert String to Float
Bram Moolenaar9d401282019-04-06 13:18:12 +02002788str2list({expr} [, {utf8}]) List convert each character of {expr} to
2789 ASCII/UTF8 value
Bram Moolenaar60a8de22019-09-15 14:33:22 +02002790str2nr({expr} [, {base} [, {quoted}]])
2791 Number convert String to Number
Bram Moolenaar81edd172016-04-14 13:51:37 +02002792strchars({expr} [, {skipcc}]) Number character length of the String {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002793strcharpart({str}, {start} [, {len}])
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02002794 String {len} characters of {str} at {start}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002795strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
Bram Moolenaar10455d42019-11-21 15:36:18 +01002796strftime({format} [, {time}]) String format time with a specified format
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02002797strgetchar({str}, {index}) Number get char {index} from {str}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002798stridx({haystack}, {needle} [, {start}])
Bram Moolenaar8f999f12005-01-25 22:12:55 +00002799 Number index of {needle} in {haystack}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002800string({expr}) String String representation of {expr} value
2801strlen({expr}) Number length of the String {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002802strpart({str}, {start} [, {len}])
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02002803 String {len} characters of {str} at {start}
Bram Moolenaar10455d42019-11-21 15:36:18 +01002804strptime({format}, {timestring})
2805 Number Convert {timestring} to unix timestamp
Bram Moolenaar81edd172016-04-14 13:51:37 +02002806strridx({haystack}, {needle} [, {start}])
Bram Moolenaar677ee682005-01-27 14:41:15 +00002807 Number last index of {needle} in {haystack}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002808strtrans({expr}) String translate string to make it printable
2809strwidth({expr}) Number display cell length of the String {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002810submatch({nr} [, {list}]) String or List
Bram Moolenaar41571762014-04-02 19:00:58 +02002811 specific match in ":s" or substitute()
Bram Moolenaar81edd172016-04-14 13:51:37 +02002812substitute({expr}, {pat}, {sub}, {flags})
Bram Moolenaar071d4272004-06-13 20:20:40 +00002813 String all {pat} in {expr} replaced with {sub}
Bram Moolenaar00f123a2018-08-21 20:28:54 +02002814swapinfo({fname}) Dict information about swap file {fname}
Bram Moolenaar110bd602018-09-16 18:46:59 +02002815swapname({expr}) String swap file of buffer {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002816synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col}
2817synIDattr({synID}, {what} [, {mode}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002818 String attribute {what} of syntax ID {synID}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002819synIDtrans({synID}) Number translated syntax ID of {synID}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002820synconcealed({lnum}, {col}) List info about concealing
Bram Moolenaar81edd172016-04-14 13:51:37 +02002821synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col}
2822system({expr} [, {input}]) String output of shell command/filter {expr}
2823systemlist({expr} [, {input}]) List output of shell command/filter {expr}
Bram Moolenaar802a0d92016-06-26 16:17:58 +02002824tabpagebuflist([{arg}]) List list of buffer numbers in tab page
Bram Moolenaar81edd172016-04-14 13:51:37 +02002825tabpagenr([{arg}]) Number number of current or last tab page
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002826tabpagewinnr({tabarg} [, {arg}]) Number number of current window in tab page
2827taglist({expr} [, {filename}]) List list of tags matching {expr}
Bram Moolenaar446cb832008-06-24 21:56:24 +00002828tagfiles() List tags files used
Bram Moolenaar81edd172016-04-14 13:51:37 +02002829tan({expr}) Float tangent of {expr}
2830tanh({expr}) Float hyperbolic tangent of {expr}
Bram Moolenaar975b5272016-03-15 23:10:59 +01002831tempname() String name for a temporary file
Bram Moolenaard96ff162018-02-18 22:13:29 +01002832term_dumpdiff({filename}, {filename} [, {options}])
2833 Number display difference between two dumps
2834term_dumpload({filename} [, {options}])
2835 Number displaying a screen dump
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01002836term_dumpwrite({buf}, {filename} [, {options}])
Bram Moolenaard96ff162018-02-18 22:13:29 +01002837 none dump terminal window contents
Bram Moolenaare41e3b42017-08-11 16:24:50 +02002838term_getaltscreen({buf}) Number get the alternate screen flag
Bram Moolenaarf59c6e82018-04-10 15:59:11 +02002839term_getansicolors({buf}) List get ANSI palette in GUI color mode
Bram Moolenaar45356542017-08-06 17:53:31 +02002840term_getattr({attr}, {what}) Number get the value of attribute {what}
Bram Moolenaar97870002017-07-30 18:28:38 +02002841term_getcursor({buf}) List get the cursor position of a terminal
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002842term_getjob({buf}) Job get the job associated with a terminal
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +02002843term_getline({buf}, {row}) String get a line of text from a terminal
Bram Moolenaar82b9ca02017-08-08 23:06:46 +02002844term_getscrolled({buf}) Number get the scroll count of a terminal
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002845term_getsize({buf}) List get the size of a terminal
Bram Moolenaarb000e322017-07-30 19:38:21 +02002846term_getstatus({buf}) String get the status of a terminal
2847term_gettitle({buf}) String get the title of a terminal
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002848term_gettty({buf}, [{input}]) String get the tty name of a terminal
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002849term_list() List get the list of terminal buffers
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +02002850term_scrape({buf}, {row}) List get row of a terminal screen
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002851term_sendkeys({buf}, {keys}) none send keystrokes to a terminal
Bram Moolenaard2842ea2019-09-26 23:08:54 +02002852term_setapi({buf}, {expr}) none set |terminal-api| function name prefix
Bram Moolenaarf59c6e82018-04-10 15:59:11 +02002853term_setansicolors({buf}, {colors})
2854 none set ANSI palette in GUI color mode
Bram Moolenaar7dda86f2018-04-20 22:36:41 +02002855term_setkill({buf}, {how}) none set signal to stop job in terminal
Bram Moolenaarb5b75622018-03-09 22:22:21 +01002856term_setrestore({buf}, {command}) none set command to restore terminal
Bram Moolenaar7dda86f2018-04-20 22:36:41 +02002857term_setsize({buf}, {rows}, {cols})
2858 none set the size of a terminal
Bram Moolenaar911ead12019-04-21 00:03:35 +02002859term_start({cmd} [, {options}]) Number open a terminal window and run a job
Bram Moolenaarf3402b12017-08-06 19:07:08 +02002860term_wait({buf} [, {time}]) Number wait for screen to be updated
Bram Moolenaar8e8df252016-05-25 21:23:21 +02002861test_alloc_fail({id}, {countdown}, {repeat})
2862 none make memory allocation fail
Bram Moolenaar6f1d9a02016-07-24 14:12:38 +02002863test_autochdir() none enable 'autochdir' during startup
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002864test_feedinput({string}) none add key sequence to input buffer
Bram Moolenaar574860b2016-05-24 17:33:34 +02002865test_garbagecollect_now() none free memory right now for testing
Bram Moolenaaradc67142019-06-22 01:40:42 +02002866test_garbagecollect_soon() none free memory soon for testing
Bram Moolenaareda65222019-05-16 20:29:44 +02002867test_getvalue({string}) any get value of an internal variable
Bram Moolenaare0c31f62017-03-01 15:07:05 +01002868test_ignore_error({expr}) none ignore a specific error
Bram Moolenaarc0f5a782019-01-13 15:16:13 +01002869test_null_blob() Blob null value for testing
Bram Moolenaar574860b2016-05-24 17:33:34 +02002870test_null_channel() Channel null value for testing
2871test_null_dict() Dict null value for testing
Bram Moolenaare69f6d02020-04-01 22:11:01 +02002872test_null_function() Funcref null value for testing
Bram Moolenaar574860b2016-05-24 17:33:34 +02002873test_null_job() Job null value for testing
2874test_null_list() List null value for testing
2875test_null_partial() Funcref null value for testing
2876test_null_string() String null value for testing
Bram Moolenaar8ed04582020-02-22 19:07:28 +01002877test_unknown() any unknown value for testing
2878test_void() any void value for testing
Bram Moolenaar2c64ca12018-10-19 16:22:31 +02002879test_option_not_set({name}) none reset flag indicating option was set
2880test_override({expr}, {val}) none test with Vim internal overrides
Bram Moolenaarc3e92c12019-03-23 14:23:07 +01002881test_refcount({expr}) Number get the reference count of {expr}
Bram Moolenaarab186732018-09-14 21:27:06 +02002882test_scrollbar({which}, {value}, {dragging})
2883 none scroll in the GUI for testing
Bram Moolenaarbb8476b2019-05-04 15:47:48 +02002884test_setmouse({row}, {col}) none set the mouse position for testing
Bram Moolenaar4f645c52020-02-08 16:40:39 +01002885test_srand_seed([seed]) none set seed for testing srand()
Bram Moolenaarc95a3022016-06-12 23:01:46 +02002886test_settime({expr}) none set current time for testing
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02002887timer_info([{id}]) List information about timers
Bram Moolenaarb73598e2016-08-07 18:22:53 +02002888timer_pause({id}, {pause}) none pause or unpause a timer
Bram Moolenaar81edd172016-04-14 13:51:37 +02002889timer_start({time}, {callback} [, {options}])
Bram Moolenaar975b5272016-03-15 23:10:59 +01002890 Number create a timer
Bram Moolenaar81edd172016-04-14 13:51:37 +02002891timer_stop({timer}) none stop a timer
Bram Moolenaarb73598e2016-08-07 18:22:53 +02002892timer_stopall() none stop all timers
Bram Moolenaar81edd172016-04-14 13:51:37 +02002893tolower({expr}) String the String {expr} switched to lowercase
2894toupper({expr}) String the String {expr} switched to uppercase
2895tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr}
Bram Moolenaar8299df92004-07-10 09:47:34 +00002896 to chars in {tostr}
Bram Moolenaard473c8c2018-08-11 18:00:22 +02002897trim({text} [, {mask}]) String trim characters in {mask} from {text}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002898trunc({expr}) Float truncate Float {expr}
2899type({name}) Number type of variable {name}
2900undofile({name}) String undo file name for {name}
Bram Moolenaara800b422010-06-27 01:15:55 +02002901undotree() List undo file tree
Bram Moolenaar81edd172016-04-14 13:51:37 +02002902uniq({list} [, {func} [, {dict}]])
Bram Moolenaar327aa022014-03-25 18:24:23 +01002903 List remove adjacent duplicates from a list
Bram Moolenaar81edd172016-04-14 13:51:37 +02002904values({dict}) List values in {dict}
2905virtcol({expr}) Number screen column of cursor or mark
2906visualmode([expr]) String last visual mode used
Bram Moolenaar8738fc12013-02-20 17:59:11 +01002907wildmenumode() Number whether 'wildmenu' mode is active
Bram Moolenaar868b7b62019-05-29 21:44:40 +02002908win_execute({id}, {command} [, {silent}])
2909 String execute {command} in window {id}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002910win_findbuf({bufnr}) List find windows containing {bufnr}
2911win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab}
Bram Moolenaar2c7f8c52020-04-20 19:52:53 +02002912win_gettype([{nr}]) String type of window {nr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002913win_gotoid({expr}) Number go to window with ID {expr}
2914win_id2tabwin({expr}) List get tab and window nr from window ID
2915win_id2win({expr}) Number get window nr from window ID
Bram Moolenaar22044dc2017-12-02 15:43:37 +01002916win_screenpos({nr}) List get screen position of window {nr}
Bram Moolenaard20dcb32019-09-10 21:22:58 +02002917win_splitmove({nr}, {target} [, {options}])
Bram Moolenaar2e693a82019-10-16 22:35:02 +02002918 Number move window {nr} to split of {target}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002919winbufnr({nr}) Number buffer number of window {nr}
Bram Moolenaar071d4272004-06-13 20:20:40 +00002920wincol() Number window column of the cursor
Bram Moolenaar388a5d42020-05-26 21:20:45 +02002921windowsversion() String MS-Windows OS version
Bram Moolenaar81edd172016-04-14 13:51:37 +02002922winheight({nr}) Number height of window {nr}
Bram Moolenaar0f6b4f02018-08-21 16:56:34 +02002923winlayout([{tabnr}]) List layout of windows in tab {tabnr}
Bram Moolenaar071d4272004-06-13 20:20:40 +00002924winline() Number window line of the cursor
Bram Moolenaar81edd172016-04-14 13:51:37 +02002925winnr([{expr}]) Number number of current window
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002926winrestcmd() String returns command to restore window sizes
Bram Moolenaar81edd172016-04-14 13:51:37 +02002927winrestview({dict}) none restore view of current window
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00002928winsaveview() Dict save view of current window
Bram Moolenaar81edd172016-04-14 13:51:37 +02002929winwidth({nr}) Number width of window {nr}
Bram Moolenaared767a22016-01-03 22:49:16 +01002930wordcount() Dict get byte/char/word statistics
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002931writefile({object}, {fname} [, {flags}])
2932 Number write |Blob| or |List| of lines to file
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002933xor({expr}, {expr}) Number bitwise XOR
Bram Moolenaar071d4272004-06-13 20:20:40 +00002934
Bram Moolenaar03413f42016-04-12 21:07:15 +02002935
Bram Moolenaar446cb832008-06-24 21:56:24 +00002936abs({expr}) *abs()*
2937 Return the absolute value of {expr}. When {expr} evaluates to
2938 a |Float| abs() returns a |Float|. When {expr} can be
2939 converted to a |Number| abs() returns a |Number|. Otherwise
2940 abs() gives an error message and returns -1.
2941 Examples: >
2942 echo abs(1.456)
2943< 1.456 >
2944 echo abs(-5.456)
2945< 5.456 >
2946 echo abs(-4)
2947< 4
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02002948
2949 Can also be used as a |method|: >
2950 Compute()->abs()
2951
2952< {only available when compiled with the |+float| feature}
Bram Moolenaar446cb832008-06-24 21:56:24 +00002953
Bram Moolenaardb7c6862010-05-21 16:33:48 +02002954
2955acos({expr}) *acos()*
2956 Return the arc cosine of {expr} measured in radians, as a
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02002957 |Float| in the range of [0, pi].
2958 {expr} must evaluate to a |Float| or a |Number| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02002959 [-1, 1].
2960 Examples: >
2961 :echo acos(0)
2962< 1.570796 >
2963 :echo acos(-0.5)
2964< 2.094395
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02002965
2966 Can also be used as a |method|: >
2967 Compute()->acos()
2968
2969< {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02002970
2971
Bram Moolenaard8968242019-01-15 22:51:57 +01002972add({object}, {expr}) *add()*
2973 Append the item {expr} to |List| or |Blob| {object}. Returns
2974 the resulting |List| or |Blob|. Examples: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00002975 :let alist = add([1, 2, 3], item)
2976 :call add(mylist, "woodstock")
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002977< Note that when {expr} is a |List| it is appended as a single
Bram Moolenaara23ccb82006-02-27 00:08:02 +00002978 item. Use |extend()| to concatenate |Lists|.
Bram Moolenaard8968242019-01-15 22:51:57 +01002979 When {object} is a |Blob| then {expr} must be a number.
Bram Moolenaar13065c42005-01-08 16:08:21 +00002980 Use |insert()| to add an item at another position.
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02002981
Bram Moolenaarac92e252019-08-03 21:58:38 +02002982 Can also be used as a |method|: >
2983 mylist->add(val1)->add(val2)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002984
Bram Moolenaara14de3d2005-01-07 21:48:26 +00002985
Bram Moolenaard6e256c2011-12-14 15:32:50 +01002986and({expr}, {expr}) *and()*
2987 Bitwise AND on the two arguments. The arguments are converted
2988 to a number. A List, Dict or Float argument causes an error.
2989 Example: >
2990 :let flag = and(bits, 0x80)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02002991< Can also be used as a |method|: >
2992 :let flag = bits->and(0x80)
Bram Moolenaard6e256c2011-12-14 15:32:50 +01002993
2994
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002995append({lnum}, {text}) *append()*
2996 When {text} is a |List|: Append each item of the |List| as a
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002997 text line below line {lnum} in the current buffer.
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002998 Otherwise append {text} as one text line below line {lnum} in
Bram Moolenaar748bf032005-02-02 23:04:36 +00002999 the current buffer.
3000 {lnum} can be zero to insert a line before the first one.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00003001 Returns 1 for failure ({lnum} out of range or out of memory),
Bram Moolenaar58b85342016-08-14 19:54:54 +02003002 0 for success. Example: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003003 :let failed = append(line('$'), "# THE END")
Bram Moolenaara14de3d2005-01-07 21:48:26 +00003004 :let failed = append(0, ["Chapter 1", "the beginning"])
Bram Moolenaarca851592018-06-06 21:04:07 +02003005
Bram Moolenaar25e42232019-08-04 15:04:10 +02003006< Can also be used as a |method| after a List: >
3007 mylist->append(lnum)
3008
3009
Bram Moolenaarca851592018-06-06 21:04:07 +02003010appendbufline({expr}, {lnum}, {text}) *appendbufline()*
3011 Like |append()| but append the text in buffer {expr}.
3012
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003013 This function works only for loaded buffers. First call
3014 |bufload()| if needed.
3015
Bram Moolenaarca851592018-06-06 21:04:07 +02003016 For the use of {expr}, see |bufname()|.
3017
3018 {lnum} is used like with |append()|. Note that using |line()|
3019 would use the current buffer, not the one appending to.
3020 Use "$" to append at the end of the buffer.
3021
3022 On success 0 is returned, on failure 1 is returned.
3023
3024 If {expr} is not a valid buffer or {lnum} is not valid, an
3025 error message is given. Example: >
3026 :let failed = appendbufline(13, 0, "# THE START")
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003027<
Bram Moolenaar25e42232019-08-04 15:04:10 +02003028 Can also be used as a |method| after a List: >
3029 mylist->appendbufline(buf, lnum)
3030
3031
3032argc([{winid}]) *argc()*
Bram Moolenaare6e39892018-10-25 12:32:11 +02003033 The result is the number of files in the argument list. See
3034 |arglist|.
3035 If {winid} is not supplied, the argument list of the current
3036 window is used.
3037 If {winid} is -1, the global argument list is used.
3038 Otherwise {winid} specifies the window of which the argument
3039 list is used: either the window number or the window ID.
3040 Returns -1 if the {winid} argument is invalid.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003041
3042 *argidx()*
3043argidx() The result is the current index in the argument list. 0 is
3044 the first file. argc() - 1 is the last one. See |arglist|.
3045
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003046 *arglistid()*
Bram Moolenaare0fa3742016-02-20 15:47:01 +01003047arglistid([{winnr} [, {tabnr}]])
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003048 Return the argument list ID. This is a number which
3049 identifies the argument list being used. Zero is used for the
Bram Moolenaarfb539272014-08-22 19:21:47 +02003050 global argument list. See |arglist|.
Bram Moolenaare6e39892018-10-25 12:32:11 +02003051 Returns -1 if the arguments are invalid.
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003052
3053 Without arguments use the current window.
3054 With {winnr} only use this window in the current tab page.
3055 With {winnr} and {tabnr} use the window in the specified tab
3056 page.
Bram Moolenaar7571d552016-08-18 22:54:46 +02003057 {winnr} can be the window number or the |window-ID|.
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003058
Bram Moolenaar071d4272004-06-13 20:20:40 +00003059 *argv()*
Bram Moolenaar7ceefb32020-05-01 16:07:38 +02003060argv([{nr} [, {winid}]])
Bram Moolenaare6e39892018-10-25 12:32:11 +02003061 The result is the {nr}th file in the argument list. See
3062 |arglist|. "argv(0)" is the first one. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00003063 :let i = 0
3064 :while i < argc()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003065 : let f = escape(fnameescape(argv(i)), '.')
Bram Moolenaar071d4272004-06-13 20:20:40 +00003066 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
3067 : let i = i + 1
3068 :endwhile
Bram Moolenaare6e39892018-10-25 12:32:11 +02003069< Without the {nr} argument, or when {nr} is -1, a |List| with
3070 the whole |arglist| is returned.
3071
3072 The {winid} argument specifies the window ID, see |argc()|.
Bram Moolenaar69bf6342019-10-29 04:16:57 +01003073 For the Vim command line arguments see |v:argv|.
Bram Moolenaare2f98b92006-03-29 21:18:24 +00003074
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003075asin({expr}) *asin()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003076 Return the arc sine of {expr} measured in radians, as a |Float|
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003077 in the range of [-pi/2, pi/2].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003078 {expr} must evaluate to a |Float| or a |Number| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003079 [-1, 1].
3080 Examples: >
3081 :echo asin(0.8)
3082< 0.927295 >
3083 :echo asin(-0.5)
3084< -0.523599
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003085
3086 Can also be used as a |method|: >
3087 Compute()->asin()
3088<
Bram Moolenaardb84e452010-08-15 13:50:43 +02003089 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003090
3091
Bram Moolenaar29634562020-01-09 21:46:04 +01003092assert_ functions are documented here: |assert-functions-details|
3093
3094
3095
Bram Moolenaar446cb832008-06-24 21:56:24 +00003096atan({expr}) *atan()*
3097 Return the principal value of the arc tangent of {expr}, in
3098 the range [-pi/2, +pi/2] radians, as a |Float|.
3099 {expr} must evaluate to a |Float| or a |Number|.
3100 Examples: >
3101 :echo atan(100)
3102< 1.560797 >
3103 :echo atan(-4.01)
3104< -1.326405
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003105
3106 Can also be used as a |method|: >
3107 Compute()->atan()
3108<
Bram Moolenaar446cb832008-06-24 21:56:24 +00003109 {only available when compiled with the |+float| feature}
3110
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003111
3112atan2({expr1}, {expr2}) *atan2()*
3113 Return the arc tangent of {expr1} / {expr2}, measured in
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003114 radians, as a |Float| in the range [-pi, pi].
3115 {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003116 Examples: >
3117 :echo atan2(-1, 1)
3118< -0.785398 >
3119 :echo atan2(1, -1)
3120< 2.356194
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003121
3122 Can also be used as a |method|: >
3123 Compute()->atan(1)
3124<
Bram Moolenaardb84e452010-08-15 13:50:43 +02003125 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003126
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02003127balloon_gettext() *balloon_gettext()*
3128 Return the current text in the balloon. Only for the string,
3129 not used for the List.
3130
Bram Moolenaar246fe032017-11-19 19:56:27 +01003131balloon_show({expr}) *balloon_show()*
3132 Show {expr} inside the balloon. For the GUI {expr} is used as
3133 a string. For a terminal {expr} can be a list, which contains
3134 the lines of the balloon. If {expr} is not a list it will be
3135 split with |balloon_split()|.
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02003136 If {expr} is an empty string any existing balloon is removed.
Bram Moolenaar246fe032017-11-19 19:56:27 +01003137
Bram Moolenaar214641f2017-03-05 17:04:09 +01003138 Example: >
Bram Moolenaar59716a22017-03-01 20:32:44 +01003139 func GetBalloonContent()
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02003140 " ... initiate getting the content
Bram Moolenaar59716a22017-03-01 20:32:44 +01003141 return ''
3142 endfunc
3143 set balloonexpr=GetBalloonContent()
3144
3145 func BalloonCallback(result)
Bram Moolenaar214641f2017-03-05 17:04:09 +01003146 call balloon_show(a:result)
Bram Moolenaar59716a22017-03-01 20:32:44 +01003147 endfunc
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003148< Can also be used as a |method|: >
3149 GetText()->balloon_show()
Bram Moolenaar59716a22017-03-01 20:32:44 +01003150<
3151 The intended use is that fetching the content of the balloon
3152 is initiated from 'balloonexpr'. It will invoke an
3153 asynchronous method, in which a callback invokes
3154 balloon_show(). The 'balloonexpr' itself can return an
3155 empty string or a placeholder.
Bram Moolenaar214641f2017-03-05 17:04:09 +01003156
3157 When showing a balloon is not possible nothing happens, no
3158 error message.
Bram Moolenaar95bafa22018-10-02 13:26:25 +02003159 {only available when compiled with the |+balloon_eval| or
3160 |+balloon_eval_term| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003161
Bram Moolenaar246fe032017-11-19 19:56:27 +01003162balloon_split({msg}) *balloon_split()*
3163 Split {msg} into lines to be displayed in a balloon. The
3164 splits are made for the current window size and optimize to
3165 show debugger output.
3166 Returns a |List| with the split lines.
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003167 Can also be used as a |method|: >
3168 GetText()->balloon_split()->balloon_show()
3169
3170< {only available when compiled with the |+balloon_eval_term|
Bram Moolenaar669a8282017-11-19 20:13:05 +01003171 feature}
Bram Moolenaar246fe032017-11-19 19:56:27 +01003172
Bram Moolenaar071d4272004-06-13 20:20:40 +00003173 *browse()*
3174browse({save}, {title}, {initdir}, {default})
3175 Put up a file requester. This only works when "has("browse")"
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003176 returns |TRUE| (only in some GUI versions).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003177 The input fields are:
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003178 {save} when |TRUE|, select file to write
Bram Moolenaar071d4272004-06-13 20:20:40 +00003179 {title} title for the requester
3180 {initdir} directory to start browsing in
3181 {default} default file name
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003182 An empty string is returned when the "Cancel" button is hit,
3183 something went wrong, or browsing is not possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003184
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00003185 *browsedir()*
3186browsedir({title}, {initdir})
3187 Put up a directory requester. This only works when
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003188 "has("browse")" returns |TRUE| (only in some GUI versions).
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00003189 On systems where a directory browser is not supported a file
3190 browser is used. In that case: select a file in the directory
3191 to be used.
3192 The input fields are:
3193 {title} title for the requester
3194 {initdir} directory to start browsing in
3195 When the "Cancel" button is hit, something went wrong, or
3196 browsing is not possible, an empty string is returned.
3197
Bram Moolenaar15e248e2019-06-30 20:21:37 +02003198bufadd({name}) *bufadd()*
3199 Add a buffer to the buffer list with {name}.
3200 If a buffer for file {name} already exists, return that buffer
3201 number. Otherwise return the buffer number of the newly
3202 created buffer. When {name} is an empty string then a new
3203 buffer is always created.
Bram Moolenaaraad222c2019-09-06 22:46:09 +02003204 The buffer will not have 'buflisted' set and not be loaded
Bram Moolenaar5ca1ac32019-07-04 15:39:28 +02003205 yet. To add some text to the buffer use this: >
3206 let bufnr = bufadd('someName')
3207 call bufload(bufnr)
3208 call setbufline(bufnr, 1, ['some', 'text'])
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003209< Can also be used as a |method|: >
3210 let bufnr = 'somename'->bufadd()
Bram Moolenaar15e248e2019-06-30 20:21:37 +02003211
Bram Moolenaar071d4272004-06-13 20:20:40 +00003212bufexists({expr}) *bufexists()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003213 The result is a Number, which is |TRUE| if a buffer called
Bram Moolenaar071d4272004-06-13 20:20:40 +00003214 {expr} exists.
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003215 If the {expr} argument is a number, buffer numbers are used.
Bram Moolenaara2a80162017-11-21 23:09:50 +01003216 Number zero is the alternate buffer for the current window.
3217
Bram Moolenaar071d4272004-06-13 20:20:40 +00003218 If the {expr} argument is a string it must match a buffer name
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003219 exactly. The name can be:
3220 - Relative to the current directory.
3221 - A full path.
Bram Moolenaar446cb832008-06-24 21:56:24 +00003222 - The name of a buffer with 'buftype' set to "nofile".
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003223 - A URL name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003224 Unlisted buffers will be found.
3225 Note that help files are listed by their short name in the
3226 output of |:buffers|, but bufexists() requires using their
3227 long name to be able to find them.
Bram Moolenaar446cb832008-06-24 21:56:24 +00003228 bufexists() may report a buffer exists, but to use the name
3229 with a |:buffer| command you may need to use |expand()|. Esp
3230 for MS-Windows 8.3 names in the form "c:\DOCUME~1"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003231 Use "bufexists(0)" to test for the existence of an alternate
3232 file name.
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003233
3234 Can also be used as a |method|: >
3235 let exists = 'somename'->bufexists()
3236<
3237 Obsolete name: buffer_exists(). *buffer_exists()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00003238
3239buflisted({expr}) *buflisted()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003240 The result is a Number, which is |TRUE| if a buffer called
Bram Moolenaar071d4272004-06-13 20:20:40 +00003241 {expr} exists and is listed (has the 'buflisted' option set).
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003242 The {expr} argument is used like with |bufexists()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003243
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003244 Can also be used as a |method|: >
3245 let listed = 'somename'->buflisted()
3246
Bram Moolenaar15e248e2019-06-30 20:21:37 +02003247bufload({expr}) *bufload()*
3248 Ensure the buffer {expr} is loaded. When the buffer name
3249 refers to an existing file then the file is read. Otherwise
3250 the buffer will be empty. If the buffer was already loaded
3251 then there is no change.
3252 If there is an existing swap file for the file of the buffer,
3253 there will be no dialog, the buffer will be loaded anyway.
3254 The {expr} argument is used like with |bufexists()|.
3255
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003256 Can also be used as a |method|: >
3257 eval 'somename'->bufload()
3258
Bram Moolenaar071d4272004-06-13 20:20:40 +00003259bufloaded({expr}) *bufloaded()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003260 The result is a Number, which is |TRUE| if a buffer called
Bram Moolenaar071d4272004-06-13 20:20:40 +00003261 {expr} exists and is loaded (shown in a window or hidden).
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003262 The {expr} argument is used like with |bufexists()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003263
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003264 Can also be used as a |method|: >
3265 let loaded = 'somename'->bufloaded()
3266
Bram Moolenaara8eee212019-08-24 22:14:58 +02003267bufname([{expr}]) *bufname()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00003268 The result is the name of a buffer, as it is displayed by the
3269 ":ls" command.
Bram Moolenaara8eee212019-08-24 22:14:58 +02003270 If {expr} is omitted the current buffer is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003271 If {expr} is a Number, that buffer number's name is given.
3272 Number zero is the alternate buffer for the current window.
3273 If {expr} is a String, it is used as a |file-pattern| to match
Bram Moolenaar58b85342016-08-14 19:54:54 +02003274 with the buffer names. This is always done like 'magic' is
Bram Moolenaar071d4272004-06-13 20:20:40 +00003275 set and 'cpoptions' is empty. When there is more than one
3276 match an empty string is returned.
3277 "" or "%" can be used for the current buffer, "#" for the
3278 alternate buffer.
3279 A full match is preferred, otherwise a match at the start, end
Bram Moolenaaref2f6562007-05-06 13:32:59 +00003280 or middle of the buffer name is accepted. If you only want a
3281 full match then put "^" at the start and "$" at the end of the
3282 pattern.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003283 Listed buffers are found first. If there is a single match
3284 with a listed buffer, that one is returned. Next unlisted
3285 buffers are searched for.
3286 If the {expr} is a String, but you want to use it as a buffer
3287 number, force it to be a Number by adding zero to it: >
3288 :echo bufname("3" + 0)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003289< Can also be used as a |method|: >
3290 echo bufnr->bufname()
3291
Bram Moolenaar071d4272004-06-13 20:20:40 +00003292< If the buffer doesn't exist, or doesn't have a name, an empty
3293 string is returned. >
3294 bufname("#") alternate buffer name
3295 bufname(3) name of buffer 3
3296 bufname("%") name of current buffer
3297 bufname("file2") name of buffer where "file2" matches.
3298< *buffer_name()*
3299 Obsolete name: buffer_name().
3300
3301 *bufnr()*
Bram Moolenaara8eee212019-08-24 22:14:58 +02003302bufnr([{expr} [, {create}]])
Bram Moolenaar65c923a2006-03-03 22:56:30 +00003303 The result is the number of a buffer, as it is displayed by
Bram Moolenaar071d4272004-06-13 20:20:40 +00003304 the ":ls" command. For the use of {expr}, see |bufname()|
Bram Moolenaar65c923a2006-03-03 22:56:30 +00003305 above.
Bram Moolenaard2842ea2019-09-26 23:08:54 +02003306
Bram Moolenaar65c923a2006-03-03 22:56:30 +00003307 If the buffer doesn't exist, -1 is returned. Or, if the
3308 {create} argument is present and not zero, a new, unlisted,
Bram Moolenaard2842ea2019-09-26 23:08:54 +02003309 buffer is created and its number is returned. Example: >
3310 let newbuf = bufnr('Scratch001', 1)
3311< Using an empty name uses the current buffer. To create a new
3312 buffer with an empty name use |bufadd()|.
3313
Bram Moolenaar071d4272004-06-13 20:20:40 +00003314 bufnr("$") is the last buffer: >
Bram Moolenaara8eee212019-08-24 22:14:58 +02003315 :let last_buffer = bufnr("$")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003316< The result is a Number, which is the highest buffer number
3317 of existing buffers. Note that not all buffers with a smaller
3318 number necessarily exist, because ":bwipeout" may have removed
3319 them. Use bufexists() to test for the existence of a buffer.
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003320
3321 Can also be used as a |method|: >
3322 echo bufref->bufnr()
3323<
3324 Obsolete name: buffer_number(). *buffer_number()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00003325 *last_buffer_nr()*
3326 Obsolete name for bufnr("$"): last_buffer_nr().
3327
Bram Moolenaarb3619a92016-06-04 17:58:52 +02003328bufwinid({expr}) *bufwinid()*
Bram Moolenaar7571d552016-08-18 22:54:46 +02003329 The result is a Number, which is the |window-ID| of the first
Bram Moolenaarb3619a92016-06-04 17:58:52 +02003330 window associated with buffer {expr}. For the use of {expr},
Bram Moolenaar58b85342016-08-14 19:54:54 +02003331 see |bufname()| above. If buffer {expr} doesn't exist or
Bram Moolenaarb3619a92016-06-04 17:58:52 +02003332 there is no such window, -1 is returned. Example: >
3333
3334 echo "A window containing buffer 1 is " . (bufwinid(1))
3335<
3336 Only deals with the current tab page.
3337
Bram Moolenaare49fbff2019-08-21 22:50:07 +02003338 Can also be used as a |method|: >
3339 FindBuffer()->bufwinid()
3340
Bram Moolenaar071d4272004-06-13 20:20:40 +00003341bufwinnr({expr}) *bufwinnr()*
Bram Moolenaare49fbff2019-08-21 22:50:07 +02003342 Like |bufwinid()| but return the window number instead of the
3343 |window-ID|.
3344 If buffer {expr} doesn't exist or there is no such window, -1
3345 is returned. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00003346
3347 echo "A window containing buffer 1 is " . (bufwinnr(1))
3348
3349< The number can be used with |CTRL-W_w| and ":wincmd w"
3350 |:wincmd|.
Bram Moolenaare49fbff2019-08-21 22:50:07 +02003351
3352 Can also be used as a |method|: >
3353 FindBuffer()->bufwinnr()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003354
Bram Moolenaar071d4272004-06-13 20:20:40 +00003355byte2line({byte}) *byte2line()*
3356 Return the line number that contains the character at byte
3357 count {byte} in the current buffer. This includes the
3358 end-of-line character, depending on the 'fileformat' option
3359 for the current buffer. The first character has byte count
3360 one.
3361 Also see |line2byte()|, |go| and |:goto|.
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003362
3363 Can also be used as a |method|: >
3364 GetOffset()->byte2line()
3365
3366< {not available when compiled without the |+byte_offset|
Bram Moolenaar071d4272004-06-13 20:20:40 +00003367 feature}
3368
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003369byteidx({expr}, {nr}) *byteidx()*
3370 Return byte index of the {nr}'th character in the string
3371 {expr}. Use zero for the first character, it returns zero.
3372 This function is only useful when there are multibyte
3373 characters, otherwise the returned value is equal to {nr}.
Bram Moolenaar0ffbbf92013-11-02 23:29:26 +01003374 Composing characters are not counted separately, their byte
3375 length is added to the preceding base character. See
3376 |byteidxcomp()| below for counting composing characters
3377 separately.
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003378 Example : >
3379 echo matchstr(str, ".", byteidx(str, 3))
3380< will display the fourth character. Another way to do the
3381 same: >
3382 let s = strpart(str, byteidx(str, 3))
3383 echo strpart(s, 0, byteidx(s, 1))
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02003384< Also see |strgetchar()| and |strcharpart()|.
3385
3386 If there are less than {nr} characters -1 is returned.
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003387 If there are exactly {nr} characters the length of the string
Bram Moolenaar0ffbbf92013-11-02 23:29:26 +01003388 in bytes is returned.
3389
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003390 Can also be used as a |method|: >
3391 GetName()->byteidx(idx)
3392
Bram Moolenaar0ffbbf92013-11-02 23:29:26 +01003393byteidxcomp({expr}, {nr}) *byteidxcomp()*
3394 Like byteidx(), except that a composing character is counted
3395 as a separate character. Example: >
3396 let s = 'e' . nr2char(0x301)
3397 echo byteidx(s, 1)
3398 echo byteidxcomp(s, 1)
3399 echo byteidxcomp(s, 2)
3400< The first and third echo result in 3 ('e' plus composing
3401 character is 3 bytes), the second echo results in 1 ('e' is
3402 one byte).
3403 Only works different from byteidx() when 'encoding' is set to
3404 a Unicode encoding.
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003405
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003406 Can also be used as a |method|: >
3407 GetName()->byteidxcomp(idx)
3408
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003409call({func}, {arglist} [, {dict}]) *call()* *E699*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003410 Call function {func} with the items in |List| {arglist} as
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003411 arguments.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003412 {func} can either be a |Funcref| or the name of a function.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003413 a:firstline and a:lastline are set to the cursor line.
3414 Returns the return value of the called function.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003415 {dict} is for functions with the "dict" attribute. It will be
3416 used to set the local variable "self". |Dictionary-function|
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003417
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003418 Can also be used as a |method|: >
3419 GetFunc()->call([arg, arg], dict)
3420
Bram Moolenaar446cb832008-06-24 21:56:24 +00003421ceil({expr}) *ceil()*
3422 Return the smallest integral value greater than or equal to
3423 {expr} as a |Float| (round up).
3424 {expr} must evaluate to a |Float| or a |Number|.
3425 Examples: >
3426 echo ceil(1.456)
3427< 2.0 >
3428 echo ceil(-5.456)
3429< -5.0 >
3430 echo ceil(4.0)
3431< 4.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003432
3433 Can also be used as a |method|: >
3434 Compute()->ceil()
3435<
Bram Moolenaar446cb832008-06-24 21:56:24 +00003436 {only available when compiled with the |+float| feature}
3437
Bram Moolenaar4b785f62016-11-29 21:54:44 +01003438
Bram Moolenaared997ad2019-07-21 16:42:00 +02003439ch_ functions are documented here: |channel-functions-details|
Bram Moolenaar82b9ca02017-08-08 23:06:46 +02003440
Bram Moolenaar328da0d2016-03-04 22:22:32 +01003441
Bram Moolenaar214641f2017-03-05 17:04:09 +01003442changenr() *changenr()*
3443 Return the number of the most recent change. This is the same
3444 number as what is displayed with |:undolist| and can be used
3445 with the |:undo| command.
3446 When a change was made it is the number of that change. After
3447 redo it is the number of the redone change. After undo it is
3448 one less than the number of the undone change.
3449
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003450char2nr({expr} [, {utf8}]) *char2nr()*
Bram Moolenaar214641f2017-03-05 17:04:09 +01003451 Return number value of the first char in {expr}. Examples: >
3452 char2nr(" ") returns 32
3453 char2nr("ABC") returns 65
3454< When {utf8} is omitted or zero, the current 'encoding' is used.
3455 Example for "utf-8": >
Bram Moolenaar98ef2332018-03-18 14:44:37 +01003456 char2nr("á") returns 225
3457 char2nr("á"[0]) returns 195
Bram Moolenaar214641f2017-03-05 17:04:09 +01003458< With {utf8} set to 1, always treat as utf-8 characters.
3459 A combining character is a separate character.
3460 |nr2char()| does the opposite.
Bram Moolenaaraff74912019-03-30 18:11:49 +01003461 To turn a string into a list of character numbers: >
3462 let str = "ABC"
3463 let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
3464< Result: [65, 66, 67]
Bram Moolenaar214641f2017-03-05 17:04:09 +01003465
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003466 Can also be used as a |method|: >
3467 GetChar()->char2nr()
3468
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003469chdir({dir}) *chdir()*
3470 Change the current working directory to {dir}. The scope of
3471 the directory change depends on the directory of the current
3472 window:
3473 - If the current window has a window-local directory
3474 (|:lcd|), then changes the window local directory.
3475 - Otherwise, if the current tabpage has a local
3476 directory (|:tcd|) then changes the tabpage local
3477 directory.
3478 - Otherwise, changes the global directory.
Bram Moolenaar560979e2020-02-04 22:53:05 +01003479 {dir} must be a String.
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003480 If successful, returns the previous working directory. Pass
3481 this to another chdir() to restore the directory.
3482 On failure, returns an empty string.
3483
3484 Example: >
3485 let save_dir = chdir(newdir)
Bram Moolenaar68e65602019-05-26 21:33:31 +02003486 if save_dir != ""
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003487 " ... do some work
3488 call chdir(save_dir)
3489 endif
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003490
3491< Can also be used as a |method|: >
3492 GetDir()->chdir()
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003493<
Bram Moolenaar214641f2017-03-05 17:04:09 +01003494cindent({lnum}) *cindent()*
3495 Get the amount of indent for line {lnum} according the C
3496 indenting rules, as with 'cindent'.
3497 The indent is counted in spaces, the value of 'tabstop' is
3498 relevant. {lnum} is used just like in |getline()|.
3499 When {lnum} is invalid or Vim was not compiled the |+cindent|
3500 feature, -1 is returned.
3501 See |C-indenting|.
3502
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003503 Can also be used as a |method|: >
3504 GetLnum()->cindent()
3505
Bram Moolenaaraff74912019-03-30 18:11:49 +01003506clearmatches([{win}]) *clearmatches()*
Bram Moolenaarfd133322019-03-29 12:20:27 +01003507 Clears all matches previously defined for the current window
3508 by |matchadd()| and the |:match| commands.
Bram Moolenaaraff74912019-03-30 18:11:49 +01003509 If {win} is specified, use the window with this number or
3510 window ID instead of the current window.
Bram Moolenaar214641f2017-03-05 17:04:09 +01003511
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003512 Can also be used as a |method|: >
3513 GetWin()->clearmatches()
3514<
Bram Moolenaar214641f2017-03-05 17:04:09 +01003515 *col()*
3516col({expr}) The result is a Number, which is the byte index of the column
3517 position given with {expr}. The accepted positions are:
3518 . the cursor position
3519 $ the end of the cursor line (the result is the
3520 number of bytes in the cursor line plus one)
3521 'x position of mark x (if the mark is not set, 0 is
3522 returned)
3523 v In Visual mode: the start of the Visual area (the
3524 cursor is the end). When not in Visual mode
3525 returns the cursor position. Differs from |'<| in
3526 that it's updated right away.
3527 Additionally {expr} can be [lnum, col]: a |List| with the line
3528 and column number. Most useful when the column is "$", to get
3529 the last column of a specific line. When "lnum" or "col" is
3530 out of range then col() returns zero.
3531 To get the line number use |line()|. To get both use
3532 |getpos()|.
3533 For the screen column position use |virtcol()|.
3534 Note that only marks in the current file can be used.
3535 Examples: >
3536 col(".") column of cursor
3537 col("$") length of cursor line plus one
3538 col("'t") column of mark t
3539 col("'" . markname) column of mark markname
3540< The first column is 1. 0 is returned for an error.
3541 For an uppercase mark the column may actually be in another
3542 buffer.
3543 For the cursor position, when 'virtualedit' is active, the
3544 column is one higher if the cursor is after the end of the
3545 line. This can be used to obtain the column in Insert mode: >
3546 :imap <F2> <C-O>:let save_ve = &ve<CR>
3547 \<C-O>:set ve=all<CR>
3548 \<C-O>:echo col(".") . "\n" <Bar>
3549 \let &ve = save_ve<CR>
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003550
3551< Can also be used as a |method|: >
3552 GetPos()->col()
Bram Moolenaar214641f2017-03-05 17:04:09 +01003553<
3554
3555complete({startcol}, {matches}) *complete()* *E785*
3556 Set the matches for Insert mode completion.
3557 Can only be used in Insert mode. You need to use a mapping
3558 with CTRL-R = (see |i_CTRL-R|). It does not work after CTRL-O
3559 or with an expression mapping.
3560 {startcol} is the byte offset in the line where the completed
3561 text start. The text up to the cursor is the original text
3562 that will be replaced by the matches. Use col('.') for an
3563 empty string. "col('.') - 1" will replace one character by a
3564 match.
3565 {matches} must be a |List|. Each |List| item is one match.
3566 See |complete-items| for the kind of items that are possible.
3567 Note that the after calling this function you need to avoid
3568 inserting anything that would cause completion to stop.
3569 The match can be selected with CTRL-N and CTRL-P as usual with
3570 Insert mode completion. The popup menu will appear if
3571 specified, see |ins-completion-menu|.
3572 Example: >
3573 inoremap <F5> <C-R>=ListMonths()<CR>
3574
3575 func! ListMonths()
3576 call complete(col('.'), ['January', 'February', 'March',
3577 \ 'April', 'May', 'June', 'July', 'August', 'September',
3578 \ 'October', 'November', 'December'])
3579 return ''
3580 endfunc
3581< This isn't very useful, but it shows how it works. Note that
3582 an empty string is returned to avoid a zero being inserted.
3583
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003584 Can also be used as a |method|, the base is passed as the
3585 second argument: >
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003586 GetMatches()->complete(col('.'))
3587
Bram Moolenaar214641f2017-03-05 17:04:09 +01003588complete_add({expr}) *complete_add()*
3589 Add {expr} to the list of matches. Only to be used by the
3590 function specified with the 'completefunc' option.
3591 Returns 0 for failure (empty string or out of memory),
3592 1 when the match was added, 2 when the match was already in
3593 the list.
3594 See |complete-functions| for an explanation of {expr}. It is
3595 the same as one item in the list that 'omnifunc' would return.
3596
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003597 Can also be used as a |method|: >
3598 GetMoreMatches()->complete_add()
3599
Bram Moolenaar214641f2017-03-05 17:04:09 +01003600complete_check() *complete_check()*
3601 Check for a key typed while looking for completion matches.
3602 This is to be used when looking for matches takes some time.
3603 Returns |TRUE| when searching for matches is to be aborted,
3604 zero otherwise.
3605 Only to be used by the function specified with the
3606 'completefunc' option.
3607
Bram Moolenaarfd133322019-03-29 12:20:27 +01003608 *complete_info()*
3609complete_info([{what}])
3610 Returns a Dictionary with information about Insert mode
3611 completion. See |ins-completion|.
3612 The items are:
3613 mode Current completion mode name string.
Bram Moolenaar723dd942019-04-04 13:11:03 +02003614 See |complete_info_mode| for the values.
Bram Moolenaarfd133322019-03-29 12:20:27 +01003615 pum_visible |TRUE| if popup menu is visible.
3616 See |pumvisible()|.
3617 items List of completion matches. Each item is a
3618 dictionary containing the entries "word",
3619 "abbr", "menu", "kind", "info" and "user_data".
3620 See |complete-items|.
3621 selected Selected item index. First index is zero.
3622 Index is -1 if no item is selected (showing
3623 typed text only)
3624 inserted Inserted string. [NOT IMPLEMENT YET]
3625
3626 *complete_info_mode*
3627 mode values are:
3628 "" Not in completion mode
3629 "keyword" Keyword completion |i_CTRL-X_CTRL-N|
3630 "ctrl_x" Just pressed CTRL-X |i_CTRL-X|
3631 "whole_line" Whole lines |i_CTRL-X_CTRL-L|
3632 "files" File names |i_CTRL-X_CTRL-F|
3633 "tags" Tags |i_CTRL-X_CTRL-]|
3634 "path_defines" Definition completion |i_CTRL-X_CTRL-D|
3635 "path_patterns" Include completion |i_CTRL-X_CTRL-I|
3636 "dictionary" Dictionary |i_CTRL-X_CTRL-K|
3637 "thesaurus" Thesaurus |i_CTRL-X_CTRL-T|
3638 "cmdline" Vim Command line |i_CTRL-X_CTRL-V|
3639 "function" User defined completion |i_CTRL-X_CTRL-U|
3640 "omni" Omni completion |i_CTRL-X_CTRL-O|
3641 "spell" Spelling suggestions |i_CTRL-X_s|
3642 "eval" |complete()| completion
3643 "unknown" Other internal modes
3644
3645 If the optional {what} list argument is supplied, then only
3646 the items listed in {what} are returned. Unsupported items in
3647 {what} are silently ignored.
3648
Bram Moolenaare9bd5722019-08-17 19:36:06 +02003649 To get the position and size of the popup menu, see
3650 |pum_getpos()|. It's also available in |v:event| during the
3651 |CompleteChanged| event.
3652
Bram Moolenaarfd133322019-03-29 12:20:27 +01003653 Examples: >
3654 " Get all items
3655 call complete_info()
3656 " Get only 'mode'
3657 call complete_info(['mode'])
3658 " Get only 'mode' and 'pum_visible'
3659 call complete_info(['mode', 'pum_visible'])
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003660
3661< Can also be used as a |method|: >
3662 GetItems()->complete_info()
Bram Moolenaarfd133322019-03-29 12:20:27 +01003663<
Bram Moolenaar214641f2017-03-05 17:04:09 +01003664 *confirm()*
3665confirm({msg} [, {choices} [, {default} [, {type}]]])
Bram Moolenaar647e24b2019-03-17 16:39:46 +01003666 confirm() offers the user a dialog, from which a choice can be
Bram Moolenaar214641f2017-03-05 17:04:09 +01003667 made. It returns the number of the choice. For the first
3668 choice this is 1.
3669 Note: confirm() is only supported when compiled with dialog
3670 support, see |+dialog_con| and |+dialog_gui|.
3671
3672 {msg} is displayed in a |dialog| with {choices} as the
3673 alternatives. When {choices} is missing or empty, "&OK" is
3674 used (and translated).
3675 {msg} is a String, use '\n' to include a newline. Only on
3676 some systems the string is wrapped when it doesn't fit.
3677
3678 {choices} is a String, with the individual choices separated
3679 by '\n', e.g. >
3680 confirm("Save changes?", "&Yes\n&No\n&Cancel")
3681< The letter after the '&' is the shortcut key for that choice.
3682 Thus you can type 'c' to select "Cancel". The shortcut does
3683 not need to be the first letter: >
3684 confirm("file has been modified", "&Save\nSave &All")
3685< For the console, the first letter of each choice is used as
3686 the default shortcut key.
3687
3688 The optional {default} argument is the number of the choice
3689 that is made if the user hits <CR>. Use 1 to make the first
3690 choice the default one. Use 0 to not set a default. If
3691 {default} is omitted, 1 is used.
3692
3693 The optional {type} argument gives the type of dialog. This
3694 is only used for the icon of the GTK, Mac, Motif and Win32
3695 GUI. It can be one of these values: "Error", "Question",
3696 "Info", "Warning" or "Generic". Only the first character is
3697 relevant. When {type} is omitted, "Generic" is used.
3698
3699 If the user aborts the dialog by pressing <Esc>, CTRL-C,
3700 or another valid interrupt key, confirm() returns 0.
3701
3702 An example: >
3703 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
3704 :if choice == 0
3705 : echo "make up your mind!"
3706 :elseif choice == 3
3707 : echo "tasteful"
3708 :else
3709 : echo "I prefer bananas myself."
3710 :endif
3711< In a GUI dialog, buttons are used. The layout of the buttons
3712 depends on the 'v' flag in 'guioptions'. If it is included,
3713 the buttons are always put vertically. Otherwise, confirm()
3714 tries to put the buttons in one horizontal line. If they
3715 don't fit, a vertical layout is used anyway. For some systems
3716 the horizontal layout is always used.
3717
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003718 Can also be used as a |method|in: >
3719 BuildMessage()->confirm("&Yes\n&No")
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003720<
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003721 *copy()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02003722copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003723 different from using {expr} directly.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003724 When {expr} is a |List| a shallow copy is created. This means
3725 that the original |List| can be changed without changing the
Bram Moolenaar446cb832008-06-24 21:56:24 +00003726 copy, and vice versa. But the items are identical, thus
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01003727 changing an item changes the contents of both |Lists|.
3728 A |Dictionary| is copied in a similar way as a |List|.
3729 Also see |deepcopy()|.
Bram Moolenaarac92e252019-08-03 21:58:38 +02003730 Can also be used as a |method|: >
3731 mylist->copy()
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003732
Bram Moolenaar446cb832008-06-24 21:56:24 +00003733cos({expr}) *cos()*
3734 Return the cosine of {expr}, measured in radians, as a |Float|.
3735 {expr} must evaluate to a |Float| or a |Number|.
3736 Examples: >
3737 :echo cos(100)
3738< 0.862319 >
3739 :echo cos(-4.01)
3740< -0.646043
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003741
3742 Can also be used as a |method|: >
3743 Compute()->cos()
3744<
Bram Moolenaar446cb832008-06-24 21:56:24 +00003745 {only available when compiled with the |+float| feature}
3746
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003747
3748cosh({expr}) *cosh()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003749 Return the hyperbolic cosine of {expr} as a |Float| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003750 [1, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003751 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003752 Examples: >
3753 :echo cosh(0.5)
3754< 1.127626 >
3755 :echo cosh(-0.5)
3756< -1.127626
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003757
3758 Can also be used as a |method|: >
3759 Compute()->cosh()
3760<
Bram Moolenaardb84e452010-08-15 13:50:43 +02003761 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003762
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003763
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003764count({comp}, {expr} [, {ic} [, {start}]]) *count()*
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003765 Return the number of times an item with value {expr} appears
Bram Moolenaar9966b212017-07-28 16:46:57 +02003766 in |String|, |List| or |Dictionary| {comp}.
3767
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003768 If {start} is given then start with the item with this index.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003769 {start} can only be used with a |List|.
Bram Moolenaar9966b212017-07-28 16:46:57 +02003770
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003771 When {ic} is given and it's |TRUE| then case is ignored.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003772
Bram Moolenaar9966b212017-07-28 16:46:57 +02003773 When {comp} is a string then the number of not overlapping
Bram Moolenaar338e47f2017-12-19 11:55:26 +01003774 occurrences of {expr} is returned. Zero is returned when
3775 {expr} is an empty string.
Bram Moolenaara74e4942019-08-04 17:35:53 +02003776
Bram Moolenaarac92e252019-08-03 21:58:38 +02003777 Can also be used as a |method|: >
3778 mylist->count(val)
Bram Moolenaara74e4942019-08-04 17:35:53 +02003779<
Bram Moolenaar071d4272004-06-13 20:20:40 +00003780 *cscope_connection()*
3781cscope_connection([{num} , {dbpath} [, {prepend}]])
3782 Checks for the existence of a |cscope| connection. If no
3783 parameters are specified, then the function returns:
3784 0, if cscope was not available (not compiled in), or
3785 if there are no cscope connections;
3786 1, if there is at least one cscope connection.
3787
3788 If parameters are specified, then the value of {num}
3789 determines how existence of a cscope connection is checked:
3790
3791 {num} Description of existence check
3792 ----- ------------------------------
3793 0 Same as no parameters (e.g., "cscope_connection()").
3794 1 Ignore {prepend}, and use partial string matches for
3795 {dbpath}.
3796 2 Ignore {prepend}, and use exact string matches for
3797 {dbpath}.
3798 3 Use {prepend}, use partial string matches for both
3799 {dbpath} and {prepend}.
3800 4 Use {prepend}, use exact string matches for both
3801 {dbpath} and {prepend}.
3802
3803 Note: All string comparisons are case sensitive!
3804
3805 Examples. Suppose we had the following (from ":cs show"): >
3806
3807 # pid database name prepend path
3808 0 27664 cscope.out /usr/local
3809<
3810 Invocation Return Val ~
3811 ---------- ---------- >
3812 cscope_connection() 1
3813 cscope_connection(1, "out") 1
3814 cscope_connection(2, "out") 0
3815 cscope_connection(3, "out") 0
3816 cscope_connection(3, "out", "local") 1
3817 cscope_connection(4, "out") 0
3818 cscope_connection(4, "out", "local") 0
3819 cscope_connection(4, "cscope.out", "/usr/local") 1
3820<
Bram Moolenaar0b238792006-03-02 22:49:12 +00003821cursor({lnum}, {col} [, {off}]) *cursor()*
3822cursor({list})
Bram Moolenaaref2f6562007-05-06 13:32:59 +00003823 Positions the cursor at the column (byte count) {col} in the
3824 line {lnum}. The first column is one.
Bram Moolenaar493c1782014-05-28 14:34:46 +02003825
Bram Moolenaar0b238792006-03-02 22:49:12 +00003826 When there is one argument {list} this is used as a |List|
Bram Moolenaar493c1782014-05-28 14:34:46 +02003827 with two, three or four item:
Bram Moolenaar03413f42016-04-12 21:07:15 +02003828 [{lnum}, {col}]
Bram Moolenaar493c1782014-05-28 14:34:46 +02003829 [{lnum}, {col}, {off}]
3830 [{lnum}, {col}, {off}, {curswant}]
Bram Moolenaar946e27a2014-06-25 18:50:27 +02003831 This is like the return value of |getpos()| or |getcurpos()|,
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02003832 but without the first item.
Bram Moolenaar493c1782014-05-28 14:34:46 +02003833
Bram Moolenaar071d4272004-06-13 20:20:40 +00003834 Does not change the jumplist.
3835 If {lnum} is greater than the number of lines in the buffer,
3836 the cursor will be positioned at the last line in the buffer.
3837 If {lnum} is zero, the cursor will stay in the current line.
Bram Moolenaar6f16eb82005-08-23 21:02:42 +00003838 If {col} is greater than the number of bytes in the line,
Bram Moolenaar071d4272004-06-13 20:20:40 +00003839 the cursor will be positioned at the last character in the
3840 line.
3841 If {col} is zero, the cursor will stay in the current column.
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02003842 If {curswant} is given it is used to set the preferred column
Bram Moolenaar34401cc2014-08-29 15:12:19 +02003843 for vertical movement. Otherwise {col} is used.
Bram Moolenaar2f3b5102014-11-19 18:54:17 +01003844
Bram Moolenaar0b238792006-03-02 22:49:12 +00003845 When 'virtualedit' is used {off} specifies the offset in
3846 screen columns from the start of the character. E.g., a
Bram Moolenaard46bbc72007-05-12 14:38:41 +00003847 position within a <Tab> or after the last character.
Bram Moolenaar798b30b2009-04-22 10:56:16 +00003848 Returns 0 when the position could be set, -1 otherwise.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003849
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003850 Can also be used as a |method|: >
3851 GetCursorPos()->cursor()
3852
Bram Moolenaar4551c0a2018-06-20 22:38:21 +02003853debugbreak({pid}) *debugbreak()*
3854 Specifically used to interrupt a program being debugged. It
3855 will cause process {pid} to get a SIGTRAP. Behavior for other
3856 processes is undefined. See |terminal-debugger|.
3857 {only available on MS-Windows}
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003858
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003859 Can also be used as a |method|: >
3860 GetPid()->debugbreak()
3861
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003862deepcopy({expr} [, {noref}]) *deepcopy()* *E698*
Bram Moolenaar58b85342016-08-14 19:54:54 +02003863 Make a copy of {expr}. For Numbers and Strings this isn't
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003864 different from using {expr} directly.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003865 When {expr} is a |List| a full copy is created. This means
3866 that the original |List| can be changed without changing the
Bram Moolenaar6463ca22016-02-13 17:04:46 +01003867 copy, and vice versa. When an item is a |List| or
3868 |Dictionary|, a copy for it is made, recursively. Thus
3869 changing an item in the copy does not change the contents of
3870 the original |List|.
3871 A |Dictionary| is copied in a similar way as a |List|.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003872 When {noref} is omitted or zero a contained |List| or
3873 |Dictionary| is only copied once. All references point to
3874 this single copy. With {noref} set to 1 every occurrence of a
3875 |List| or |Dictionary| results in a new copy. This also means
3876 that a cyclic reference causes deepcopy() to fail.
Bram Moolenaar3a3a7232005-01-17 22:16:15 +00003877 *E724*
3878 Nesting is possible up to 100 levels. When there is an item
Bram Moolenaar4399ef42005-02-12 14:29:27 +00003879 that refers back to a higher level making a deep copy with
3880 {noref} set to 1 will fail.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003881 Also see |copy()|.
3882
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003883 Can also be used as a |method|: >
3884 GetObject()->deepcopy()
3885
Bram Moolenaarda440d22016-01-16 21:27:23 +01003886delete({fname} [, {flags}]) *delete()*
3887 Without {flags} or with {flags} empty: Deletes the file by the
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003888 name {fname}. This also works when {fname} is a symbolic link.
Bram Moolenaarda440d22016-01-16 21:27:23 +01003889
3890 When {flags} is "d": Deletes the directory by the name
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003891 {fname}. This fails when directory {fname} is not empty.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003892
Bram Moolenaarda440d22016-01-16 21:27:23 +01003893 When {flags} is "rf": Deletes the directory by the name
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003894 {fname} and everything in it, recursively. BE CAREFUL!
Bram Moolenaar36f44c22016-08-28 18:17:20 +02003895 Note: on MS-Windows it is not possible to delete a directory
3896 that is being used.
Bram Moolenaar818078d2016-08-27 21:58:42 +02003897
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003898 A symbolic link itself is deleted, not what it points to.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003899
Bram Moolenaarda440d22016-01-16 21:27:23 +01003900 The result is a Number, which is 0 if the delete operation was
3901 successful and -1 when the deletion failed or partly failed.
3902
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003903 Use |remove()| to delete an item from a |List|.
Bram Moolenaard79a2622018-06-07 18:17:46 +02003904 To delete a line from the buffer use |:delete| or
3905 |deletebufline()|.
3906
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003907 Can also be used as a |method|: >
3908 GetName()->delete()
3909
Bram Moolenaard473c8c2018-08-11 18:00:22 +02003910deletebufline({expr}, {first} [, {last}]) *deletebufline()*
Bram Moolenaard79a2622018-06-07 18:17:46 +02003911 Delete lines {first} to {last} (inclusive) from buffer {expr}.
3912 If {last} is omitted then delete line {first} only.
3913 On success 0 is returned, on failure 1 is returned.
3914
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003915 This function works only for loaded buffers. First call
3916 |bufload()| if needed.
3917
Bram Moolenaard79a2622018-06-07 18:17:46 +02003918 For the use of {expr}, see |bufname()| above.
3919
Bram Moolenaar95bafa22018-10-02 13:26:25 +02003920 {first} and {last} are used like with |getline()|. Note that
Bram Moolenaard79a2622018-06-07 18:17:46 +02003921 when using |line()| this refers to the current buffer. Use "$"
3922 to refer to the last line in buffer {expr}.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003923
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003924 Can also be used as a |method|: >
3925 GetBuffer()->deletebufline(1)
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003926<
Bram Moolenaar071d4272004-06-13 20:20:40 +00003927 *did_filetype()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003928did_filetype() Returns |TRUE| when autocommands are being executed and the
Bram Moolenaar071d4272004-06-13 20:20:40 +00003929 FileType event has been triggered at least once. Can be used
3930 to avoid triggering the FileType event again in the scripts
3931 that detect the file type. |FileType|
Bram Moolenaar6aa8cea2017-06-05 14:44:35 +02003932 Returns |FALSE| when `:setf FALLBACK` was used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003933 When editing another file, the counter is reset, thus this
3934 really checks if the FileType event has been triggered for the
3935 current buffer. This allows an autocommand that starts
3936 editing another buffer to set 'filetype' and load a syntax
3937 file.
3938
Bram Moolenaar47136d72004-10-12 20:02:24 +00003939diff_filler({lnum}) *diff_filler()*
3940 Returns the number of filler lines above line {lnum}.
3941 These are the lines that were inserted at this point in
3942 another diff'ed window. These filler lines are shown in the
3943 display but don't exist in the buffer.
3944 {lnum} is used like with |getline()|. Thus "." is the current
3945 line, "'m" mark m, etc.
3946 Returns 0 if the current window is not in diff mode.
3947
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003948 Can also be used as a |method|: >
3949 GetLnum()->diff_filler()
3950
Bram Moolenaar47136d72004-10-12 20:02:24 +00003951diff_hlID({lnum}, {col}) *diff_hlID()*
3952 Returns the highlight ID for diff mode at line {lnum} column
3953 {col} (byte index). When the current line does not have a
3954 diff change zero is returned.
3955 {lnum} is used like with |getline()|. Thus "." is the current
3956 line, "'m" mark m, etc.
3957 {col} is 1 for the leftmost column, {lnum} is 1 for the first
3958 line.
3959 The highlight ID can be used with |synIDattr()| to obtain
3960 syntax information about the highlighting.
3961
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003962 Can also be used as a |method|: >
3963 GetLnum()->diff_hlID(col)
Bram Moolenaar691ddee2019-05-09 14:52:41 +02003964
Bram Moolenaar4132eb52020-02-14 16:53:00 +01003965
3966echoraw({expr}) *echoraw()*
3967 Output {expr} as-is, including unprintable characters. This
3968 can be used to output a terminal code. For example, to disable
3969 modifyOtherKeys: >
3970 call echoraw(&t_TE)
3971< and to enable it again: >
3972 call echoraw(&t_TI)
3973< Use with care, you can mess up the terminal this way.
3974
3975
Bram Moolenaar13065c42005-01-08 16:08:21 +00003976empty({expr}) *empty()*
3977 Return the Number 1 if {expr} is empty, zero otherwise.
Bram Moolenaar835dc632016-02-07 14:27:38 +01003978 - A |List| or |Dictionary| is empty when it does not have any
3979 items.
Bram Moolenaard8968242019-01-15 22:51:57 +01003980 - A |String| is empty when its length is zero.
3981 - A |Number| and |Float| are empty when their value is zero.
Bram Moolenaar835dc632016-02-07 14:27:38 +01003982 - |v:false|, |v:none| and |v:null| are empty, |v:true| is not.
Bram Moolenaard8968242019-01-15 22:51:57 +01003983 - A |Job| is empty when it failed to start.
3984 - A |Channel| is empty when it is closed.
Bram Moolenaard09091d2019-01-17 16:07:22 +01003985 - A |Blob| is empty when its length is zero.
Bram Moolenaar835dc632016-02-07 14:27:38 +01003986
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01003987 For a long |List| this is much faster than comparing the
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003988 length with zero.
Bram Moolenaara4208962019-08-24 20:50:19 +02003989
Bram Moolenaarac92e252019-08-03 21:58:38 +02003990 Can also be used as a |method|: >
3991 mylist->empty()
Bram Moolenaar13065c42005-01-08 16:08:21 +00003992
Bram Moolenaar29634562020-01-09 21:46:04 +01003993environ() *environ()*
3994 Return all of environment variables as dictionary. You can
3995 check if an environment variable exists like this: >
3996 :echo has_key(environ(), 'HOME')
3997< Note that the variable name may be CamelCase; to ignore case
3998 use this: >
3999 :echo index(keys(environ()), 'HOME', 0, 1) != -1
4000
Bram Moolenaar071d4272004-06-13 20:20:40 +00004001escape({string}, {chars}) *escape()*
4002 Escape the characters in {chars} that occur in {string} with a
4003 backslash. Example: >
4004 :echo escape('c:\program files\vim', ' \')
4005< results in: >
4006 c:\\program\ files\\vim
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02004007< Also see |shellescape()| and |fnameescape()|.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004008
Bram Moolenaara4208962019-08-24 20:50:19 +02004009 Can also be used as a |method|: >
4010 GetText()->escape(' \')
4011<
Bram Moolenaar446cb832008-06-24 21:56:24 +00004012 *eval()*
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004013eval({string}) Evaluate {string} and return the result. Especially useful to
4014 turn the result of |string()| back into the original value.
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01004015 This works for Numbers, Floats, Strings, Blobs and composites
4016 of them. Also works for |Funcref|s that refer to existing
Bram Moolenaar446cb832008-06-24 21:56:24 +00004017 functions.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004018
Bram Moolenaar25e42232019-08-04 15:04:10 +02004019 Can also be used as a |method|: >
4020 argv->join()->eval()
4021
Bram Moolenaar071d4272004-06-13 20:20:40 +00004022eventhandler() *eventhandler()*
4023 Returns 1 when inside an event handler. That is that Vim got
4024 interrupted while waiting for the user to type a character,
4025 e.g., when dropping a file on Vim. This means interactive
4026 commands cannot be used. Otherwise zero is returned.
4027
4028executable({expr}) *executable()*
4029 This function checks if an executable with the name {expr}
4030 exists. {expr} must be the name of the program without any
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00004031 arguments.
4032 executable() uses the value of $PATH and/or the normal
4033 searchpath for programs. *PATHEXT*
Bram Moolenaar5666fcd2019-12-26 14:35:26 +01004034 On MS-Windows the ".exe", ".bat", etc. can optionally be
4035 included. Then the extensions in $PATHEXT are tried. Thus if
4036 "foo.exe" does not exist, "foo.exe.bat" can be found. If
4037 $PATHEXT is not set then ".exe;.com;.bat;.cmd" is used. A dot
4038 by itself can be used in $PATHEXT to try using the name
4039 without an extension. When 'shell' looks like a Unix shell,
4040 then the name is also tried without adding an extension.
4041 On MS-Windows it only checks if the file exists and is not a
4042 directory, not if it's really executable.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00004043 On MS-Windows an executable in the same directory as Vim is
4044 always found. Since this directory is added to $PATH it
4045 should also work to execute it |win32-PATH|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004046 The result is a Number:
4047 1 exists
4048 0 does not exist
4049 -1 not implemented on this system
Bram Moolenaar6dc819b2018-07-03 16:42:19 +02004050 |exepath()| can be used to get the full path of an executable.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004051
Bram Moolenaara4208962019-08-24 20:50:19 +02004052 Can also be used as a |method|: >
4053 GetCommand()->executable()
4054
Bram Moolenaar79815f12016-07-09 17:07:29 +02004055execute({command} [, {silent}]) *execute()*
4056 Execute an Ex command or commands and return the output as a
4057 string.
4058 {command} can be a string or a List. In case of a List the
4059 lines are executed one by one.
4060 This is equivalent to: >
4061 redir => var
4062 {command}
4063 redir END
4064<
4065 The optional {silent} argument can have these values:
4066 "" no `:silent` used
4067 "silent" `:silent` used
4068 "silent!" `:silent!` used
Bram Moolenaar214641f2017-03-05 17:04:09 +01004069 The default is "silent". Note that with "silent!", unlike
Bram Moolenaar069c1e72016-07-15 21:25:08 +02004070 `:redir`, error messages are dropped. When using an external
4071 command the screen may be messed up, use `system()` instead.
Bram Moolenaar79815f12016-07-09 17:07:29 +02004072 *E930*
4073 It is not possible to use `:redir` anywhere in {command}.
4074
4075 To get a list of lines use |split()| on the result: >
Bram Moolenaar063b9d12016-07-09 20:21:48 +02004076 split(execute('args'), "\n")
Bram Moolenaar79815f12016-07-09 17:07:29 +02004077
Bram Moolenaar868b7b62019-05-29 21:44:40 +02004078< To execute a command in another window than the current one
4079 use `win_execute()`.
4080
4081 When used recursively the output of the recursive call is not
Bram Moolenaar79815f12016-07-09 17:07:29 +02004082 included in the output of the higher level call.
4083
Bram Moolenaara4208962019-08-24 20:50:19 +02004084 Can also be used as a |method|: >
4085 GetCommand()->execute()
4086
Bram Moolenaarc7f02552014-04-01 21:00:59 +02004087exepath({expr}) *exepath()*
4088 If {expr} is an executable and is either an absolute path, a
4089 relative path or found in $PATH, return the full path.
4090 Note that the current directory is used when {expr} starts
4091 with "./", which may be a problem for Vim: >
4092 echo exepath(v:progpath)
Bram Moolenaar7e38ea22014-04-05 22:55:53 +02004093< If {expr} cannot be found in $PATH or is not executable then
Bram Moolenaarc7f02552014-04-01 21:00:59 +02004094 an empty string is returned.
4095
Bram Moolenaara4208962019-08-24 20:50:19 +02004096 Can also be used as a |method|: >
4097 GetCommand()->exepath()
Bram Moolenaar2e693a82019-10-16 22:35:02 +02004098<
Bram Moolenaar071d4272004-06-13 20:20:40 +00004099 *exists()*
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02004100exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
4101 zero otherwise.
4102
4103 For checking for a supported feature use |has()|.
4104 For checking if a file exists use |filereadable()|.
4105
4106 The {expr} argument is a string, which contains one of these:
Bram Moolenaar071d4272004-06-13 20:20:40 +00004107 &option-name Vim option (only checks if it exists,
4108 not if it really works)
4109 +option-name Vim option that works.
4110 $ENVNAME environment variable (could also be
4111 done by comparing with an empty
4112 string)
4113 *funcname built-in function (see |functions|)
4114 or user defined function (see
Bram Moolenaar15c47602020-03-26 22:16:48 +01004115 |user-functions|) that is implemented.
4116 Also works for a variable that is a
4117 Funcref.
4118 ?funcname built-in function that could be
4119 implemented; to be used to check if
4120 "funcname" is valid
Bram Moolenaar071d4272004-06-13 20:20:40 +00004121 varname internal variable (see
Bram Moolenaar58b85342016-08-14 19:54:54 +02004122 |internal-variables|). Also works
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004123 for |curly-braces-names|, |Dictionary|
4124 entries, |List| items, etc. Beware
Bram Moolenaarc236c162008-07-13 17:41:49 +00004125 that evaluating an index may cause an
4126 error message for an invalid
4127 expression. E.g.: >
4128 :let l = [1, 2, 3]
4129 :echo exists("l[5]")
4130< 0 >
4131 :echo exists("l[xx]")
4132< E121: Undefined variable: xx
4133 0
Bram Moolenaar071d4272004-06-13 20:20:40 +00004134 :cmdname Ex command: built-in command, user
4135 command or command modifier |:command|.
4136 Returns:
4137 1 for match with start of a command
4138 2 full match with a command
4139 3 matches several user commands
4140 To check for a supported command
4141 always check the return value to be 2.
Bram Moolenaar14716812006-05-04 21:54:08 +00004142 :2match The |:2match| command.
4143 :3match The |:3match| command.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004144 #event autocommand defined for this event
4145 #event#pattern autocommand defined for this event and
4146 pattern (the pattern is taken
4147 literally and compared to the
4148 autocommand patterns character by
4149 character)
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004150 #group autocommand group exists
4151 #group#event autocommand defined for this group and
4152 event.
4153 #group#event#pattern
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00004154 autocommand defined for this group,
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004155 event and pattern.
Bram Moolenaarf4cd3e82005-12-22 22:47:02 +00004156 ##event autocommand for this event is
4157 supported.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004158
4159 Examples: >
4160 exists("&shortname")
4161 exists("$HOSTNAME")
4162 exists("*strftime")
4163 exists("*s:MyFunc")
4164 exists("bufcount")
4165 exists(":Make")
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004166 exists("#CursorHold")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004167 exists("#BufReadPre#*.gz")
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004168 exists("#filetypeindent")
4169 exists("#filetypeindent#FileType")
4170 exists("#filetypeindent#FileType#*")
Bram Moolenaarf4cd3e82005-12-22 22:47:02 +00004171 exists("##ColorScheme")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004172< There must be no space between the symbol (&/$/*/#) and the
4173 name.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004174 There must be no extra characters after the name, although in
4175 a few cases this is ignored. That may become more strict in
4176 the future, thus don't count on it!
4177 Working example: >
4178 exists(":make")
4179< NOT working example: >
4180 exists(":make install")
Bram Moolenaar9c102382006-05-03 21:26:49 +00004181
4182< Note that the argument must be a string, not the name of the
4183 variable itself. For example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00004184 exists(bufcount)
4185< This doesn't check for existence of the "bufcount" variable,
Bram Moolenaar06a89a52006-04-29 22:01:03 +00004186 but gets the value of "bufcount", and checks if that exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004187
Bram Moolenaara4208962019-08-24 20:50:19 +02004188 Can also be used as a |method|: >
4189 Varname()->exists()
4190
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004191exp({expr}) *exp()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02004192 Return the exponential of {expr} as a |Float| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004193 [0, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02004194 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004195 Examples: >
4196 :echo exp(2)
4197< 7.389056 >
4198 :echo exp(-1)
4199< 0.367879
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004200
4201 Can also be used as a |method|: >
4202 Compute()->exp()
4203<
Bram Moolenaardb84e452010-08-15 13:50:43 +02004204 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004205
4206
Bram Moolenaar84f72352012-03-11 15:57:40 +01004207expand({expr} [, {nosuf} [, {list}]]) *expand()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00004208 Expand wildcards and the following special keywords in {expr}.
Bram Moolenaar84f72352012-03-11 15:57:40 +01004209 'wildignorecase' applies.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004210
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004211 If {list} is given and it is |TRUE|, a List will be returned.
Bram Moolenaar84f72352012-03-11 15:57:40 +01004212 Otherwise the result is a String and when there are several
4213 matches, they are separated by <NL> characters. [Note: in
4214 version 5.0 a space was used, which caused problems when a
4215 file name contains a space]
Bram Moolenaar071d4272004-06-13 20:20:40 +00004216
Bram Moolenaar58b85342016-08-14 19:54:54 +02004217 If the expansion fails, the result is an empty string. A name
Bram Moolenaarec7944a2013-06-12 21:29:15 +02004218 for a non-existing file is not included, unless {expr} does
4219 not start with '%', '#' or '<', see below.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004220
4221 When {expr} starts with '%', '#' or '<', the expansion is done
4222 like for the |cmdline-special| variables with their associated
4223 modifiers. Here is a short overview:
4224
4225 % current file name
4226 # alternate file name
4227 #n alternate file name n
4228 <cfile> file name under the cursor
4229 <afile> autocmd file name
4230 <abuf> autocmd buffer number (as a String!)
4231 <amatch> autocmd matched name
Bram Moolenaara6878372014-03-22 21:02:50 +01004232 <sfile> sourced script file or function name
Bram Moolenaarf29c1c62018-09-10 21:05:02 +02004233 <slnum> sourced script line number or function
4234 line number
4235 <sflnum> script file line number, also when in
4236 a function
Bram Moolenaar071d4272004-06-13 20:20:40 +00004237 <cword> word under the cursor
4238 <cWORD> WORD under the cursor
4239 <client> the {clientid} of the last received
4240 message |server2client()|
4241 Modifiers:
4242 :p expand to full path
4243 :h head (last path component removed)
4244 :t tail (last path component only)
4245 :r root (one extension removed)
4246 :e extension only
4247
4248 Example: >
4249 :let &tags = expand("%:p:h") . "/tags"
4250< Note that when expanding a string that starts with '%', '#' or
4251 '<', any following text is ignored. This does NOT work: >
4252 :let doesntwork = expand("%:h.bak")
4253< Use this: >
4254 :let doeswork = expand("%:h") . ".bak"
4255< Also note that expanding "<cfile>" and others only returns the
4256 referenced file name without further expansion. If "<cfile>"
4257 is "~/.cshrc", you need to do another expand() to have the
4258 "~/" expanded into the path of the home directory: >
4259 :echo expand(expand("<cfile>"))
4260<
4261 There cannot be white space between the variables and the
4262 following modifier. The |fnamemodify()| function can be used
4263 to modify normal file names.
4264
4265 When using '%' or '#', and the current or alternate file name
4266 is not defined, an empty string is used. Using "%:p" in a
4267 buffer with no name, results in the current directory, with a
4268 '/' added.
4269
4270 When {expr} does not start with '%', '#' or '<', it is
4271 expanded like a file name is expanded on the command line.
4272 'suffixes' and 'wildignore' are used, unless the optional
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004273 {nosuf} argument is given and it is |TRUE|.
Bram Moolenaar146e9c32012-03-07 19:18:23 +01004274 Names for non-existing files are included. The "**" item can
4275 be used to search in a directory tree. For example, to find
4276 all "README" files in the current directory and below: >
Bram Moolenaar02743632005-07-25 20:42:36 +00004277 :echo expand("**/README")
4278<
Bram Moolenaar647e24b2019-03-17 16:39:46 +01004279 expand() can also be used to expand variables and environment
Bram Moolenaar071d4272004-06-13 20:20:40 +00004280 variables that are only known in a shell. But this can be
Bram Moolenaar34401cc2014-08-29 15:12:19 +02004281 slow, because a shell may be used to do the expansion. See
4282 |expr-env-expand|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004283 The expanded variable is still handled like a list of file
Bram Moolenaar58b85342016-08-14 19:54:54 +02004284 names. When an environment variable cannot be expanded, it is
Bram Moolenaar071d4272004-06-13 20:20:40 +00004285 left unchanged. Thus ":echo expand('$FOOBAR')" results in
4286 "$FOOBAR".
4287
4288 See |glob()| for finding existing files. See |system()| for
4289 getting the raw output of an external command.
4290
Bram Moolenaara4208962019-08-24 20:50:19 +02004291 Can also be used as a |method|: >
4292 Getpattern()->expand()
4293
Bram Moolenaar80dad482019-06-09 17:22:31 +02004294expandcmd({expr}) *expandcmd()*
4295 Expand special items in {expr} like what is done for an Ex
4296 command such as `:edit`. This expands special keywords, like
4297 with |expand()|, and environment variables, anywhere in
Bram Moolenaar96f45c02019-10-26 19:53:45 +02004298 {expr}. "~user" and "~/path" are only expanded at the start.
4299 Returns the expanded string. Example: >
Bram Moolenaar80dad482019-06-09 17:22:31 +02004300 :echo expandcmd('make %<.o')
Bram Moolenaara4208962019-08-24 20:50:19 +02004301
4302< Can also be used as a |method|: >
4303 GetCommand()->expandcmd()
Bram Moolenaar80dad482019-06-09 17:22:31 +02004304<
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004305extend({expr1}, {expr2} [, {expr3}]) *extend()*
Bram Moolenaara23ccb82006-02-27 00:08:02 +00004306 {expr1} and {expr2} must be both |Lists| or both
4307 |Dictionaries|.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004308
Bram Moolenaara23ccb82006-02-27 00:08:02 +00004309 If they are |Lists|: Append {expr2} to {expr1}.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004310 If {expr3} is given insert the items of {expr2} before item
4311 {expr3} in {expr1}. When {expr3} is zero insert before the
4312 first item. When {expr3} is equal to len({expr1}) then
4313 {expr2} is appended.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00004314 Examples: >
4315 :echo sort(extend(mylist, [7, 5]))
4316 :call extend(mylist, [2, 3], 1)
Bram Moolenaardc9cf9c2008-08-08 10:36:31 +00004317< When {expr1} is the same List as {expr2} then the number of
4318 items copied is equal to the original length of the List.
4319 E.g., when {expr3} is 1 you get N new copies of the first item
4320 (where N is the original length of the List).
Bram Moolenaar58b85342016-08-14 19:54:54 +02004321 Use |add()| to concatenate one item to a list. To concatenate
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004322 two lists into a new list use the + operator: >
Bram Moolenaarde8866b2005-01-06 23:24:37 +00004323 :let newlist = [1, 2, 3] + [4, 5]
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004324<
Bram Moolenaara23ccb82006-02-27 00:08:02 +00004325 If they are |Dictionaries|:
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004326 Add all entries from {expr2} to {expr1}.
4327 If a key exists in both {expr1} and {expr2} then {expr3} is
4328 used to decide what to do:
4329 {expr3} = "keep": keep the value of {expr1}
4330 {expr3} = "force": use the value of {expr2}
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00004331 {expr3} = "error": give an error message *E737*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004332 When {expr3} is omitted then "force" is assumed.
4333
4334 {expr1} is changed when {expr2} is not empty. If necessary
4335 make a copy of {expr1} first.
4336 {expr2} remains unchanged.
Bram Moolenaarf2571c62015-06-09 19:44:55 +02004337 When {expr1} is locked and {expr2} is not empty the operation
4338 fails.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004339 Returns {expr1}.
4340
Bram Moolenaarac92e252019-08-03 21:58:38 +02004341 Can also be used as a |method|: >
4342 mylist->extend(otherlist)
4343
Bram Moolenaarde8866b2005-01-06 23:24:37 +00004344
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004345feedkeys({string} [, {mode}]) *feedkeys()*
4346 Characters in {string} are queued for processing as if they
Bram Moolenaar0a988df2015-01-27 15:19:24 +01004347 come from a mapping or were typed by the user.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004348
Bram Moolenaar0a988df2015-01-27 15:19:24 +01004349 By default the string is added to the end of the typeahead
4350 buffer, thus if a mapping is still being executed the
4351 characters come after them. Use the 'i' flag to insert before
4352 other characters, they will be executed next, before any
4353 characters from a mapping.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004354
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004355 The function does not wait for processing of keys contained in
4356 {string}.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004357
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004358 To include special keys into {string}, use double-quotes
4359 and "\..." notation |expr-quote|. For example,
Bram Moolenaar79166c42007-05-10 18:29:51 +00004360 feedkeys("\<CR>") simulates pressing of the <Enter> key. But
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004361 feedkeys('\<CR>') pushes 5 characters.
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02004362 A special code that might be useful is <Ignore>, it exits the
4363 wait for a character without doing anything. *<Ignore>*
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004364
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004365 {mode} is a String, which can contain these character flags:
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004366 'm' Remap keys. This is default. If {mode} is absent,
4367 keys are remapped.
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00004368 'n' Do not remap keys.
4369 't' Handle keys as if typed; otherwise they are handled as
4370 if coming from a mapping. This matters for undo,
4371 opening folds, etc.
Bram Moolenaar5e66b422019-01-24 21:58:10 +01004372 'L' Lowlevel input. Only works for Unix or when using the
4373 GUI. Keys are used as if they were coming from the
4374 terminal. Other flags are not used. *E980*
Bram Moolenaar79296512020-03-22 16:17:14 +01004375 When a CTRL-C interrupts and 't' is included it sets
4376 the internal "got_int" flag.
Bram Moolenaar0a988df2015-01-27 15:19:24 +01004377 'i' Insert the string instead of appending (see above).
Bram Moolenaar25281632016-01-21 23:32:32 +01004378 'x' Execute commands until typeahead is empty. This is
4379 similar to using ":normal!". You can call feedkeys()
4380 several times without 'x' and then one time with 'x'
4381 (possibly with an empty {string}) to execute all the
Bram Moolenaar03413f42016-04-12 21:07:15 +02004382 typeahead. Note that when Vim ends in Insert mode it
4383 will behave as if <Esc> is typed, to avoid getting
4384 stuck, waiting for a character to be typed before the
4385 script continues.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004386 Note that if you manage to call feedkeys() while
Bram Moolenaar5b69c222019-01-11 14:50:06 +01004387 executing commands, thus calling it recursively, then
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004388 all typehead will be consumed by the last call.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02004389 '!' When used with 'x' will not end Insert mode. Can be
4390 used in a test when a timer is set to exit Insert mode
4391 a little later. Useful for testing CursorHoldI.
4392
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004393 Return value is always 0.
4394
Bram Moolenaara4208962019-08-24 20:50:19 +02004395 Can also be used as a |method|: >
4396 GetInput()->feedkeys()
4397
Bram Moolenaar071d4272004-06-13 20:20:40 +00004398filereadable({file}) *filereadable()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004399 The result is a Number, which is |TRUE| when a file with the
Bram Moolenaar071d4272004-06-13 20:20:40 +00004400 name {file} exists, and can be read. If {file} doesn't exist,
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004401 or is a directory, the result is |FALSE|. {file} is any
Bram Moolenaar071d4272004-06-13 20:20:40 +00004402 expression, which is used as a String.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004403 If you don't care about the file being readable you can use
4404 |glob()|.
Bram Moolenaar25e42232019-08-04 15:04:10 +02004405 {file} is used as-is, you may want to expand wildcards first: >
4406 echo filereadable('~/.vimrc')
4407 0
4408 echo filereadable(expand('~/.vimrc'))
4409 1
Bram Moolenaara4208962019-08-24 20:50:19 +02004410
4411< Can also be used as a |method|: >
4412 GetName()->filereadable()
Bram Moolenaar25e42232019-08-04 15:04:10 +02004413< *file_readable()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00004414 Obsolete name: file_readable().
4415
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004416
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004417filewritable({file}) *filewritable()*
4418 The result is a Number, which is 1 when a file with the
4419 name {file} exists, and can be written. If {file} doesn't
Bram Moolenaar446cb832008-06-24 21:56:24 +00004420 exist, or is not writable, the result is 0. If {file} is a
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004421 directory, and we can write to it, the result is 2.
4422
Bram Moolenaara4208962019-08-24 20:50:19 +02004423 Can also be used as a |method|: >
4424 GetName()->filewriteable()
4425
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004426
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004427filter({expr1}, {expr2}) *filter()*
4428 {expr1} must be a |List| or a |Dictionary|.
4429 For each item in {expr1} evaluate {expr2} and when the result
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004430 is zero remove the item from the |List| or |Dictionary|.
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004431 {expr2} must be a |string| or |Funcref|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004432
Bram Moolenaar50ba5262016-09-22 22:33:02 +02004433 If {expr2} is a |string|, inside {expr2} |v:val| has the value
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004434 of the current item. For a |Dictionary| |v:key| has the key
Bram Moolenaar50ba5262016-09-22 22:33:02 +02004435 of the current item and for a |List| |v:key| has the index of
4436 the current item.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004437 Examples: >
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004438 call filter(mylist, 'v:val !~ "OLD"')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004439< Removes the items where "OLD" appears. >
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004440 call filter(mydict, 'v:key >= 8')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004441< Removes the items with a key below 8. >
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004442 call filter(var, 0)
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004443< Removes all the items, thus clears the |List| or |Dictionary|.
Bram Moolenaard8b02732005-01-14 21:48:43 +00004444
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004445 Note that {expr2} is the result of expression and is then
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004446 used as an expression again. Often it is good to use a
4447 |literal-string| to avoid having to double backslashes.
4448
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004449 If {expr2} is a |Funcref| it must take two arguments:
4450 1. the key or the index of the current item.
4451 2. the value of the current item.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004452 The function must return |TRUE| if the item should be kept.
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004453 Example that keeps the odd items of a list: >
4454 func Odd(idx, val)
4455 return a:idx % 2 == 1
4456 endfunc
4457 call filter(mylist, function('Odd'))
Bram Moolenaar50ba5262016-09-22 22:33:02 +02004458< It is shorter when using a |lambda|: >
4459 call filter(myList, {idx, val -> idx * val <= 42})
4460< If you do not use "val" you can leave it out: >
4461 call filter(myList, {idx -> idx % 2 == 1})
Bram Moolenaar2ec618c2016-10-01 14:47:05 +02004462<
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004463 The operation is done in-place. If you want a |List| or
4464 |Dictionary| to remain unmodified make a copy first: >
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004465 :let l = filter(copy(mylist), 'v:val =~ "KEEP"')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004466
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004467< Returns {expr1}, the |List| or |Dictionary| that was filtered.
4468 When an error is encountered while evaluating {expr2} no
4469 further items in {expr1} are processed. When {expr2} is a
4470 Funcref errors inside a function are ignored, unless it was
4471 defined with the "abort" flag.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004472
Bram Moolenaarac92e252019-08-03 21:58:38 +02004473 Can also be used as a |method|: >
4474 mylist->filter(expr2)
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004475
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004476finddir({name} [, {path} [, {count}]]) *finddir()*
Bram Moolenaar5b6b1ca2007-03-27 08:19:43 +00004477 Find directory {name} in {path}. Supports both downwards and
4478 upwards recursive directory searches. See |file-searching|
4479 for the syntax of {path}.
4480 Returns the path of the first found match. When the found
4481 directory is below the current directory a relative path is
4482 returned. Otherwise a full path is returned.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004483 If {path} is omitted or empty then 'path' is used.
4484 If the optional {count} is given, find {count}'s occurrence of
Bram Moolenaar433f7c82006-03-21 21:29:36 +00004485 {name} in {path} instead of the first one.
Bram Moolenaar899dddf2006-03-26 21:06:50 +00004486 When {count} is negative return all the matches in a |List|.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004487 This is quite similar to the ex-command |:find|.
Bram Moolenaardb84e452010-08-15 13:50:43 +02004488 {only available when compiled with the |+file_in_path|
4489 feature}
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004490
Bram Moolenaara4208962019-08-24 20:50:19 +02004491 Can also be used as a |method|: >
4492 GetName()->finddir()
4493
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004494findfile({name} [, {path} [, {count}]]) *findfile()*
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004495 Just like |finddir()|, but find a file instead of a directory.
Bram Moolenaar433f7c82006-03-21 21:29:36 +00004496 Uses 'suffixesadd'.
4497 Example: >
4498 :echo findfile("tags.vim", ".;")
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004499< Searches from the directory of the current file upwards until
4500 it finds the file "tags.vim".
Bram Moolenaar071d4272004-06-13 20:20:40 +00004501
Bram Moolenaara4208962019-08-24 20:50:19 +02004502 Can also be used as a |method|: >
4503 GetName()->findfile()
4504
Bram Moolenaar446cb832008-06-24 21:56:24 +00004505float2nr({expr}) *float2nr()*
4506 Convert {expr} to a Number by omitting the part after the
4507 decimal point.
4508 {expr} must evaluate to a |Float| or a Number.
4509 When the value of {expr} is out of range for a |Number| the
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004510 result is truncated to 0x7fffffff or -0x7fffffff (or when
4511 64-bit Number support is enabled, 0x7fffffffffffffff or
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02004512 -0x7fffffffffffffff). NaN results in -0x80000000 (or when
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004513 64-bit Number support is enabled, -0x8000000000000000).
Bram Moolenaar446cb832008-06-24 21:56:24 +00004514 Examples: >
4515 echo float2nr(3.95)
4516< 3 >
4517 echo float2nr(-23.45)
4518< -23 >
4519 echo float2nr(1.0e100)
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004520< 2147483647 (or 9223372036854775807) >
Bram Moolenaar446cb832008-06-24 21:56:24 +00004521 echo float2nr(-1.0e150)
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004522< -2147483647 (or -9223372036854775807) >
Bram Moolenaar446cb832008-06-24 21:56:24 +00004523 echo float2nr(1.0e-100)
4524< 0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004525
4526 Can also be used as a |method|: >
4527 Compute()->float2nr()
4528<
Bram Moolenaar446cb832008-06-24 21:56:24 +00004529 {only available when compiled with the |+float| feature}
4530
4531
4532floor({expr}) *floor()*
4533 Return the largest integral value less than or equal to
4534 {expr} as a |Float| (round down).
4535 {expr} must evaluate to a |Float| or a |Number|.
4536 Examples: >
4537 echo floor(1.856)
4538< 1.0 >
4539 echo floor(-5.456)
4540< -6.0 >
4541 echo floor(4.0)
4542< 4.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004543
4544 Can also be used as a |method|: >
4545 Compute()->floor()
4546<
Bram Moolenaar446cb832008-06-24 21:56:24 +00004547 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004548
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004549
4550fmod({expr1}, {expr2}) *fmod()*
4551 Return the remainder of {expr1} / {expr2}, even if the
4552 division is not representable. Returns {expr1} - i * {expr2}
4553 for some integer i such that if {expr2} is non-zero, the
4554 result has the same sign as {expr1} and magnitude less than
4555 the magnitude of {expr2}. If {expr2} is zero, the value
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02004556 returned is zero. The value returned is a |Float|.
4557 {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004558 Examples: >
4559 :echo fmod(12.33, 1.22)
4560< 0.13 >
4561 :echo fmod(-12.33, 1.22)
4562< -0.13
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004563
4564 Can also be used as a |method|: >
4565 Compute()->fmod(1.22)
4566<
Bram Moolenaardb84e452010-08-15 13:50:43 +02004567 {only available when compiled with |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004568
4569
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004570fnameescape({string}) *fnameescape()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02004571 Escape {string} for use as file name command argument. All
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004572 characters that have a special meaning, such as '%' and '|'
4573 are escaped with a backslash.
Bram Moolenaar446cb832008-06-24 21:56:24 +00004574 For most systems the characters escaped are
4575 " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash
4576 appears in a filename, it depends on the value of 'isfname'.
Bram Moolenaar1b24e4b2008-08-08 10:59:17 +00004577 A leading '+' and '>' is also escaped (special after |:edit|
4578 and |:write|). And a "-" by itself (special after |:cd|).
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004579 Example: >
Bram Moolenaar1b24e4b2008-08-08 10:59:17 +00004580 :let fname = '+some str%nge|name'
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004581 :exe "edit " . fnameescape(fname)
4582< results in executing: >
Bram Moolenaar1b24e4b2008-08-08 10:59:17 +00004583 edit \+some\ str\%nge\|name
Bram Moolenaara4208962019-08-24 20:50:19 +02004584<
4585 Can also be used as a |method|: >
4586 GetName()->fnameescape()
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004587
Bram Moolenaar071d4272004-06-13 20:20:40 +00004588fnamemodify({fname}, {mods}) *fnamemodify()*
4589 Modify file name {fname} according to {mods}. {mods} is a
4590 string of characters like it is used for file names on the
4591 command line. See |filename-modifiers|.
4592 Example: >
4593 :echo fnamemodify("main.c", ":p:h")
4594< results in: >
4595 /home/mool/vim/vim/src
Bram Moolenaar446cb832008-06-24 21:56:24 +00004596< Note: Environment variables don't work in {fname}, use
Bram Moolenaar071d4272004-06-13 20:20:40 +00004597 |expand()| first then.
4598
Bram Moolenaara4208962019-08-24 20:50:19 +02004599 Can also be used as a |method|: >
4600 GetName()->fnamemodify(':p:h')
4601
Bram Moolenaar071d4272004-06-13 20:20:40 +00004602foldclosed({lnum}) *foldclosed()*
4603 The result is a Number. If the line {lnum} is in a closed
4604 fold, the result is the number of the first line in that fold.
4605 If the line {lnum} is not in a closed fold, -1 is returned.
4606
Bram Moolenaara4208962019-08-24 20:50:19 +02004607 Can also be used as a |method|: >
4608 GetLnum()->foldclosed()
4609
Bram Moolenaar071d4272004-06-13 20:20:40 +00004610foldclosedend({lnum}) *foldclosedend()*
4611 The result is a Number. If the line {lnum} is in a closed
4612 fold, the result is the number of the last line in that fold.
4613 If the line {lnum} is not in a closed fold, -1 is returned.
4614
Bram Moolenaara4208962019-08-24 20:50:19 +02004615 Can also be used as a |method|: >
4616 GetLnum()->foldclosedend()
4617
Bram Moolenaar071d4272004-06-13 20:20:40 +00004618foldlevel({lnum}) *foldlevel()*
4619 The result is a Number, which is the foldlevel of line {lnum}
Bram Moolenaar58b85342016-08-14 19:54:54 +02004620 in the current buffer. For nested folds the deepest level is
Bram Moolenaar071d4272004-06-13 20:20:40 +00004621 returned. If there is no fold at line {lnum}, zero is
4622 returned. It doesn't matter if the folds are open or closed.
4623 When used while updating folds (from 'foldexpr') -1 is
4624 returned for lines where folds are still to be updated and the
4625 foldlevel is unknown. As a special case the level of the
4626 previous line is usually available.
4627
Bram Moolenaara4208962019-08-24 20:50:19 +02004628 Can also be used as a |method|: >
4629 GetLnum()->foldlevel()
Bram Moolenaar2e693a82019-10-16 22:35:02 +02004630<
Bram Moolenaar071d4272004-06-13 20:20:40 +00004631 *foldtext()*
4632foldtext() Returns a String, to be displayed for a closed fold. This is
4633 the default function used for the 'foldtext' option and should
4634 only be called from evaluating 'foldtext'. It uses the
4635 |v:foldstart|, |v:foldend| and |v:folddashes| variables.
4636 The returned string looks like this: >
4637 +-- 45 lines: abcdef
Bram Moolenaar42205552017-03-18 19:42:22 +01004638< The number of leading dashes depends on the foldlevel. The
4639 "45" is the number of lines in the fold. "abcdef" is the text
4640 in the first non-blank line of the fold. Leading white space,
4641 "//" or "/*" and the text from the 'foldmarker' and
4642 'commentstring' options is removed.
4643 When used to draw the actual foldtext, the rest of the line
4644 will be filled with the fold char from the 'fillchars'
4645 setting.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004646 {not available when compiled without the |+folding| feature}
4647
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00004648foldtextresult({lnum}) *foldtextresult()*
4649 Returns the text that is displayed for the closed fold at line
4650 {lnum}. Evaluates 'foldtext' in the appropriate context.
4651 When there is no closed fold at {lnum} an empty string is
4652 returned.
4653 {lnum} is used like with |getline()|. Thus "." is the current
4654 line, "'m" mark m, etc.
4655 Useful when exporting folded text, e.g., to HTML.
4656 {not available when compiled without the |+folding| feature}
4657
Bram Moolenaara4208962019-08-24 20:50:19 +02004658
4659 Can also be used as a |method|: >
4660 GetLnum()->foldtextresult()
4661<
Bram Moolenaar071d4272004-06-13 20:20:40 +00004662 *foreground()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02004663foreground() Move the Vim window to the foreground. Useful when sent from
Bram Moolenaar071d4272004-06-13 20:20:40 +00004664 a client to a Vim server. |remote_send()|
4665 On Win32 systems this might not work, the OS does not always
4666 allow a window to bring itself to the foreground. Use
4667 |remote_foreground()| instead.
4668 {only in the Win32, Athena, Motif and GTK GUI versions and the
4669 Win32 console version}
4670
Bram Moolenaar437bafe2016-08-01 15:40:54 +02004671 *funcref()*
4672funcref({name} [, {arglist}] [, {dict}])
4673 Just like |function()|, but the returned Funcref will lookup
4674 the function by reference, not by name. This matters when the
4675 function {name} is redefined later.
4676
4677 Unlike |function()|, {name} must be an existing user function.
4678 Also for autoloaded functions. {name} cannot be a builtin
4679 function.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004680
Bram Moolenaara4208962019-08-24 20:50:19 +02004681 Can also be used as a |method|: >
4682 GetFuncname()->funcref([arg])
4683<
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004684 *function()* *E700* *E922* *E923*
4685function({name} [, {arglist}] [, {dict}])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004686 Return a |Funcref| variable that refers to function {name}.
Bram Moolenaar975b5272016-03-15 23:10:59 +01004687 {name} can be the name of a user defined function or an
4688 internal function.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00004689
Bram Moolenaar437bafe2016-08-01 15:40:54 +02004690 {name} can also be a Funcref or a partial. When it is a
Bram Moolenaar975b5272016-03-15 23:10:59 +01004691 partial the dict stored in it will be used and the {dict}
4692 argument is not allowed. E.g.: >
4693 let FuncWithArg = function(dict.Func, [arg])
4694 let Broken = function(dict.Func, [arg], dict)
4695<
Bram Moolenaar437bafe2016-08-01 15:40:54 +02004696 When using the Funcref the function will be found by {name},
4697 also when it was redefined later. Use |funcref()| to keep the
4698 same function.
4699
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004700 When {arglist} or {dict} is present this creates a partial.
Bram Moolenaar06d2d382016-05-20 17:24:11 +02004701 That means the argument list and/or the dictionary is stored in
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004702 the Funcref and will be used when the Funcref is called.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004703
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004704 The arguments are passed to the function in front of other
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004705 arguments, but after any argument from |method|. Example: >
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004706 func Callback(arg1, arg2, name)
4707 ...
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004708 let Partial = function('Callback', ['one', 'two'])
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004709 ...
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004710 call Partial('name')
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004711< Invokes the function as with: >
4712 call Callback('one', 'two', 'name')
4713
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004714< With a |method|: >
4715 func Callback(one, two, three)
4716 ...
4717 let Partial = function('Callback', ['two'])
4718 ...
4719 eval 'one'->Partial('three')
4720< Invokes the function as with: >
4721 call Callback('one', 'two', 'three')
4722
Bram Moolenaar03602ec2016-03-20 20:57:45 +01004723< The function() call can be nested to add more arguments to the
4724 Funcref. The extra arguments are appended to the list of
4725 arguments. Example: >
4726 func Callback(arg1, arg2, name)
4727 ...
4728 let Func = function('Callback', ['one'])
4729 let Func2 = function(Func, ['two'])
4730 ...
4731 call Func2('name')
4732< Invokes the function as with: >
4733 call Callback('one', 'two', 'name')
4734
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004735< The Dictionary is only useful when calling a "dict" function.
4736 In that case the {dict} is passed in as "self". Example: >
4737 function Callback() dict
4738 echo "called for " . self.name
4739 endfunction
4740 ...
4741 let context = {"name": "example"}
4742 let Func = function('Callback', context)
4743 ...
4744 call Func() " will echo: called for example
Bram Moolenaar975b5272016-03-15 23:10:59 +01004745< The use of function() is not needed when there are no extra
4746 arguments, these two are equivalent: >
4747 let Func = function('Callback', context)
4748 let Func = context.Callback
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004749
4750< The argument list and the Dictionary can be combined: >
4751 function Callback(arg1, count) dict
4752 ...
4753 let context = {"name": "example"}
4754 let Func = function('Callback', ['one'], context)
4755 ...
4756 call Func(500)
4757< Invokes the function as with: >
4758 call context.Callback('one', 500)
Bram Moolenaara4208962019-08-24 20:50:19 +02004759<
4760 Can also be used as a |method|: >
4761 GetFuncname()->function([arg])
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004762
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004763
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01004764garbagecollect([{atexit}]) *garbagecollect()*
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004765 Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs|
4766 that have circular references.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004767
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004768 There is hardly ever a need to invoke this function, as it is
4769 automatically done when Vim runs out of memory or is waiting
4770 for the user to press a key after 'updatetime'. Items without
4771 circular references are always freed when they become unused.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004772 This is useful if you have deleted a very big |List| and/or
4773 |Dictionary| with circular references in a script that runs
4774 for a long time.
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004775
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01004776 When the optional {atexit} argument is one, garbage
Bram Moolenaar9d2c8c12007-09-25 16:00:00 +00004777 collection will also be done when exiting Vim, if it wasn't
4778 done before. This is useful when checking for memory leaks.
Bram Moolenaar39a58ca2005-06-27 22:42:44 +00004779
Bram Moolenaar574860b2016-05-24 17:33:34 +02004780 The garbage collection is not done immediately but only when
4781 it's safe to perform. This is when waiting for the user to
4782 type a character. To force garbage collection immediately use
4783 |test_garbagecollect_now()|.
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004784
Bram Moolenaar677ee682005-01-27 14:41:15 +00004785get({list}, {idx} [, {default}]) *get()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004786 Get item {idx} from |List| {list}. When this item is not
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004787 available return {default}. Return zero when {default} is
4788 omitted.
Bram Moolenaarac92e252019-08-03 21:58:38 +02004789 Can also be used as a |method|: >
4790 mylist->get(idx)
Bram Moolenaard8968242019-01-15 22:51:57 +01004791get({blob}, {idx} [, {default}])
4792 Get byte {idx} from |Blob| {blob}. When this byte is not
4793 available return {default}. Return -1 when {default} is
4794 omitted.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004795get({dict}, {key} [, {default}])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004796 Get item with key {key} from |Dictionary| {dict}. When this
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004797 item is not available return {default}. Return zero when
Bram Moolenaar54775062019-07-31 21:07:14 +02004798 {default} is omitted. Useful example: >
4799 let val = get(g:, 'var_name', 'default')
4800< This gets the value of g:var_name if it exists, and uses
4801 'default' when it does not exist.
Bram Moolenaar03e19a02016-05-24 22:29:49 +02004802get({func}, {what})
4803 Get an item with from Funcref {func}. Possible values for
Bram Moolenaar2bbf8ef2016-05-24 18:37:12 +02004804 {what} are:
Bram Moolenaar214641f2017-03-05 17:04:09 +01004805 "name" The function name
4806 "func" The function
4807 "dict" The dictionary
4808 "args" The list with arguments
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004809
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004810 *getbufinfo()*
4811getbufinfo([{expr}])
4812getbufinfo([{dict}])
Bram Moolenaar58b85342016-08-14 19:54:54 +02004813 Get information about buffers as a List of Dictionaries.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004814
4815 Without an argument information about all the buffers is
4816 returned.
4817
4818 When the argument is a Dictionary only the buffers matching
4819 the specified criteria are returned. The following keys can
4820 be specified in {dict}:
4821 buflisted include only listed buffers.
4822 bufloaded include only loaded buffers.
Bram Moolenaar8e6a31d2017-12-10 21:06:22 +01004823 bufmodified include only modified buffers.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004824
4825 Otherwise, {expr} specifies a particular buffer to return
4826 information for. For the use of {expr}, see |bufname()|
4827 above. If the buffer is found the returned List has one item.
4828 Otherwise the result is an empty list.
4829
4830 Each returned List item is a dictionary with the following
4831 entries:
Bram Moolenaar33928832016-08-18 21:22:04 +02004832 bufnr buffer number.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004833 changed TRUE if the buffer is modified.
4834 changedtick number of changes made to the buffer.
4835 hidden TRUE if the buffer is hidden.
Bram Moolenaar52410572019-10-27 05:12:45 +01004836 lastused timestamp in seconds, like
4837 |localtime()|, when the buffer was
4838 last used.
4839 {only with the |+viminfo| feature}
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004840 listed TRUE if the buffer is listed.
4841 lnum current line number in buffer.
Bram Moolenaara9e96792019-12-17 22:40:15 +01004842 linecount number of lines in the buffer (only
4843 valid when loaded)
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004844 loaded TRUE if the buffer is loaded.
4845 name full path to the file in the buffer.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004846 signs list of signs placed in the buffer.
4847 Each list item is a dictionary with
4848 the following fields:
4849 id sign identifier
4850 lnum line number
4851 name sign name
Bram Moolenaar30567352016-08-27 21:25:44 +02004852 variables a reference to the dictionary with
4853 buffer-local variables.
4854 windows list of |window-ID|s that display this
4855 buffer
Bram Moolenaar5ca1ac32019-07-04 15:39:28 +02004856 popups list of popup |window-ID|s that
4857 display this buffer
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004858
4859 Examples: >
4860 for buf in getbufinfo()
4861 echo buf.name
4862 endfor
4863 for buf in getbufinfo({'buflisted':1})
Bram Moolenaar30567352016-08-27 21:25:44 +02004864 if buf.changed
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004865 ....
4866 endif
4867 endfor
4868<
Bram Moolenaar30567352016-08-27 21:25:44 +02004869 To get buffer-local options use: >
Bram Moolenaard473c8c2018-08-11 18:00:22 +02004870 getbufvar({bufnr}, '&option_name')
Bram Moolenaar30567352016-08-27 21:25:44 +02004871
4872<
Bram Moolenaar45360022005-07-21 21:08:21 +00004873 *getbufline()*
4874getbufline({expr}, {lnum} [, {end}])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004875 Return a |List| with the lines starting from {lnum} to {end}
4876 (inclusive) in the buffer {expr}. If {end} is omitted, a
4877 |List| with only the line {lnum} is returned.
Bram Moolenaar45360022005-07-21 21:08:21 +00004878
4879 For the use of {expr}, see |bufname()| above.
4880
Bram Moolenaar661b1822005-07-28 22:36:45 +00004881 For {lnum} and {end} "$" can be used for the last line of the
4882 buffer. Otherwise a number must be used.
Bram Moolenaar45360022005-07-21 21:08:21 +00004883
4884 When {lnum} is smaller than 1 or bigger than the number of
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004885 lines in the buffer, an empty |List| is returned.
Bram Moolenaar45360022005-07-21 21:08:21 +00004886
4887 When {end} is greater than the number of lines in the buffer,
4888 it is treated as {end} is set to the number of lines in the
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004889 buffer. When {end} is before {lnum} an empty |List| is
Bram Moolenaar45360022005-07-21 21:08:21 +00004890 returned.
4891
Bram Moolenaar661b1822005-07-28 22:36:45 +00004892 This function works only for loaded buffers. For unloaded and
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004893 non-existing buffers, an empty |List| is returned.
Bram Moolenaar45360022005-07-21 21:08:21 +00004894
4895 Example: >
4896 :let lines = getbufline(bufnr("myfile"), 1, "$")
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004897
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004898< Can also be used as a |method|: >
4899 GetBufnr()->getbufline(lnum)
4900
Bram Moolenaar63dbda12013-02-20 21:12:10 +01004901getbufvar({expr}, {varname} [, {def}]) *getbufvar()*
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004902 The result is the value of option or local buffer variable
4903 {varname} in buffer {expr}. Note that the name without "b:"
4904 must be used.
Bram Moolenaarc236c162008-07-13 17:41:49 +00004905 When {varname} is empty returns a dictionary with all the
4906 buffer-local variables.
Bram Moolenaar30567352016-08-27 21:25:44 +02004907 When {varname} is equal to "&" returns a dictionary with all
4908 the buffer-local options.
4909 Otherwise, when {varname} starts with "&" returns the value of
4910 a buffer-local option.
Bram Moolenaar4317d9b2005-03-18 20:25:31 +00004911 This also works for a global or buffer-local option, but it
4912 doesn't work for a global variable, window-local variable or
4913 window-local option.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004914 For the use of {expr}, see |bufname()| above.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01004915 When the buffer or variable doesn't exist {def} or an empty
4916 string is returned, there is no error message.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004917 Examples: >
4918 :let bufmodified = getbufvar(1, "&mod")
4919 :echo "todo myvar = " . getbufvar("todo", "myvar")
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004920
4921< Can also be used as a |method|: >
4922 GetBufnr()->getbufvar(varname)
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004923<
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004924getchangelist([{expr}]) *getchangelist()*
Bram Moolenaar07ad8162018-02-13 13:59:59 +01004925 Returns the |changelist| for the buffer {expr}. For the use
4926 of {expr}, see |bufname()| above. If buffer {expr} doesn't
4927 exist, an empty list is returned.
4928
4929 The returned list contains two entries: a list with the change
4930 locations and the current position in the list. Each
4931 entry in the change list is a dictionary with the following
4932 entries:
4933 col column number
4934 coladd column offset for 'virtualedit'
4935 lnum line number
4936 If buffer {expr} is the current buffer, then the current
4937 position refers to the position in the list. For other
4938 buffers, it is set to the length of the list.
4939
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004940 Can also be used as a |method|: >
4941 GetBufnr()->getchangelist()
4942
Bram Moolenaar071d4272004-06-13 20:20:40 +00004943getchar([expr]) *getchar()*
Bram Moolenaar91170f82006-05-05 21:15:17 +00004944 Get a single character from the user or input stream.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004945 If [expr] is omitted, wait until a character is available.
4946 If [expr] is 0, only get a character when one is available.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004947 Return zero otherwise.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004948 If [expr] is 1, only check if a character is available, it is
Bram Moolenaar91170f82006-05-05 21:15:17 +00004949 not consumed. Return zero if no character available.
4950
Bram Moolenaardfb18412013-12-11 18:53:29 +01004951 Without [expr] and when [expr] is 0 a whole character or
Bram Moolenaarc577d812017-07-08 22:37:34 +02004952 special key is returned. If it is a single character, the
Bram Moolenaar91170f82006-05-05 21:15:17 +00004953 result is a number. Use nr2char() to convert it to a String.
4954 Otherwise a String is returned with the encoded character.
Bram Moolenaarc577d812017-07-08 22:37:34 +02004955 For a special key it's a String with a sequence of bytes
4956 starting with 0x80 (decimal: 128). This is the same value as
4957 the String "\<Key>", e.g., "\<Left>". The returned value is
4958 also a String when a modifier (shift, control, alt) was used
4959 that is not included in the character.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004960
Bram Moolenaar822ff862014-06-12 21:46:14 +02004961 When [expr] is 0 and Esc is typed, there will be a short delay
4962 while Vim waits to see if this is the start of an escape
4963 sequence.
4964
Bram Moolenaardfb18412013-12-11 18:53:29 +01004965 When [expr] is 1 only the first byte is returned. For a
Bram Moolenaar56a907a2006-05-06 21:44:30 +00004966 one-byte character it is the character itself as a number.
4967 Use nr2char() to convert it to a String.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004968
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01004969 Use getcharmod() to obtain any additional modifiers.
4970
Bram Moolenaar219b8702006-11-01 14:32:36 +00004971 When the user clicks a mouse button, the mouse event will be
4972 returned. The position can then be found in |v:mouse_col|,
Bram Moolenaardb3a2052019-11-16 18:22:41 +01004973 |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|.
4974 |getmousepos()| can also be used. This example positions the
4975 mouse as it would normally happen: >
Bram Moolenaar219b8702006-11-01 14:32:36 +00004976 let c = getchar()
Bram Moolenaar446cb832008-06-24 21:56:24 +00004977 if c == "\<LeftMouse>" && v:mouse_win > 0
Bram Moolenaar219b8702006-11-01 14:32:36 +00004978 exe v:mouse_win . "wincmd w"
4979 exe v:mouse_lnum
4980 exe "normal " . v:mouse_col . "|"
4981 endif
4982<
Bram Moolenaar690afe12017-01-28 18:34:47 +01004983 When using bracketed paste only the first character is
4984 returned, the rest of the pasted text is dropped.
4985 |xterm-bracketed-paste|.
4986
Bram Moolenaar071d4272004-06-13 20:20:40 +00004987 There is no prompt, you will somehow have to make clear to the
4988 user that a character has to be typed.
4989 There is no mapping for the character.
4990 Key codes are replaced, thus when the user presses the <Del>
4991 key you get the code for the <Del> key, not the raw character
4992 sequence. Examples: >
4993 getchar() == "\<Del>"
4994 getchar() == "\<S-Left>"
4995< This example redefines "f" to ignore case: >
4996 :nmap f :call FindChar()<CR>
4997 :function FindChar()
4998 : let c = nr2char(getchar())
4999 : while col('.') < col('$') - 1
5000 : normal l
5001 : if getline('.')[col('.') - 1] ==? c
5002 : break
5003 : endif
5004 : endwhile
5005 :endfunction
Bram Moolenaared32d942014-12-06 23:33:00 +01005006<
Bram Moolenaar2b8388b2015-02-28 13:11:45 +01005007 You may also receive synthetic characters, such as
Bram Moolenaared32d942014-12-06 23:33:00 +01005008 |<CursorHold>|. Often you will want to ignore this and get
5009 another character: >
5010 :function GetKey()
5011 : let c = getchar()
5012 : while c == "\<CursorHold>"
5013 : let c = getchar()
5014 : endwhile
5015 : return c
5016 :endfunction
Bram Moolenaar071d4272004-06-13 20:20:40 +00005017
5018getcharmod() *getcharmod()*
5019 The result is a Number which is the state of the modifiers for
5020 the last obtained character with getchar() or in another way.
5021 These values are added together:
5022 2 shift
5023 4 control
5024 8 alt (meta)
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01005025 16 meta (when it's different from ALT)
5026 32 mouse double click
5027 64 mouse triple click
5028 96 mouse quadruple click (== 32 + 64)
5029 128 command (Macintosh only)
Bram Moolenaar071d4272004-06-13 20:20:40 +00005030 Only the modifiers that have not been included in the
Bram Moolenaar58b85342016-08-14 19:54:54 +02005031 character itself are obtained. Thus Shift-a results in "A"
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01005032 without a modifier.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005033
Bram Moolenaardbd24b52015-08-11 14:26:19 +02005034getcharsearch() *getcharsearch()*
5035 Return the current character search information as a {dict}
5036 with the following entries:
5037
5038 char character previously used for a character
5039 search (|t|, |f|, |T|, or |F|); empty string
5040 if no character search has been performed
5041 forward direction of character search; 1 for forward,
5042 0 for backward
5043 until type of character search; 1 for a |t| or |T|
5044 character search, 0 for an |f| or |F|
5045 character search
5046
5047 This can be useful to always have |;| and |,| search
5048 forward/backward regardless of the direction of the previous
5049 character search: >
5050 :nnoremap <expr> ; getcharsearch().forward ? ';' : ','
5051 :nnoremap <expr> , getcharsearch().forward ? ',' : ';'
5052< Also see |setcharsearch()|.
5053
Bram Moolenaar071d4272004-06-13 20:20:40 +00005054getcmdline() *getcmdline()*
5055 Return the current command-line. Only works when the command
5056 line is being edited, thus requires use of |c_CTRL-\_e| or
5057 |c_CTRL-R_=|.
5058 Example: >
5059 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005060< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
Bram Moolenaar95bafa22018-10-02 13:26:25 +02005061 Returns an empty string when entering a password or using
5062 |inputsecret()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005063
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00005064getcmdpos() *getcmdpos()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00005065 Return the position of the cursor in the command line as a
5066 byte count. The first column is 1.
5067 Only works when editing the command line, thus requires use of
Bram Moolenaar5b435d62012-04-05 17:33:26 +02005068 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
5069 Returns 0 otherwise.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005070 Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
5071
5072getcmdtype() *getcmdtype()*
5073 Return the current command-line type. Possible return values
5074 are:
Bram Moolenaar1e015462005-09-25 22:16:38 +00005075 : normal Ex command
5076 > debug mode command |debug-mode|
5077 / forward search command
5078 ? backward search command
5079 @ |input()| command
5080 - |:insert| or |:append| command
Bram Moolenaar6e932462014-09-09 18:48:09 +02005081 = |i_CTRL-R_=|
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005082 Only works when editing the command line, thus requires use of
Bram Moolenaar5b435d62012-04-05 17:33:26 +02005083 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
5084 Returns an empty string otherwise.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005085 Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005086
Bram Moolenaarfb539272014-08-22 19:21:47 +02005087getcmdwintype() *getcmdwintype()*
5088 Return the current |command-line-window| type. Possible return
5089 values are the same as |getcmdtype()|. Returns an empty string
5090 when not in the command-line window.
5091
Bram Moolenaare9d58a62016-08-13 15:07:41 +02005092getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005093 Return a list of command-line completion matches. {type}
5094 specifies what for. The following completion types are
5095 supported:
5096
Bram Moolenaarcd43eff2018-03-29 15:55:38 +02005097 arglist file names in argument list
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005098 augroup autocmd groups
5099 buffer buffer names
5100 behave :behave suboptions
5101 color color schemes
5102 command Ex command (and arguments)
5103 compiler compilers
5104 cscope |:cscope| suboptions
Bram Moolenaarae7dba82019-12-29 13:56:33 +01005105 diff_buffer |:diffget| and |:diffput| completion
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005106 dir directory names
5107 environment environment variable names
5108 event autocommand events
5109 expression Vim expression
5110 file file and directory names
5111 file_in_path file and directory names in |'path'|
5112 filetype filetype names |'filetype'|
5113 function function name
5114 help help subjects
5115 highlight highlight groups
5116 history :history suboptions
5117 locale locale names (as output of locale -a)
Bram Moolenaarcae92dc2017-08-06 15:22:15 +02005118 mapclear buffer argument
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005119 mapping mapping name
5120 menu menus
Bram Moolenaar9e507ca2016-10-15 15:39:39 +02005121 messages |:messages| suboptions
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005122 option options
Bram Moolenaar9e507ca2016-10-15 15:39:39 +02005123 packadd optional package |pack-add| names
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005124 shellcmd Shell command
5125 sign |:sign| suboptions
5126 syntax syntax file names |'syntax'|
5127 syntime |:syntime| suboptions
5128 tag tags
5129 tag_listfiles tags, file names
5130 user user names
5131 var user variables
5132
5133 If {pat} is an empty string, then all the matches are returned.
5134 Otherwise only items matching {pat} are returned. See
5135 |wildcards| for the use of special characters in {pat}.
5136
Bram Moolenaare9d58a62016-08-13 15:07:41 +02005137 If the optional {filtered} flag is set to 1, then 'wildignore'
5138 is applied to filter the results. Otherwise all the matches
5139 are returned. The 'wildignorecase' option always applies.
5140
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005141 If there are no matches, an empty list is returned. An
5142 invalid value for {type} produces an error.
5143
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005144 Can also be used as a |method|: >
5145 GetPattern()->getcompletion('color')
5146<
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02005147 *getcurpos()*
5148getcurpos() Get the position of the cursor. This is like getpos('.'), but
Bram Moolenaard1caa942020-04-10 22:10:56 +02005149 includes an extra "curswant" item in the list:
5150 [0, lnum, col, off, curswant] ~
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02005151 The "curswant" number is the preferred column when moving the
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005152 cursor vertically. Also see |getpos()|.
Bram Moolenaard1caa942020-04-10 22:10:56 +02005153 The first "bufnum" item is always zero.
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005154
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02005155 This can be used to save and restore the cursor position: >
5156 let save_cursor = getcurpos()
5157 MoveTheCursorAround
5158 call setpos('.', save_cursor)
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005159< Note that this only works within the window. See
5160 |winrestview()| for restoring more state.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005161 *getcwd()*
Bram Moolenaarc9703302016-01-17 21:49:33 +01005162getcwd([{winnr} [, {tabnr}]])
5163 The result is a String, which is the name of the current
Bram Moolenaar071d4272004-06-13 20:20:40 +00005164 working directory.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005165
5166 With {winnr} return the local current directory of this window
Bram Moolenaar54591292018-02-09 20:53:59 +01005167 in the current tab page. {winnr} can be the window number or
5168 the |window-ID|.
5169 If {winnr} is -1 return the name of the global working
5170 directory. See also |haslocaldir()|.
5171
Bram Moolenaarc9703302016-01-17 21:49:33 +01005172 With {winnr} and {tabnr} return the local current directory of
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005173 the window in the specified tab page. If {winnr} is -1 return
5174 the working directory of the tabpage.
5175 If {winnr} is zero use the current window, if {tabnr} is zero
5176 use the current tabpage.
5177 Without any arguments, return the working directory of the
5178 current window.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005179 Return an empty string if the arguments are invalid.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005180
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005181 Examples: >
5182 " Get the working directory of the current window
5183 :echo getcwd()
5184 :echo getcwd(0)
5185 :echo getcwd(0, 0)
5186 " Get the working directory of window 3 in tabpage 2
5187 :echo getcwd(3, 2)
5188 " Get the global working directory
5189 :echo getcwd(-1)
5190 " Get the working directory of tabpage 3
5191 :echo getcwd(-1, 3)
5192 " Get the working directory of current tabpage
5193 :echo getcwd(-1, 0)
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005194
5195< Can also be used as a |method|: >
5196 GetWinnr()->getcwd()
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005197<
Bram Moolenaar691ddee2019-05-09 14:52:41 +02005198getenv({name}) *getenv()*
5199 Return the value of environment variable {name}.
5200 When the variable does not exist |v:null| is returned. That
Bram Moolenaar54775062019-07-31 21:07:14 +02005201 is different from a variable set to an empty string, although
5202 some systems interpret the empty value as the variable being
5203 deleted. See also |expr-env|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005204
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005205 Can also be used as a |method|: >
5206 GetVarname()->getenv()
5207
Bram Moolenaard8b0cf12004-12-12 11:33:30 +00005208getfontname([{name}]) *getfontname()*
5209 Without an argument returns the name of the normal font being
5210 used. Like what is used for the Normal highlight group
5211 |hl-Normal|.
5212 With an argument a check is done whether {name} is a valid
5213 font name. If not then an empty string is returned.
5214 Otherwise the actual font name is returned, or {name} if the
5215 GUI does not support obtaining the real name.
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00005216 Only works when the GUI is running, thus not in your vimrc or
Bram Moolenaard8b0cf12004-12-12 11:33:30 +00005217 gvimrc file. Use the |GUIEnter| autocommand to use this
5218 function just after the GUI has started.
Bram Moolenaar3df01732017-02-17 22:47:16 +01005219 Note that the GTK GUI accepts any font name, thus checking for
5220 a valid name does not work.
Bram Moolenaard8b0cf12004-12-12 11:33:30 +00005221
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005222getfperm({fname}) *getfperm()*
5223 The result is a String, which is the read, write, and execute
5224 permissions of the given file {fname}.
5225 If {fname} does not exist or its directory cannot be read, an
5226 empty string is returned.
5227 The result is of the form "rwxrwxrwx", where each group of
5228 "rwx" flags represent, in turn, the permissions of the owner
5229 of the file, the group the file belongs to, and other users.
5230 If a user does not have a given permission the flag for this
Bram Moolenaar9b451252012-08-15 17:43:31 +02005231 is replaced with the string "-". Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005232 :echo getfperm("/etc/passwd")
Bram Moolenaar9b451252012-08-15 17:43:31 +02005233 :echo getfperm(expand("~/.vimrc"))
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005234< This will hopefully (from a security point of view) display
5235 the string "rw-r--r--" or even "rw-------".
Bram Moolenaare2cc9702005-03-15 22:43:58 +00005236
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005237 Can also be used as a |method|: >
5238 GetFilename()->getfperm()
5239<
Bram Moolenaar2ec618c2016-10-01 14:47:05 +02005240 For setting permissions use |setfperm()|.
Bram Moolenaar80492532016-03-08 17:08:53 +01005241
Bram Moolenaar691ddee2019-05-09 14:52:41 +02005242getfsize({fname}) *getfsize()*
5243 The result is a Number, which is the size in bytes of the
5244 given file {fname}.
5245 If {fname} is a directory, 0 is returned.
5246 If the file {fname} can't be found, -1 is returned.
5247 If the size of {fname} is too big to fit in a Number then -2
5248 is returned.
5249
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005250 Can also be used as a |method|: >
5251 GetFilename()->getfsize()
5252
Bram Moolenaar071d4272004-06-13 20:20:40 +00005253getftime({fname}) *getftime()*
5254 The result is a Number, which is the last modification time of
5255 the given file {fname}. The value is measured as seconds
5256 since 1st Jan 1970, and may be passed to strftime(). See also
5257 |localtime()| and |strftime()|.
5258 If the file {fname} can't be found -1 is returned.
5259
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005260 Can also be used as a |method|: >
5261 GetFilename()->getftime()
5262
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005263getftype({fname}) *getftype()*
5264 The result is a String, which is a description of the kind of
5265 file of the given file {fname}.
5266 If {fname} does not exist an empty string is returned.
5267 Here is a table over different kinds of files and their
5268 results:
5269 Normal file "file"
5270 Directory "dir"
5271 Symbolic link "link"
5272 Block device "bdev"
5273 Character device "cdev"
5274 Socket "socket"
5275 FIFO "fifo"
5276 All other "other"
5277 Example: >
5278 getftype("/home")
5279< Note that a type such as "link" will only be returned on
5280 systems that support it. On some systems only "dir" and
Bram Moolenaar13d5aee2016-01-21 23:36:05 +01005281 "file" are returned. On MS-Windows a symbolic link to a
5282 directory returns "dir" instead of "link".
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005283
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005284 Can also be used as a |method|: >
5285 GetFilename()->getftype()
5286
Bram Moolenaara3a12462019-09-07 15:08:38 +02005287getimstatus() *getimstatus()*
5288 The result is a Number, which is |TRUE| when the IME status is
5289 active.
5290 See 'imstatusfunc'.
5291
Bram Moolenaard96ff162018-02-18 22:13:29 +01005292getjumplist([{winnr} [, {tabnr}]]) *getjumplist()*
Bram Moolenaar4f505882018-02-10 21:06:32 +01005293 Returns the |jumplist| for the specified window.
5294
5295 Without arguments use the current window.
5296 With {winnr} only use this window in the current tab page.
5297 {winnr} can also be a |window-ID|.
5298 With {winnr} and {tabnr} use the window in the specified tab
5299 page.
5300
5301 The returned list contains two entries: a list with the jump
5302 locations and the last used jump position number in the list.
5303 Each entry in the jump location list is a dictionary with
5304 the following entries:
5305 bufnr buffer number
5306 col column number
5307 coladd column offset for 'virtualedit'
5308 filename filename if available
5309 lnum line number
5310
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005311 Can also be used as a |method|: >
5312 GetWinnr()->getjumplist()
5313
5314< *getline()*
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005315getline({lnum} [, {end}])
5316 Without {end} the result is a String, which is line {lnum}
5317 from the current buffer. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005318 getline(1)
5319< When {lnum} is a String that doesn't start with a
Bram Moolenaarf2732452018-06-03 14:47:35 +02005320 digit, |line()| is called to translate the String into a Number.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005321 To get the line under the cursor: >
5322 getline(".")
5323< When {lnum} is smaller than 1 or bigger than the number of
5324 lines in the buffer, an empty string is returned.
5325
Bram Moolenaar32466aa2006-02-24 23:53:04 +00005326 When {end} is given the result is a |List| where each item is
5327 a line from the current buffer in the range {lnum} to {end},
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005328 including line {end}.
5329 {end} is used in the same way as {lnum}.
5330 Non-existing lines are silently omitted.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00005331 When {end} is before {lnum} an empty |List| is returned.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005332 Example: >
5333 :let start = line('.')
5334 :let end = search("^$") - 1
5335 :let lines = getline(start, end)
5336
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005337< Can also be used as a |method|: >
5338 ComputeLnum()->getline()
5339
Bram Moolenaaref2f6562007-05-06 13:32:59 +00005340< To get lines from another buffer see |getbufline()|
5341
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01005342getloclist({nr} [, {what}]) *getloclist()*
Bram Moolenaar17c7c012006-01-26 22:25:15 +00005343 Returns a list with all the entries in the location list for
Bram Moolenaar7571d552016-08-18 22:54:46 +02005344 window {nr}. {nr} can be the window number or the |window-ID|.
Bram Moolenaar888ccac2016-06-04 18:49:36 +02005345 When {nr} is zero the current window is used.
5346
Bram Moolenaar17c7c012006-01-26 22:25:15 +00005347 For a location list window, the displayed location list is
Bram Moolenaar280f1262006-01-30 00:14:18 +00005348 returned. For an invalid window number {nr}, an empty list is
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01005349 returned. Otherwise, same as |getqflist()|.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005350
Bram Moolenaard823fa92016-08-12 16:29:27 +02005351 If the optional {what} dictionary argument is supplied, then
5352 returns the items listed in {what} as a dictionary. Refer to
5353 |getqflist()| for the supported items in {what}.
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005354
5355 In addition to the items supported by |getqflist()| in {what},
5356 the following item is supported by |getloclist()|:
5357
Bram Moolenaar68e65602019-05-26 21:33:31 +02005358 filewinid id of the window used to display files
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005359 from the location list. This field is
5360 applicable only when called from a
5361 location list window. See
5362 |location-list-file-window| for more
5363 details.
Bram Moolenaard823fa92016-08-12 16:29:27 +02005364
Bram Moolenaaraff74912019-03-30 18:11:49 +01005365getmatches([{win}]) *getmatches()*
Bram Moolenaarfd133322019-03-29 12:20:27 +01005366 Returns a |List| with all matches previously defined for the
5367 current window by |matchadd()| and the |:match| commands.
5368 |getmatches()| is useful in combination with |setmatches()|,
5369 as |setmatches()| can restore a list of matches saved by
5370 |getmatches()|.
Bram Moolenaar6ee10162007-07-26 20:58:42 +00005371 Example: >
5372 :echo getmatches()
5373< [{'group': 'MyGroup1', 'pattern': 'TODO',
5374 'priority': 10, 'id': 1}, {'group': 'MyGroup2',
5375 'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
5376 :let m = getmatches()
5377 :call clearmatches()
5378 :echo getmatches()
5379< [] >
5380 :call setmatches(m)
5381 :echo getmatches()
5382< [{'group': 'MyGroup1', 'pattern': 'TODO',
5383 'priority': 10, 'id': 1}, {'group': 'MyGroup2',
5384 'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
5385 :unlet m
5386<
Bram Moolenaardb3a2052019-11-16 18:22:41 +01005387getmousepos() *getmousepos()*
5388 Returns a Dictionary with the last known position of the
5389 mouse. This can be used in a mapping for a mouse click or in
5390 a filter of a popup window. The items are:
5391 screenrow screen row
5392 screencol screen column
5393 winid Window ID of the click
5394 winrow row inside "winid"
5395 wincol column inside "winid"
5396 line text line inside "winid"
5397 column text column inside "winid"
5398 All numbers are 1-based.
5399
5400 If not over a window, e.g. when in the command line, then only
5401 "screenrow" and "screencol" are valid, the others are zero.
5402
5403 When on the status line below a window or the vertical
5404 separater right of a window, the "line" and "column" values
5405 are zero.
5406
5407 When the position is after the text then "column" is the
5408 length of the text in bytes.
5409
5410 If the mouse is over a popup window then that window is used.
5411
5412
5413 When using |getchar()| the Vim variables |v:mouse_lnum|,
5414 |v:mouse_col| and |v:mouse_winid| also provide these values.
5415
Bram Moolenaar822ff862014-06-12 21:46:14 +02005416 *getpid()*
5417getpid() Return a Number which is the process ID of the Vim process.
5418 On Unix and MS-Windows this is a unique number, until Vim
Bram Moolenaar5666fcd2019-12-26 14:35:26 +01005419 exits.
Bram Moolenaar822ff862014-06-12 21:46:14 +02005420
5421 *getpos()*
5422getpos({expr}) Get the position for {expr}. For possible values of {expr}
5423 see |line()|. For getting the cursor position see
5424 |getcurpos()|.
5425 The result is a |List| with four numbers:
5426 [bufnum, lnum, col, off]
5427 "bufnum" is zero, unless a mark like '0 or 'A is used, then it
5428 is the buffer number of the mark.
5429 "lnum" and "col" are the position in the buffer. The first
5430 column is 1.
5431 The "off" number is zero, unless 'virtualedit' is used. Then
5432 it is the offset in screen columns from the start of the
5433 character. E.g., a position within a <Tab> or after the last
5434 character.
5435 Note that for '< and '> Visual mode matters: when it is "V"
5436 (visual line mode) the column of '< is zero and the column of
5437 '> is a large number.
5438 This can be used to save and restore the position of a mark: >
5439 let save_a_mark = getpos("'a")
5440 ...
Bram Moolenaared32d942014-12-06 23:33:00 +01005441 call setpos("'a", save_a_mark)
Bram Moolenaar822ff862014-06-12 21:46:14 +02005442< Also see |getcurpos()| and |setpos()|.
5443
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005444 Can also be used as a |method|: >
5445 GetMark()->getpos()
5446
Bram Moolenaar6ee10162007-07-26 20:58:42 +00005447
Bram Moolenaard823fa92016-08-12 16:29:27 +02005448getqflist([{what}]) *getqflist()*
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005449 Returns a list with all the current quickfix errors. Each
5450 list item is a dictionary with these entries:
5451 bufnr number of buffer that has the file name, use
5452 bufname() to get the name
Bram Moolenaard76ce852018-05-01 15:02:04 +02005453 module module name
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005454 lnum line number in the buffer (first line is 1)
5455 col column number (first column is 1)
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005456 vcol |TRUE|: "col" is visual column
5457 |FALSE|: "col" is byte index
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005458 nr error number
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00005459 pattern search pattern used to locate the error
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005460 text description of the error
5461 type type of the error, 'E', '1', etc.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005462 valid |TRUE|: recognized error message
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005463
Bram Moolenaar7571d552016-08-18 22:54:46 +02005464 When there is no error list or it's empty, an empty list is
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00005465 returned. Quickfix list entries with non-existing buffer
5466 number are returned with "bufnr" set to zero.
Bram Moolenaare7eb9df2005-09-09 19:49:30 +00005467
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005468 Useful application: Find pattern matches in multiple files and
5469 do something with them: >
5470 :vimgrep /theword/jg *.c
5471 :for d in getqflist()
5472 : echo bufname(d.bufnr) ':' d.lnum '=' d.text
5473 :endfor
Bram Moolenaard823fa92016-08-12 16:29:27 +02005474<
5475 If the optional {what} dictionary argument is supplied, then
5476 returns only the items listed in {what} as a dictionary. The
5477 following string items are supported in {what}:
Bram Moolenaarb254af32017-12-18 19:48:58 +01005478 changedtick get the total number of changes made
Bram Moolenaar15142e22018-04-30 22:19:58 +02005479 to the list |quickfix-changedtick|
5480 context get the |quickfix-context|
Bram Moolenaar36538222017-09-02 19:51:44 +02005481 efm errorformat to use when parsing "lines". If
Bram Moolenaar2f058492017-11-30 20:27:52 +01005482 not present, then the 'errorformat' option
Bram Moolenaar36538222017-09-02 19:51:44 +02005483 value is used.
Bram Moolenaara539f4f2017-08-30 20:33:55 +02005484 id get information for the quickfix list with
5485 |quickfix-ID|; zero means the id for the
Bram Moolenaar2f058492017-11-30 20:27:52 +01005486 current list or the list specified by "nr"
Bram Moolenaar5b69c222019-01-11 14:50:06 +01005487 idx index of the current entry in the quickfix
5488 list specified by 'id' or 'nr'.
5489 See |quickfix-index|
Bram Moolenaar6a8958d2017-06-22 21:33:20 +02005490 items quickfix list entries
Bram Moolenaar15142e22018-04-30 22:19:58 +02005491 lines parse a list of lines using 'efm' and return
5492 the resulting entries. Only a |List| type is
5493 accepted. The current quickfix list is not
5494 modified. See |quickfix-parse|.
Bram Moolenaar890680c2016-09-27 21:28:56 +02005495 nr get information for this quickfix list; zero
Bram Moolenaar36538222017-09-02 19:51:44 +02005496 means the current quickfix list and "$" means
Bram Moolenaar875feea2017-06-11 16:07:51 +02005497 the last quickfix list
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005498 qfbufnr number of the buffer displayed in the quickfix
5499 window. Returns 0 if the quickfix buffer is
5500 not present. See |quickfix-buffer|.
Bram Moolenaarfc2b2702017-09-15 22:43:07 +02005501 size number of entries in the quickfix list
Bram Moolenaar15142e22018-04-30 22:19:58 +02005502 title get the list title |quickfix-title|
Bram Moolenaar74240d32017-12-10 15:26:15 +01005503 winid get the quickfix |window-ID|
Bram Moolenaard823fa92016-08-12 16:29:27 +02005504 all all of the above quickfix properties
Bram Moolenaar74240d32017-12-10 15:26:15 +01005505 Non-string items in {what} are ignored. To get the value of a
Bram Moolenaara6d48492017-12-12 22:45:31 +01005506 particular item, set it to zero.
Bram Moolenaard823fa92016-08-12 16:29:27 +02005507 If "nr" is not present then the current quickfix list is used.
Bram Moolenaara539f4f2017-08-30 20:33:55 +02005508 If both "nr" and a non-zero "id" are specified, then the list
5509 specified by "id" is used.
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02005510 To get the number of lists in the quickfix stack, set "nr" to
5511 "$" in {what}. The "nr" value in the returned dictionary
Bram Moolenaar875feea2017-06-11 16:07:51 +02005512 contains the quickfix stack size.
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02005513 When "lines" is specified, all the other items except "efm"
5514 are ignored. The returned dictionary contains the entry
5515 "items" with the list of entries.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005516
Bram Moolenaard823fa92016-08-12 16:29:27 +02005517 The returned dictionary contains the following entries:
Bram Moolenaarb254af32017-12-18 19:48:58 +01005518 changedtick total number of changes made to the
5519 list |quickfix-changedtick|
Bram Moolenaar15142e22018-04-30 22:19:58 +02005520 context quickfix list context. See |quickfix-context|
Bram Moolenaara6d48492017-12-12 22:45:31 +01005521 If not present, set to "".
5522 id quickfix list ID |quickfix-ID|. If not
5523 present, set to 0.
5524 idx index of the current entry in the list. If not
5525 present, set to 0.
5526 items quickfix list entries. If not present, set to
5527 an empty list.
5528 nr quickfix list number. If not present, set to 0
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005529 qfbufnr number of the buffer displayed in the quickfix
5530 window. If not present, set to 0.
Bram Moolenaara6d48492017-12-12 22:45:31 +01005531 size number of entries in the quickfix list. If not
5532 present, set to 0.
5533 title quickfix list title text. If not present, set
5534 to "".
Bram Moolenaar74240d32017-12-10 15:26:15 +01005535 winid quickfix |window-ID|. If not present, set to 0
Bram Moolenaard823fa92016-08-12 16:29:27 +02005536
Bram Moolenaar15142e22018-04-30 22:19:58 +02005537 Examples (See also |getqflist-examples|): >
Bram Moolenaard823fa92016-08-12 16:29:27 +02005538 :echo getqflist({'all': 1})
5539 :echo getqflist({'nr': 2, 'title': 1})
Bram Moolenaar2c809b72017-09-01 18:34:02 +02005540 :echo getqflist({'lines' : ["F1:10:L10"]})
Bram Moolenaard823fa92016-08-12 16:29:27 +02005541<
Bram Moolenaarb7cb42b2014-04-02 19:55:10 +02005542getreg([{regname} [, 1 [, {list}]]]) *getreg()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00005543 The result is a String, which is the contents of register
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00005544 {regname}. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005545 :let cliptext = getreg('*')
Bram Moolenaardc1f1642016-08-16 18:33:43 +02005546< When {regname} was not set the result is an empty string.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005547
5548 getreg('=') returns the last evaluated value of the expression
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00005549 register. (For use in maps.)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00005550 getreg('=', 1) returns the expression itself, so that it can
5551 be restored with |setreg()|. For other registers the extra
5552 argument is ignored, thus you can always give it.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005553
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005554 If {list} is present and |TRUE|, the result type is changed
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005555 to |List|. Each list item is one text line. Use it if you care
Bram Moolenaarb7cb42b2014-04-02 19:55:10 +02005556 about zero bytes possibly present inside register: without
5557 third argument both NLs and zero bytes are represented as NLs
5558 (see |NL-used-for-Nul|).
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005559 When the register was not set an empty list is returned.
5560
Bram Moolenaar071d4272004-06-13 20:20:40 +00005561 If {regname} is not specified, |v:register| is used.
5562
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005563 Can also be used as a |method|: >
5564 GetRegname()->getreg()
5565
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005566
Bram Moolenaar071d4272004-06-13 20:20:40 +00005567getregtype([{regname}]) *getregtype()*
5568 The result is a String, which is type of register {regname}.
5569 The value will be one of:
5570 "v" for |characterwise| text
5571 "V" for |linewise| text
5572 "<CTRL-V>{width}" for |blockwise-visual| text
Bram Moolenaar32b92012014-01-14 12:33:36 +01005573 "" for an empty or unknown register
Bram Moolenaar071d4272004-06-13 20:20:40 +00005574 <CTRL-V> is one character with value 0x16.
5575 If {regname} is not specified, |v:register| is used.
5576
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005577 Can also be used as a |method|: >
5578 GetRegname()->getregtype()
5579
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02005580gettabinfo([{arg}]) *gettabinfo()*
5581 If {arg} is not specified, then information about all the tab
5582 pages is returned as a List. Each List item is a Dictionary.
5583 Otherwise, {arg} specifies the tab page number and information
5584 about that one is returned. If the tab page does not exist an
5585 empty List is returned.
5586
5587 Each List item is a Dictionary with the following entries:
Bram Moolenaar7571d552016-08-18 22:54:46 +02005588 tabnr tab page number.
Bram Moolenaar30567352016-08-27 21:25:44 +02005589 variables a reference to the dictionary with
5590 tabpage-local variables
Bram Moolenaarf6b40102019-02-22 15:24:03 +01005591 windows List of |window-ID|s in the tab page.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02005592
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005593 Can also be used as a |method|: >
5594 GetTabnr()->gettabinfo()
5595
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005596gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
Bram Moolenaar06b5d512010-05-22 15:37:44 +02005597 Get the value of a tab-local variable {varname} in tab page
5598 {tabnr}. |t:var|
5599 Tabs are numbered starting with one.
Bram Moolenaar0e2ea1b2014-09-09 16:13:08 +02005600 When {varname} is empty a dictionary with all tab-local
5601 variables is returned.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02005602 Note that the name without "t:" must be used.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005603 When the tab or variable doesn't exist {def} or an empty
5604 string is returned, there is no error message.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02005605
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005606 Can also be used as a |method|: >
5607 GetTabnr()->gettabvar(varname)
5608
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005609gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
Bram Moolenaaref2f6562007-05-06 13:32:59 +00005610 Get the value of window-local variable {varname} in window
5611 {winnr} in tab page {tabnr}.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005612 When {varname} is empty a dictionary with all window-local
5613 variables is returned.
Bram Moolenaar30567352016-08-27 21:25:44 +02005614 When {varname} is equal to "&" get the values of all
5615 window-local options in a Dictionary.
5616 Otherwise, when {varname} starts with "&" get the value of a
5617 window-local option.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005618 Note that {varname} must be the name without "w:".
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005619 Tabs are numbered starting with one. For the current tabpage
5620 use |getwinvar()|.
Bram Moolenaar7571d552016-08-18 22:54:46 +02005621 {winnr} can be the window number or the |window-ID|.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005622 When {winnr} is zero the current window is used.
5623 This also works for a global option, buffer-local option and
5624 window-local option, but it doesn't work for a global variable
5625 or buffer-local variable.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005626 When the tab, window or variable doesn't exist {def} or an
5627 empty string is returned, there is no error message.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005628 Examples: >
5629 :let list_is_on = gettabwinvar(1, 2, '&list')
5630 :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
Bram Moolenaard46bbc72007-05-12 14:38:41 +00005631<
Bram Moolenaarb477af22018-07-15 20:20:18 +02005632 To obtain all window-local variables use: >
5633 gettabwinvar({tabnr}, {winnr}, '&')
5634
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005635< Can also be used as a |method|: >
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005636 GetTabnr()->gettabwinvar(winnr, varname)
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005637
Bram Moolenaarf49cc602018-11-11 15:21:05 +01005638gettagstack([{nr}]) *gettagstack()*
5639 The result is a Dict, which is the tag stack of window {nr}.
5640 {nr} can be the window number or the |window-ID|.
5641 When {nr} is not specified, the current window is used.
5642 When window {nr} doesn't exist, an empty Dict is returned.
5643
5644 The returned dictionary contains the following entries:
5645 curidx Current index in the stack. When at
5646 top of the stack, set to (length + 1).
5647 Index of bottom of the stack is 1.
5648 items List of items in the stack. Each item
5649 is a dictionary containing the
5650 entries described below.
5651 length Number of entries in the stack.
5652
5653 Each item in the stack is a dictionary with the following
5654 entries:
5655 bufnr buffer number of the current jump
5656 from cursor position before the tag jump.
5657 See |getpos()| for the format of the
5658 returned list.
5659 matchnr current matching tag number. Used when
5660 multiple matching tags are found for a
5661 name.
5662 tagname name of the tag
5663
5664 See |tagstack| for more information about the tag stack.
5665
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005666 Can also be used as a |method|: >
5667 GetWinnr()->gettagstack()
5668
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005669getwininfo([{winid}]) *getwininfo()*
5670 Returns information about windows as a List with Dictionaries.
5671
5672 If {winid} is given Information about the window with that ID
5673 is returned. If the window does not exist the result is an
5674 empty list.
5675
5676 Without {winid} information about all the windows in all the
5677 tab pages is returned.
5678
5679 Each List item is a Dictionary with the following entries:
Bram Moolenaar8fcb60f2019-03-04 13:18:30 +01005680 botline last displayed buffer line
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005681 bufnr number of buffer in the window
5682 height window height (excluding winbar)
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005683 loclist 1 if showing a location list
5684 {only with the +quickfix feature}
5685 quickfix 1 if quickfix or location list window
5686 {only with the +quickfix feature}
5687 terminal 1 if a terminal window
5688 {only with the +terminal feature}
5689 tabnr tab page number
Bram Moolenaar10455d42019-11-21 15:36:18 +01005690 topline first displayed buffer line
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005691 variables a reference to the dictionary with
5692 window-local variables
5693 width window width
Bram Moolenaarb477af22018-07-15 20:20:18 +02005694 winbar 1 if the window has a toolbar, 0
5695 otherwise
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005696 wincol leftmost screen column of the window,
5697 col from |win_screenpos()|
5698 winid |window-ID|
5699 winnr window number
5700 winrow topmost screen column of the window,
5701 row from |win_screenpos()|
5702
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005703 Can also be used as a |method|: >
5704 GetWinnr()->getwininfo()
5705
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005706getwinpos([{timeout}]) *getwinpos()*
Bram Moolenaar560979e2020-02-04 22:53:05 +01005707 The result is a List with two numbers, the result of
Bram Moolenaar10455d42019-11-21 15:36:18 +01005708 |getwinposx()| and |getwinposy()| combined:
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005709 [x-pos, y-pos]
5710 {timeout} can be used to specify how long to wait in msec for
5711 a response from the terminal. When omitted 100 msec is used.
Bram Moolenaarb5b75622018-03-09 22:22:21 +01005712 Use a longer time for a remote terminal.
5713 When using a value less than 10 and no response is received
5714 within that time, a previously reported position is returned,
5715 if available. This can be used to poll for the position and
Bram Moolenaar5b69c222019-01-11 14:50:06 +01005716 do some work in the meantime: >
Bram Moolenaarb5b75622018-03-09 22:22:21 +01005717 while 1
5718 let res = getwinpos(1)
5719 if res[0] >= 0
5720 break
5721 endif
5722 " Do some work here
5723 endwhile
5724<
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005725
5726 Can also be used as a |method|: >
5727 GetTimeout()->getwinpos()
5728<
Bram Moolenaar071d4272004-06-13 20:20:40 +00005729 *getwinposx()*
5730getwinposx() The result is a Number, which is the X coordinate in pixels of
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005731 the left hand side of the GUI Vim window. Also works for an
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005732 xterm (uses a timeout of 100 msec).
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005733 The result will be -1 if the information is not available.
5734 The value can be used with `:winpos`.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005735
5736 *getwinposy()*
5737getwinposy() The result is a Number, which is the Y coordinate in pixels of
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005738 the top of the GUI Vim window. Also works for an xterm (uses
5739 a timeout of 100 msec).
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005740 The result will be -1 if the information is not available.
5741 The value can be used with `:winpos`.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005742
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005743getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005744 Like |gettabwinvar()| for the current tabpage.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005745 Examples: >
5746 :let list_is_on = getwinvar(2, '&list')
5747 :echo "myvar = " . getwinvar(1, 'myvar')
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005748
5749< Can also be used as a |method|: >
5750 GetWinnr()->getwinvar(varname)
Bram Moolenaar071d4272004-06-13 20:20:40 +00005751<
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005752glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()*
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005753 Expand the file wildcards in {expr}. See |wildcards| for the
Bram Moolenaaref2f6562007-05-06 13:32:59 +00005754 use of special characters.
Bram Moolenaar84f72352012-03-11 15:57:40 +01005755
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005756 Unless the optional {nosuf} argument is given and is |TRUE|,
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005757 the 'suffixes' and 'wildignore' options apply: Names matching
5758 one of the patterns in 'wildignore' will be skipped and
5759 'suffixes' affect the ordering of matches.
Bram Moolenaar81af9252010-12-10 20:35:50 +01005760 'wildignorecase' always applies.
Bram Moolenaar84f72352012-03-11 15:57:40 +01005761
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005762 When {list} is present and it is |TRUE| the result is a List
Bram Moolenaar84f72352012-03-11 15:57:40 +01005763 with all matching files. The advantage of using a List is,
5764 you also get filenames containing newlines correctly.
5765 Otherwise the result is a String and when there are several
5766 matches, they are separated by <NL> characters.
5767
5768 If the expansion fails, the result is an empty String or List.
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005769
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02005770 You can also use |readdir()| if you need to do complicated
5771 things, such as limiting the number of matches.
5772
Bram Moolenaar61d35bd2012-03-28 20:51:51 +02005773 A name for a non-existing file is not included. A symbolic
5774 link is only included if it points to an existing file.
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005775 However, when the {alllinks} argument is present and it is
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005776 |TRUE| then all symbolic links are included.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005777
5778 For most systems backticks can be used to get files names from
5779 any external command. Example: >
5780 :let tagfiles = glob("`find . -name tags -print`")
5781 :let &tags = substitute(tagfiles, "\n", ",", "g")
5782< The result of the program inside the backticks should be one
Bram Moolenaar58b85342016-08-14 19:54:54 +02005783 item per line. Spaces inside an item are allowed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005784
5785 See |expand()| for expanding special Vim variables. See
5786 |system()| for getting the raw output of an external command.
5787
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005788 Can also be used as a |method|: >
5789 GetExpr()->glob()
5790
Bram Moolenaar5837f1f2015-03-21 18:06:14 +01005791glob2regpat({expr}) *glob2regpat()*
5792 Convert a file pattern, as used by glob(), into a search
5793 pattern. The result can be used to match with a string that
5794 is a file name. E.g. >
5795 if filename =~ glob2regpat('Make*.mak')
5796< This is equivalent to: >
5797 if filename =~ '^Make.*\.mak$'
Bram Moolenaar3b5f9292016-01-28 22:37:01 +01005798< When {expr} is an empty string the result is "^$", match an
5799 empty string.
Bram Moolenaard823fa92016-08-12 16:29:27 +02005800 Note that the result depends on the system. On MS-Windows
Bram Moolenaar58b85342016-08-14 19:54:54 +02005801 a backslash usually means a path separator.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +01005802
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005803 Can also be used as a |method|: >
5804 GetExpr()->glob2regpat()
5805< *globpath()*
Bram Moolenaar6463ca22016-02-13 17:04:46 +01005806globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02005807 Perform glob() for {expr} on all directories in {path} and
5808 concatenate the results. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005809 :echo globpath(&rtp, "syntax/c.vim")
Bram Moolenaar1b1063a2014-05-07 18:35:30 +02005810<
5811 {path} is a comma-separated list of directory names. Each
Bram Moolenaar071d4272004-06-13 20:20:40 +00005812 directory name is prepended to {expr} and expanded like with
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005813 |glob()|. A path separator is inserted when needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005814 To add a comma inside a directory name escape it with a
5815 backslash. Note that on MS-Windows a directory may have a
5816 trailing backslash, remove it if you put a comma after it.
5817 If the expansion fails for one of the directories, there is no
5818 error message.
Bram Moolenaar1b1063a2014-05-07 18:35:30 +02005819
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005820 Unless the optional {nosuf} argument is given and is |TRUE|,
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005821 the 'suffixes' and 'wildignore' options apply: Names matching
5822 one of the patterns in 'wildignore' will be skipped and
5823 'suffixes' affect the ordering of matches.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005824
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005825 When {list} is present and it is |TRUE| the result is a List
Bram Moolenaar1b1063a2014-05-07 18:35:30 +02005826 with all matching files. The advantage of using a List is, you
5827 also get filenames containing newlines correctly. Otherwise
5828 the result is a String and when there are several matches,
5829 they are separated by <NL> characters. Example: >
5830 :echo globpath(&rtp, "syntax/c.vim", 0, 1)
5831<
Bram Moolenaar6463ca22016-02-13 17:04:46 +01005832 {alllinks} is used as with |glob()|.
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005833
Bram Moolenaar02743632005-07-25 20:42:36 +00005834 The "**" item can be used to search in a directory tree.
5835 For example, to find all "README.txt" files in the directories
5836 in 'runtimepath' and below: >
5837 :echo globpath(&rtp, "**/README.txt")
Bram Moolenaarc236c162008-07-13 17:41:49 +00005838< Upwards search and limiting the depth of "**" is not
5839 supported, thus using 'path' will not always work properly.
5840
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005841 Can also be used as a |method|, the base is passed as the
5842 second argument: >
5843 GetExpr()->globpath(&rtp)
5844<
Bram Moolenaar071d4272004-06-13 20:20:40 +00005845 *has()*
Bram Moolenaar79296512020-03-22 16:17:14 +01005846has({feature} [, {check}])
5847 When {check} is omitted or is zero: The result is a Number,
5848 which is 1 if the feature {feature} is supported, zero
5849 otherwise. The {feature} argument is a string, case is
5850 ignored. See |feature-list| below.
5851
5852 When {check} is present and not zero: The result is a Number,
5853 which is 1 if the feature {feature} could ever be supported,
5854 zero otherwise. This is useful to check for a typo in
Bram Moolenaar191acfd2020-03-27 20:42:43 +01005855 {feature} and to detect dead code. Keep in mind that an older
5856 Vim version will not know about a feature added later and
5857 features that have been abandoned will not be know by the
5858 current Vim version.
Bram Moolenaar79296512020-03-22 16:17:14 +01005859
Bram Moolenaar071d4272004-06-13 20:20:40 +00005860 Also see |exists()|.
Bram Moolenaar79296512020-03-22 16:17:14 +01005861
Bram Moolenaarb17893a2020-03-14 08:19:51 +01005862 Note that to skip code that has a syntax error when the
5863 feature is not available, Vim may skip the rest of the line
Bram Moolenaar7ceefb32020-05-01 16:07:38 +02005864 and miss a following `endif`. Therefore put the `endif` on a
Bram Moolenaarb17893a2020-03-14 08:19:51 +01005865 separate line: >
5866 if has('feature')
5867 let x = this->breaks->without->the->feature
5868 endif
Bram Moolenaarff781552020-03-19 20:37:11 +01005869< If the `endif` would be moved to the second line as "| endif" it
5870 would not be found.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005871
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00005872
5873has_key({dict}, {key}) *has_key()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00005874 The result is a Number, which is 1 if |Dictionary| {dict} has
5875 an entry with key {key}. Zero otherwise.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00005876
Bram Moolenaara74e4942019-08-04 17:35:53 +02005877 Can also be used as a |method|: >
5878 mydict->has_key(key)
5879
Bram Moolenaarc9703302016-01-17 21:49:33 +01005880haslocaldir([{winnr} [, {tabnr}]]) *haslocaldir()*
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005881 The result is a Number:
5882 1 when the window has set a local directory via |:lcd|
5883 2 when the tab-page has set a local directory via |:tcd|
5884 0 otherwise.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005885
5886 Without arguments use the current window.
5887 With {winnr} use this window in the current tab page.
5888 With {winnr} and {tabnr} use the window in the specified tab
5889 page.
Bram Moolenaar7571d552016-08-18 22:54:46 +02005890 {winnr} can be the window number or the |window-ID|.
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005891 If {winnr} is -1 it is ignored and only the tabpage is used.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005892 Return 0 if the arguments are invalid.
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005893 Examples: >
5894 if haslocaldir() == 1
5895 " window local directory case
5896 elseif haslocaldir() == 2
5897 " tab-local directory case
5898 else
5899 " global directory case
5900 endif
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00005901
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005902 " current window
5903 :echo haslocaldir()
5904 :echo haslocaldir(0)
5905 :echo haslocaldir(0, 0)
5906 " window n in current tab page
5907 :echo haslocaldir(n)
5908 :echo haslocaldir(n, 0)
5909 " window n in tab page m
5910 :echo haslocaldir(n, m)
5911 " tab page m
5912 :echo haslocaldir(-1, m)
5913<
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005914 Can also be used as a |method|: >
5915 GetWinnr()->haslocaldir()
5916
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00005917hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00005918 The result is a Number, which is 1 if there is a mapping that
5919 contains {what} in somewhere in the rhs (what it is mapped to)
5920 and this mapping exists in one of the modes indicated by
5921 {mode}.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005922 When {abbr} is there and it is |TRUE| use abbreviations
Bram Moolenaar39f05632006-03-19 22:15:26 +00005923 instead of mappings. Don't forget to specify Insert and/or
5924 Command-line mode.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005925 Both the global mappings and the mappings local to the current
5926 buffer are checked for a match.
5927 If no matching mapping is found 0 is returned.
5928 The following characters are recognized in {mode}:
5929 n Normal mode
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02005930 v Visual and Select mode
5931 x Visual mode
5932 s Select mode
Bram Moolenaar071d4272004-06-13 20:20:40 +00005933 o Operator-pending mode
5934 i Insert mode
5935 l Language-Argument ("r", "f", "t", etc.)
5936 c Command-line mode
5937 When {mode} is omitted, "nvo" is used.
5938
5939 This function is useful to check if a mapping already exists
Bram Moolenaar58b85342016-08-14 19:54:54 +02005940 to a function in a Vim script. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005941 :if !hasmapto('\ABCdoit')
5942 : map <Leader>d \ABCdoit
5943 :endif
5944< This installs the mapping to "\ABCdoit" only if there isn't
5945 already a mapping to "\ABCdoit".
5946
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005947 Can also be used as a |method|: >
5948 GetRHS()->hasmapto()
5949
Bram Moolenaar071d4272004-06-13 20:20:40 +00005950histadd({history}, {item}) *histadd()*
5951 Add the String {item} to the history {history} which can be
5952 one of: *hist-names*
5953 "cmd" or ":" command line history
5954 "search" or "/" search pattern history
Bram Moolenaar446cb832008-06-24 21:56:24 +00005955 "expr" or "=" typed expression history
Bram Moolenaar071d4272004-06-13 20:20:40 +00005956 "input" or "@" input line history
Bram Moolenaar30b65812012-07-12 22:01:11 +02005957 "debug" or ">" debug command history
Bram Moolenaar3e496b02016-09-25 22:11:48 +02005958 empty the current or last used history
Bram Moolenaar30b65812012-07-12 22:01:11 +02005959 The {history} string does not need to be the whole name, one
5960 character is sufficient.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005961 If {item} does already exist in the history, it will be
5962 shifted to become the newest entry.
5963 The result is a Number: 1 if the operation was successful,
5964 otherwise 0 is returned.
5965
5966 Example: >
5967 :call histadd("input", strftime("%Y %b %d"))
5968 :let date=input("Enter date: ")
5969< This function is not available in the |sandbox|.
5970
Bram Moolenaar2e693a82019-10-16 22:35:02 +02005971 Can also be used as a |method|, the base is passed as the
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005972 second argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02005973 GetHistory()->histadd('search')
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005974
Bram Moolenaar071d4272004-06-13 20:20:40 +00005975histdel({history} [, {item}]) *histdel()*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00005976 Clear {history}, i.e. delete all its entries. See |hist-names|
Bram Moolenaar071d4272004-06-13 20:20:40 +00005977 for the possible values of {history}.
5978
Bram Moolenaarc236c162008-07-13 17:41:49 +00005979 If the parameter {item} evaluates to a String, it is used as a
5980 regular expression. All entries matching that expression will
5981 be removed from the history (if there are any).
Bram Moolenaar071d4272004-06-13 20:20:40 +00005982 Upper/lowercase must match, unless "\c" is used |/\c|.
Bram Moolenaarc236c162008-07-13 17:41:49 +00005983 If {item} evaluates to a Number, it will be interpreted as
5984 an index, see |:history-indexing|. The respective entry will
5985 be removed if it exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005986
5987 The result is a Number: 1 for a successful operation,
5988 otherwise 0 is returned.
5989
5990 Examples:
5991 Clear expression register history: >
5992 :call histdel("expr")
5993<
5994 Remove all entries starting with "*" from the search history: >
5995 :call histdel("/", '^\*')
5996<
5997 The following three are equivalent: >
5998 :call histdel("search", histnr("search"))
5999 :call histdel("search", -1)
6000 :call histdel("search", '^'.histget("search", -1).'$')
6001<
6002 To delete the last search pattern and use the last-but-one for
6003 the "n" command and 'hlsearch': >
6004 :call histdel("search", -1)
6005 :let @/ = histget("search", -1)
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006006<
6007 Can also be used as a |method|: >
6008 GetHistory()->histdel()
Bram Moolenaar071d4272004-06-13 20:20:40 +00006009
6010histget({history} [, {index}]) *histget()*
6011 The result is a String, the entry with Number {index} from
6012 {history}. See |hist-names| for the possible values of
6013 {history}, and |:history-indexing| for {index}. If there is
6014 no such entry, an empty String is returned. When {index} is
6015 omitted, the most recent item from the history is used.
6016
6017 Examples:
6018 Redo the second last search from history. >
6019 :execute '/' . histget("search", -2)
6020
6021< Define an Ex command ":H {num}" that supports re-execution of
6022 the {num}th entry from the output of |:history|. >
6023 :command -nargs=1 H execute histget("cmd", 0+<args>)
6024<
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006025 Can also be used as a |method|: >
6026 GetHistory()->histget()
6027
Bram Moolenaar071d4272004-06-13 20:20:40 +00006028histnr({history}) *histnr()*
6029 The result is the Number of the current entry in {history}.
6030 See |hist-names| for the possible values of {history}.
6031 If an error occurred, -1 is returned.
6032
6033 Example: >
6034 :let inp_index = histnr("expr")
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006035
6036< Can also be used as a |method|: >
6037 GetHistory()->histnr()
Bram Moolenaar071d4272004-06-13 20:20:40 +00006038<
6039hlexists({name}) *hlexists()*
6040 The result is a Number, which is non-zero if a highlight group
6041 called {name} exists. This is when the group has been
6042 defined in some way. Not necessarily when highlighting has
6043 been defined for it, it may also have been used for a syntax
6044 item.
6045 *highlight_exists()*
6046 Obsolete name: highlight_exists().
6047
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006048 Can also be used as a |method|: >
6049 GetName()->hlexists()
6050<
Bram Moolenaar071d4272004-06-13 20:20:40 +00006051 *hlID()*
6052hlID({name}) The result is a Number, which is the ID of the highlight group
6053 with name {name}. When the highlight group doesn't exist,
6054 zero is returned.
6055 This can be used to retrieve information about the highlight
Bram Moolenaar58b85342016-08-14 19:54:54 +02006056 group. For example, to get the background color of the
Bram Moolenaar071d4272004-06-13 20:20:40 +00006057 "Comment" group: >
6058 :echo synIDattr(synIDtrans(hlID("Comment")), "bg")
6059< *highlightID()*
6060 Obsolete name: highlightID().
6061
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006062 Can also be used as a |method|: >
6063 GetName()->hlID()
6064
Bram Moolenaar071d4272004-06-13 20:20:40 +00006065hostname() *hostname()*
6066 The result is a String, which is the name of the machine on
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00006067 which Vim is currently running. Machine names greater than
Bram Moolenaar071d4272004-06-13 20:20:40 +00006068 256 characters long are truncated.
6069
6070iconv({expr}, {from}, {to}) *iconv()*
6071 The result is a String, which is the text {expr} converted
6072 from encoding {from} to encoding {to}.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006073 When the conversion completely fails an empty string is
6074 returned. When some characters could not be converted they
6075 are replaced with "?".
Bram Moolenaar071d4272004-06-13 20:20:40 +00006076 The encoding names are whatever the iconv() library function
6077 can accept, see ":!man 3 iconv".
6078 Most conversions require Vim to be compiled with the |+iconv|
6079 feature. Otherwise only UTF-8 to latin1 conversion and back
6080 can be done.
6081 This can be used to display messages with special characters,
6082 no matter what 'encoding' is set to. Write the message in
6083 UTF-8 and use: >
6084 echo iconv(utf8_str, "utf-8", &enc)
6085< Note that Vim uses UTF-8 for all Unicode encodings, conversion
6086 from/to UCS-2 is automatically changed to use UTF-8. You
6087 cannot use UCS-2 in a string anyway, because of the NUL bytes.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006088
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006089 Can also be used as a |method|: >
6090 GetText()->iconv('latin1', 'utf-8')
6091<
Bram Moolenaar071d4272004-06-13 20:20:40 +00006092 *indent()*
6093indent({lnum}) The result is a Number, which is indent of line {lnum} in the
6094 current buffer. The indent is counted in spaces, the value
6095 of 'tabstop' is relevant. {lnum} is used just like in
6096 |getline()|.
6097 When {lnum} is invalid -1 is returned.
6098
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006099 Can also be used as a |method|: >
6100 GetLnum()->indent()
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006101
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006102index({object}, {expr} [, {start} [, {ic}]]) *index()*
6103 If {object} is a |List| return the lowest index where the item
6104 has a value equal to {expr}. There is no automatic
6105 conversion, so the String "4" is different from the Number 4.
6106 And the number 4 is different from the Float 4.0. The value
6107 of 'ignorecase' is not used here, case always matters.
6108
6109 If {object} is |Blob| return the lowest index where the byte
6110 value is equal to {expr}.
6111
Bram Moolenaar748bf032005-02-02 23:04:36 +00006112 If {start} is given then start looking at the item with index
6113 {start} (may be negative for an item relative to the end).
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006114 When {ic} is given and it is |TRUE|, ignore case. Otherwise
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006115 case must match.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006116 -1 is returned when {expr} is not found in {object}.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006117 Example: >
6118 :let idx = index(words, "the")
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00006119 :if index(numbers, 123) >= 0
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006120
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006121< Can also be used as a |method|: >
6122 GetObject()->index(what)
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006123
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006124input({prompt} [, {text} [, {completion}]]) *input()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00006125 The result is a String, which is whatever the user typed on
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006126 the command-line. The {prompt} argument is either a prompt
6127 string, or a blank string (for no prompt). A '\n' can be used
6128 in the prompt to start a new line.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006129 The highlighting set with |:echohl| is used for the prompt.
6130 The input is entered just like a command-line, with the same
Bram Moolenaar58b85342016-08-14 19:54:54 +02006131 editing commands and mappings. There is a separate history
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006132 for lines typed for input().
6133 Example: >
6134 :if input("Coffee or beer? ") == "beer"
6135 : echo "Cheers!"
6136 :endif
6137<
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006138 If the optional {text} argument is present and not empty, this
6139 is used for the default reply, as if the user typed this.
6140 Example: >
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006141 :let color = input("Color? ", "white")
6142
6143< The optional {completion} argument specifies the type of
6144 completion supported for the input. Without it completion is
Bram Moolenaar58b85342016-08-14 19:54:54 +02006145 not performed. The supported completion types are the same as
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006146 that can be supplied to a user-defined command using the
Bram Moolenaar58b85342016-08-14 19:54:54 +02006147 "-complete=" argument. Refer to |:command-completion| for
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006148 more information. Example: >
6149 let fname = input("File: ", "", "file")
6150<
6151 NOTE: This function must not be used in a startup file, for
6152 the versions that only run in GUI mode (e.g., the Win32 GUI).
Bram Moolenaar071d4272004-06-13 20:20:40 +00006153 Note: When input() is called from within a mapping it will
6154 consume remaining characters from that mapping, because a
6155 mapping is handled like the characters were typed.
6156 Use |inputsave()| before input() and |inputrestore()|
6157 after input() to avoid that. Another solution is to avoid
6158 that further characters follow in the mapping, e.g., by using
6159 |:execute| or |:normal|.
6160
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006161 Example with a mapping: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00006162 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
6163 :function GetFoo()
6164 : call inputsave()
6165 : let g:Foo = input("enter search pattern: ")
6166 : call inputrestore()
6167 :endfunction
6168
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006169< Can also be used as a |method|: >
6170 GetPrompt()->input()
6171
Bram Moolenaar071d4272004-06-13 20:20:40 +00006172inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006173 Like |input()|, but when the GUI is running and text dialogs
6174 are supported, a dialog window pops up to input the text.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006175 Example: >
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02006176 :let n = inputdialog("value for shiftwidth", shiftwidth())
6177 :if n != ""
6178 : let &sw = n
6179 :endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00006180< When the dialog is cancelled {cancelreturn} is returned. When
6181 omitted an empty string is returned.
6182 Hitting <Enter> works like pressing the OK button. Hitting
6183 <Esc> works like pressing the Cancel button.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006184 NOTE: Command-line completion is not supported.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006185
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006186 Can also be used as a |method|: >
6187 GetPrompt()->inputdialog()
6188
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006189inputlist({textlist}) *inputlist()*
Bram Moolenaar910f66f2006-04-05 20:41:53 +00006190 {textlist} must be a |List| of strings. This |List| is
6191 displayed, one string per line. The user will be prompted to
6192 enter a number, which is returned.
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006193 The user can also select an item by clicking on it with the
Bram Moolenaar58b85342016-08-14 19:54:54 +02006194 mouse. For the first string 0 is returned. When clicking
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006195 above the first item a negative number is returned. When
6196 clicking on the prompt one more than the length of {textlist}
6197 is returned.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006198 Make sure {textlist} has less than 'lines' entries, otherwise
Bram Moolenaar58b85342016-08-14 19:54:54 +02006199 it won't work. It's a good idea to put the entry number at
Bram Moolenaaref2f6562007-05-06 13:32:59 +00006200 the start of the string. And put a prompt in the first item.
6201 Example: >
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006202 let color = inputlist(['Select color:', '1. red',
6203 \ '2. green', '3. blue'])
6204
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006205< Can also be used as a |method|: >
6206 GetChoices()->inputlist()
6207
Bram Moolenaar071d4272004-06-13 20:20:40 +00006208inputrestore() *inputrestore()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006209 Restore typeahead that was saved with a previous |inputsave()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006210 Should be called the same number of times inputsave() is
6211 called. Calling it more often is harmless though.
6212 Returns 1 when there is nothing to restore, 0 otherwise.
6213
6214inputsave() *inputsave()*
6215 Preserve typeahead (also from mappings) and clear it, so that
6216 a following prompt gets input from the user. Should be
6217 followed by a matching inputrestore() after the prompt. Can
6218 be used several times, in which case there must be just as
6219 many inputrestore() calls.
6220 Returns 1 when out of memory, 0 otherwise.
6221
6222inputsecret({prompt} [, {text}]) *inputsecret()*
6223 This function acts much like the |input()| function with but
6224 two exceptions:
6225 a) the user's response will be displayed as a sequence of
6226 asterisks ("*") thereby keeping the entry secret, and
6227 b) the user's response will not be recorded on the input
6228 |history| stack.
6229 The result is a String, which is whatever the user actually
6230 typed on the command-line in response to the issued prompt.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006231 NOTE: Command-line completion is not supported.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006232
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006233 Can also be used as a |method|: >
6234 GetPrompt()->inputsecret()
6235
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006236insert({object}, {item} [, {idx}]) *insert()*
6237 When {object} is a |List| or a |Blob| insert {item} at the start
6238 of it.
6239
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006240 If {idx} is specified insert {item} before the item with index
Bram Moolenaar58b85342016-08-14 19:54:54 +02006241 {idx}. If {idx} is zero it goes before the first item, just
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006242 like omitting {idx}. A negative {idx} is also possible, see
6243 |list-index|. -1 inserts just before the last item.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006244
6245 Returns the resulting |List| or |Blob|. Examples: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006246 :let mylist = insert([2, 3, 5], 1)
6247 :call insert(mylist, 4, -1)
6248 :call insert(mylist, 6, len(mylist))
Bram Moolenaara14de3d2005-01-07 21:48:26 +00006249< The last example can be done simpler with |add()|.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006250 Note that when {item} is a |List| it is inserted as a single
Bram Moolenaara23ccb82006-02-27 00:08:02 +00006251 item. Use |extend()| to concatenate |Lists|.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006252
Bram Moolenaarac92e252019-08-03 21:58:38 +02006253 Can also be used as a |method|: >
6254 mylist->insert(item)
6255
Bram Moolenaar67a2deb2019-11-25 00:05:32 +01006256interrupt() *interrupt()*
6257 Interrupt script execution. It works more or less like the
6258 user typing CTRL-C, most commands won't execute and control
6259 returns to the user. This is useful to abort execution
6260 from lower down, e.g. in an autocommand. Example: >
6261 :function s:check_typoname(file)
6262 : if fnamemodify(a:file, ':t') == '['
6263 : echomsg 'Maybe typo'
6264 : call interrupt()
6265 : endif
6266 :endfunction
6267 :au BufWritePre * call s:check_typoname(expand('<amatch>'))
6268
Bram Moolenaard6e256c2011-12-14 15:32:50 +01006269invert({expr}) *invert()*
6270 Bitwise invert. The argument is converted to a number. A
6271 List, Dict or Float argument causes an error. Example: >
6272 :let bits = invert(bits)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02006273< Can also be used as a |method|: >
6274 :let bits = bits->invert()
Bram Moolenaard6e256c2011-12-14 15:32:50 +01006275
Bram Moolenaar071d4272004-06-13 20:20:40 +00006276isdirectory({directory}) *isdirectory()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006277 The result is a Number, which is |TRUE| when a directory
Bram Moolenaar071d4272004-06-13 20:20:40 +00006278 with the name {directory} exists. If {directory} doesn't
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006279 exist, or isn't a directory, the result is |FALSE|. {directory}
Bram Moolenaar071d4272004-06-13 20:20:40 +00006280 is any expression, which is used as a String.
6281
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006282 Can also be used as a |method|: >
6283 GetName()->isdirectory()
6284
Bram Moolenaarfda1bff2019-04-04 13:44:37 +02006285isinf({expr}) *isinf()*
6286 Return 1 if {expr} is a positive infinity, or -1 a negative
6287 infinity, otherwise 0. >
6288 :echo isinf(1.0 / 0.0)
6289< 1 >
6290 :echo isinf(-1.0 / 0.0)
6291< -1
6292
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006293 Can also be used as a |method|: >
6294 Compute()->isinf()
6295<
Bram Moolenaarfda1bff2019-04-04 13:44:37 +02006296 {only available when compiled with the |+float| feature}
6297
Bram Moolenaar910f66f2006-04-05 20:41:53 +00006298islocked({expr}) *islocked()* *E786*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006299 The result is a Number, which is |TRUE| when {expr} is the
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00006300 name of a locked variable.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006301 {expr} must be the name of a variable, |List| item or
6302 |Dictionary| entry, not the variable itself! Example: >
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00006303 :let alist = [0, ['a', 'b'], 2, 3]
6304 :lockvar 1 alist
6305 :echo islocked('alist') " 1
6306 :echo islocked('alist[1]') " 0
6307
6308< When {expr} is a variable that does not exist you get an error
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00006309 message. Use |exists()| to check for existence.
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00006310
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006311 Can also be used as a |method|: >
6312 GetName()->islocked()
6313
Bram Moolenaarf3913272016-02-25 00:00:01 +01006314isnan({expr}) *isnan()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006315 Return |TRUE| if {expr} is a float with value NaN. >
Bram Moolenaarf3913272016-02-25 00:00:01 +01006316 echo isnan(0.0 / 0.0)
Bram Moolenaar0f248b02019-04-04 15:36:05 +02006317< 1
Bram Moolenaarf3913272016-02-25 00:00:01 +01006318
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006319 Can also be used as a |method|: >
6320 Compute()->isnan()
6321<
Bram Moolenaarf3913272016-02-25 00:00:01 +01006322 {only available when compiled with the |+float| feature}
6323
Bram Moolenaar677ee682005-01-27 14:41:15 +00006324items({dict}) *items()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006325 Return a |List| with all the key-value pairs of {dict}. Each
6326 |List| item is a list with two items: the key of a {dict}
6327 entry and the value of this entry. The |List| is in arbitrary
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006328 order. Also see |keys()| and |values()|.
6329 Example: >
6330 for [key, value] in items(mydict)
6331 echo key . ': ' . value
6332 endfor
Bram Moolenaar677ee682005-01-27 14:41:15 +00006333
Bram Moolenaarac92e252019-08-03 21:58:38 +02006334< Can also be used as a |method|: >
6335 mydict->items()
Bram Moolenaar38a55632016-02-15 22:07:32 +01006336
Bram Moolenaared997ad2019-07-21 16:42:00 +02006337job_ functions are documented here: |job-functions-details|
Bram Moolenaarf6f32c32016-03-12 19:03:59 +01006338
Bram Moolenaar835dc632016-02-07 14:27:38 +01006339
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006340join({list} [, {sep}]) *join()*
6341 Join the items in {list} together into one String.
6342 When {sep} is specified it is put in between the items. If
6343 {sep} is omitted a single space is used.
6344 Note that {sep} is not added at the end. You might want to
6345 add it there too: >
6346 let lines = join(mylist, "\n") . "\n"
Bram Moolenaara23ccb82006-02-27 00:08:02 +00006347< String items are used as-is. |Lists| and |Dictionaries| are
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006348 converted into a string like with |string()|.
6349 The opposite function is |split()|.
6350
Bram Moolenaarac92e252019-08-03 21:58:38 +02006351 Can also be used as a |method|: >
6352 mylist->join()
6353
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006354js_decode({string}) *js_decode()*
6355 This is similar to |json_decode()| with these differences:
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006356 - Object key names do not have to be in quotes.
Bram Moolenaaree142ad2017-01-11 21:50:08 +01006357 - Strings can be in single quotes.
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006358 - Empty items in an array (between two commas) are allowed and
6359 result in v:none items.
6360
Bram Moolenaar02b31112019-08-31 22:16:38 +02006361 Can also be used as a |method|: >
6362 ReadObject()->js_decode()
6363
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006364js_encode({expr}) *js_encode()*
6365 This is similar to |json_encode()| with these differences:
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006366 - Object key names are not in quotes.
6367 - v:none items in an array result in an empty item between
6368 commas.
6369 For example, the Vim object:
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006370 [1,v:none,{"one":1},v:none] ~
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006371 Will be encoded as:
6372 [1,,{one:1},,] ~
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006373 While json_encode() would produce:
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006374 [1,null,{"one":1},null] ~
6375 This encoding is valid for JavaScript. It is more efficient
6376 than JSON, especially when using an array with optional items.
6377
Bram Moolenaar02b31112019-08-31 22:16:38 +02006378 Can also be used as a |method|: >
6379 GetObject()->js_encode()
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006380
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006381json_decode({string}) *json_decode()*
Bram Moolenaar705ada12016-01-24 17:56:50 +01006382 This parses a JSON formatted string and returns the equivalent
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006383 in Vim values. See |json_encode()| for the relation between
Bram Moolenaar705ada12016-01-24 17:56:50 +01006384 JSON and Vim values.
6385 The decoding is permissive:
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006386 - A trailing comma in an array and object is ignored, e.g.
6387 "[1, 2, ]" is the same as "[1, 2]".
Bram Moolenaard09091d2019-01-17 16:07:22 +01006388 - Integer keys are accepted in objects, e.g. {1:2} is the
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006389 same as {"1":2}.
Bram Moolenaar705ada12016-01-24 17:56:50 +01006390 - More floating point numbers are recognized, e.g. "1." for
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006391 "1.0", or "001.2" for "1.2". Special floating point values
Bram Moolenaar5f6b3792019-01-12 14:24:27 +01006392 "Infinity", "-Infinity" and "NaN" (capitalization ignored)
6393 are accepted.
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006394 - Leading zeroes in integer numbers are ignored, e.g. "012"
6395 for "12" or "-012" for "-12".
6396 - Capitalization is ignored in literal names null, true or
6397 false, e.g. "NULL" for "null", "True" for "true".
6398 - Control characters U+0000 through U+001F which are not
6399 escaped in strings are accepted, e.g. " " (tab
6400 character in string) for "\t".
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006401 - An empty JSON expression or made of only spaces is accepted
6402 and results in v:none.
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006403 - Backslash in an invalid 2-character sequence escape is
6404 ignored, e.g. "\a" is decoded as "a".
6405 - A correct surrogate pair in JSON strings should normally be
6406 a 12 character sequence such as "\uD834\uDD1E", but
6407 json_decode() silently accepts truncated surrogate pairs
6408 such as "\uD834" or "\uD834\u"
6409 *E938*
6410 A duplicate key in an object, valid in rfc7159, is not
6411 accepted by json_decode() as the result must be a valid Vim
6412 type, e.g. this fails: {"a":"b", "a":"c"}
6413
Bram Moolenaar02b31112019-08-31 22:16:38 +02006414 Can also be used as a |method|: >
6415 ReadObject()->json_decode()
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006416
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006417json_encode({expr}) *json_encode()*
Bram Moolenaar705ada12016-01-24 17:56:50 +01006418 Encode {expr} as JSON and return this as a string.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006419 The encoding is specified in:
Bram Moolenaar009d84a2016-01-28 14:12:00 +01006420 https://tools.ietf.org/html/rfc7159.html
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006421 Vim values are converted as follows:
Bram Moolenaard09091d2019-01-17 16:07:22 +01006422 |Number| decimal number
6423 |Float| floating point number
Bram Moolenaar7ce686c2016-02-27 16:33:22 +01006424 Float nan "NaN"
6425 Float inf "Infinity"
Bram Moolenaar5f6b3792019-01-12 14:24:27 +01006426 Float -inf "-Infinity"
Bram Moolenaard09091d2019-01-17 16:07:22 +01006427 |String| in double quotes (possibly null)
6428 |Funcref| not possible, error
6429 |List| as an array (possibly null); when
Bram Moolenaar81edd172016-04-14 13:51:37 +02006430 used recursively: []
Bram Moolenaard09091d2019-01-17 16:07:22 +01006431 |Dict| as an object (possibly null); when
Bram Moolenaar81edd172016-04-14 13:51:37 +02006432 used recursively: {}
Bram Moolenaard09091d2019-01-17 16:07:22 +01006433 |Blob| as an array of the individual bytes
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006434 v:false "false"
6435 v:true "true"
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006436 v:none "null"
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006437 v:null "null"
Bram Moolenaar7ce686c2016-02-27 16:33:22 +01006438 Note that NaN and Infinity are passed on as values. This is
6439 missing in the JSON standard, but several implementations do
6440 allow it. If not then you will get an error.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006441
Bram Moolenaar02b31112019-08-31 22:16:38 +02006442 Can also be used as a |method|: >
6443 GetObject()->json_encode()
6444
Bram Moolenaard8b02732005-01-14 21:48:43 +00006445keys({dict}) *keys()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006446 Return a |List| with all the keys of {dict}. The |List| is in
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006447 arbitrary order. Also see |items()| and |values()|.
Bram Moolenaard8b02732005-01-14 21:48:43 +00006448
Bram Moolenaarac92e252019-08-03 21:58:38 +02006449 Can also be used as a |method|: >
6450 mydict->keys()
6451
6452< *len()* *E701*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006453len({expr}) The result is a Number, which is the length of the argument.
6454 When {expr} is a String or a Number the length in bytes is
6455 used, as with |strlen()|.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006456 When {expr} is a |List| the number of items in the |List| is
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006457 returned.
Bram Moolenaard09091d2019-01-17 16:07:22 +01006458 When {expr} is a |Blob| the number of bytes is returned.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006459 When {expr} is a |Dictionary| the number of entries in the
6460 |Dictionary| is returned.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006461 Otherwise an error is given.
6462
Bram Moolenaarac92e252019-08-03 21:58:38 +02006463 Can also be used as a |method|: >
6464 mylist->len()
6465
6466< *libcall()* *E364* *E368*
Bram Moolenaar071d4272004-06-13 20:20:40 +00006467libcall({libname}, {funcname}, {argument})
6468 Call function {funcname} in the run-time library {libname}
6469 with single argument {argument}.
6470 This is useful to call functions in a library that you
6471 especially made to be used with Vim. Since only one argument
6472 is possible, calling standard library functions is rather
6473 limited.
6474 The result is the String returned by the function. If the
6475 function returns NULL, this will appear as an empty string ""
6476 to Vim.
6477 If the function returns a number, use libcallnr()!
6478 If {argument} is a number, it is passed to the function as an
6479 int; if {argument} is a string, it is passed as a
6480 null-terminated string.
6481 This function will fail in |restricted-mode|.
6482
6483 libcall() allows you to write your own 'plug-in' extensions to
6484 Vim without having to recompile the program. It is NOT a
6485 means to call system functions! If you try to do so Vim will
6486 very probably crash.
6487
6488 For Win32, the functions you write must be placed in a DLL
6489 and use the normal C calling convention (NOT Pascal which is
6490 used in Windows System DLLs). The function must take exactly
6491 one parameter, either a character pointer or a long integer,
6492 and must return a character pointer or NULL. The character
6493 pointer returned must point to memory that will remain valid
6494 after the function has returned (e.g. in static data in the
6495 DLL). If it points to allocated memory, that memory will
6496 leak away. Using a static buffer in the function should work,
6497 it's then freed when the DLL is unloaded.
6498
6499 WARNING: If the function returns a non-valid pointer, Vim may
Bram Moolenaar446cb832008-06-24 21:56:24 +00006500 crash! This also happens if the function returns a number,
Bram Moolenaar071d4272004-06-13 20:20:40 +00006501 because Vim thinks it's a pointer.
6502 For Win32 systems, {libname} should be the filename of the DLL
6503 without the ".DLL" suffix. A full path is only required if
6504 the DLL is not in the usual places.
6505 For Unix: When compiling your own plugins, remember that the
6506 object code must be compiled as position-independent ('PIC').
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006507 {only in Win32 and some Unix versions, when the |+libcall|
Bram Moolenaar071d4272004-06-13 20:20:40 +00006508 feature is present}
6509 Examples: >
6510 :echo libcall("libc.so", "getenv", "HOME")
Bram Moolenaar02b31112019-08-31 22:16:38 +02006511
Bram Moolenaar2e693a82019-10-16 22:35:02 +02006512< Can also be used as a |method|, the base is passed as the
6513 third argument: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02006514 GetValue()->libcall("libc.so", "getenv")
Bram Moolenaar071d4272004-06-13 20:20:40 +00006515<
6516 *libcallnr()*
6517libcallnr({libname}, {funcname}, {argument})
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006518 Just like |libcall()|, but used for a function that returns an
Bram Moolenaar071d4272004-06-13 20:20:40 +00006519 int instead of a string.
6520 {only in Win32 on some Unix versions, when the |+libcall|
6521 feature is present}
Bram Moolenaar446cb832008-06-24 21:56:24 +00006522 Examples: >
6523 :echo libcallnr("/usr/lib/libc.so", "getpid", "")
Bram Moolenaar071d4272004-06-13 20:20:40 +00006524 :call libcallnr("libc.so", "printf", "Hello World!\n")
6525 :call libcallnr("libc.so", "sleep", 10)
6526<
Bram Moolenaar2e693a82019-10-16 22:35:02 +02006527 Can also be used as a |method|, the base is passed as the
6528 third argument: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02006529 GetValue()->libcallnr("libc.so", "printf")
6530<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02006531
6532line({expr} [, {winid}]) *line()*
6533 The result is a Number, which is the line number of the file
Bram Moolenaar071d4272004-06-13 20:20:40 +00006534 position given with {expr}. The accepted positions are:
6535 . the cursor position
6536 $ the last line in the current buffer
6537 'x position of mark x (if the mark is not set, 0 is
6538 returned)
Bram Moolenaara1d5fa62017-04-03 22:02:55 +02006539 w0 first line visible in current window (one if the
6540 display isn't updated, e.g. in silent Ex mode)
6541 w$ last line visible in current window (this is one
6542 less than "w0" if no lines are visible)
Bram Moolenaar9ecd0232008-06-20 15:31:51 +00006543 v In Visual mode: the start of the Visual area (the
6544 cursor is the end). When not in Visual mode
6545 returns the cursor position. Differs from |'<| in
6546 that it's updated right away.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00006547 Note that a mark in another file can be used. The line number
6548 then applies to another buffer.
Bram Moolenaar0b238792006-03-02 22:49:12 +00006549 To get the column number use |col()|. To get both use
6550 |getpos()|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02006551 With the optional {winid} argument the values are obtained for
6552 that window instead of the current window.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006553 Examples: >
6554 line(".") line number of the cursor
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02006555 line(".", winid) idem, in window "winid"
Bram Moolenaar071d4272004-06-13 20:20:40 +00006556 line("'t") line number of mark t
6557 line("'" . marker) line number of mark marker
Bram Moolenaar39536dd2019-01-29 22:58:21 +01006558<
6559 To jump to the last known position when opening a file see
6560 |last-position-jump|.
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00006561
Bram Moolenaar02b31112019-08-31 22:16:38 +02006562 Can also be used as a |method|: >
6563 GetValue()->line()
6564
Bram Moolenaar071d4272004-06-13 20:20:40 +00006565line2byte({lnum}) *line2byte()*
6566 Return the byte count from the start of the buffer for line
6567 {lnum}. This includes the end-of-line character, depending on
6568 the 'fileformat' option for the current buffer. The first
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01006569 line returns 1. 'encoding' matters, 'fileencoding' is ignored.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006570 This can also be used to get the byte count for the line just
6571 below the last line: >
6572 line2byte(line("$") + 1)
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01006573< This is the buffer size plus one. If 'fileencoding' is empty
6574 it is the file size plus one.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006575 When {lnum} is invalid, or the |+byte_offset| feature has been
6576 disabled at compile time, -1 is returned.
6577 Also see |byte2line()|, |go| and |:goto|.
6578
Bram Moolenaar02b31112019-08-31 22:16:38 +02006579 Can also be used as a |method|: >
6580 GetLnum()->line2byte()
6581
Bram Moolenaar071d4272004-06-13 20:20:40 +00006582lispindent({lnum}) *lispindent()*
6583 Get the amount of indent for line {lnum} according the lisp
6584 indenting rules, as with 'lisp'.
6585 The indent is counted in spaces, the value of 'tabstop' is
6586 relevant. {lnum} is used just like in |getline()|.
6587 When {lnum} is invalid or Vim was not compiled the
6588 |+lispindent| feature, -1 is returned.
6589
Bram Moolenaar02b31112019-08-31 22:16:38 +02006590 Can also be used as a |method|: >
6591 GetLnum()->lispindent()
6592
Bram Moolenaar9d401282019-04-06 13:18:12 +02006593list2str({list} [, {utf8}]) *list2str()*
6594 Convert each number in {list} to a character string can
6595 concatenate them all. Examples: >
6596 list2str([32]) returns " "
6597 list2str([65, 66, 67]) returns "ABC"
6598< The same can be done (slowly) with: >
6599 join(map(list, {nr, val -> nr2char(val)}), '')
6600< |str2list()| does the opposite.
6601
6602 When {utf8} is omitted or zero, the current 'encoding' is used.
6603 With {utf8} is 1, always return utf-8 characters.
6604 With utf-8 composing characters work as expected: >
6605 list2str([97, 769]) returns "á"
6606<
Bram Moolenaar02b31112019-08-31 22:16:38 +02006607 Can also be used as a |method|: >
6608 GetList()->list2str()
6609
Bram Moolenaara3347722019-05-11 21:14:24 +02006610listener_add({callback} [, {buf}]) *listener_add()*
6611 Add a callback function that will be invoked when changes have
6612 been made to buffer {buf}.
6613 {buf} refers to a buffer name or number. For the accepted
6614 values, see |bufname()|. When {buf} is omitted the current
6615 buffer is used.
6616 Returns a unique ID that can be passed to |listener_remove()|.
6617
Bram Moolenaaraad222c2019-09-06 22:46:09 +02006618 The {callback} is invoked with five arguments:
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006619 a:bufnr the buffer that was changed
6620 a:start first changed line number
6621 a:end first line number below the change
Bram Moolenaar96f45c02019-10-26 19:53:45 +02006622 a:added number of lines added, negative if lines were
6623 deleted
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006624 a:changes a List of items with details about the changes
6625
6626 Example: >
6627 func Listener(bufnr, start, end, added, changes)
6628 echo 'lines ' .. a:start .. ' until ' .. a:end .. ' changed'
6629 endfunc
6630 call listener_add('Listener', bufnr)
6631
6632< The List cannot be changed. Each item in a:changes is a
Bram Moolenaar8aad88d2019-05-12 13:53:50 +02006633 dictionary with these entries:
Bram Moolenaara3347722019-05-11 21:14:24 +02006634 lnum the first line number of the change
6635 end the first line below the change
6636 added number of lines added; negative if lines were
6637 deleted
6638 col first column in "lnum" that was affected by
6639 the change; one if unknown or the whole line
6640 was affected; this is a byte index, first
6641 character has a value of one.
6642 When lines are inserted the values are:
Bram Moolenaar68e65602019-05-26 21:33:31 +02006643 lnum line above which the new line is added
Bram Moolenaara3347722019-05-11 21:14:24 +02006644 end equal to "lnum"
6645 added number of lines inserted
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006646 col 1
Bram Moolenaara3347722019-05-11 21:14:24 +02006647 When lines are deleted the values are:
6648 lnum the first deleted line
6649 end the line below the first deleted line, before
6650 the deletion was done
6651 added negative, number of lines deleted
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006652 col 1
Bram Moolenaara3347722019-05-11 21:14:24 +02006653 When lines are changed:
6654 lnum the first changed line
6655 end the line below the last changed line
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006656 added 0
6657 col first column with a change or 1
Bram Moolenaara3347722019-05-11 21:14:24 +02006658
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006659 The entries are in the order the changes were made, thus the
6660 most recent change is at the end. The line numbers are valid
6661 when the callback is invoked, but later changes may make them
6662 invalid, thus keeping a copy for later might not work.
Bram Moolenaar8aad88d2019-05-12 13:53:50 +02006663
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006664 The {callback} is invoked just before the screen is updated,
6665 when |listener_flush()| is called or when a change is being
6666 made that changes the line count in a way it causes a line
6667 number in the list of changes to become invalid.
Bram Moolenaar8aad88d2019-05-12 13:53:50 +02006668
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006669 The {callback} is invoked with the text locked, see
6670 |textlock|. If you do need to make changes to the buffer, use
6671 a timer to do this later |timer_start()|.
Bram Moolenaara3347722019-05-11 21:14:24 +02006672
6673 The {callback} is not invoked when the buffer is first loaded.
6674 Use the |BufReadPost| autocmd event to handle the initial text
6675 of a buffer.
6676 The {callback} is also not invoked when the buffer is
6677 unloaded, use the |BufUnload| autocmd event for that.
6678
Bram Moolenaar2e693a82019-10-16 22:35:02 +02006679 Can also be used as a |method|, the base is passed as the
6680 second argument: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02006681 GetBuffer()->listener_add(callback)
6682
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006683listener_flush([{buf}]) *listener_flush()*
6684 Invoke listener callbacks for buffer {buf}. If there are no
6685 pending changes then no callbacks are invoked.
6686
6687 {buf} refers to a buffer name or number. For the accepted
6688 values, see |bufname()|. When {buf} is omitted the current
6689 buffer is used.
6690
Bram Moolenaar02b31112019-08-31 22:16:38 +02006691 Can also be used as a |method|: >
6692 GetBuffer()->listener_flush()
6693
Bram Moolenaara3347722019-05-11 21:14:24 +02006694listener_remove({id}) *listener_remove()*
6695 Remove a listener previously added with listener_add().
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02006696 Returns zero when {id} could not be found, one when {id} was
6697 removed.
Bram Moolenaara3347722019-05-11 21:14:24 +02006698
Bram Moolenaar02b31112019-08-31 22:16:38 +02006699 Can also be used as a |method|: >
6700 GetListenerId()->listener_remove()
6701
Bram Moolenaar071d4272004-06-13 20:20:40 +00006702localtime() *localtime()*
6703 Return the current time, measured as seconds since 1st Jan
Bram Moolenaar10455d42019-11-21 15:36:18 +01006704 1970. See also |strftime()|, |strptime()| and |getftime()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006705
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006706
Bram Moolenaardb7c6862010-05-21 16:33:48 +02006707log({expr}) *log()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02006708 Return the natural logarithm (base e) of {expr} as a |Float|.
6709 {expr} must evaluate to a |Float| or a |Number| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02006710 (0, inf].
6711 Examples: >
6712 :echo log(10)
6713< 2.302585 >
6714 :echo log(exp(5))
6715< 5.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006716
6717 Can also be used as a |method|: >
6718 Compute()->log()
6719<
Bram Moolenaardb84e452010-08-15 13:50:43 +02006720 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02006721
6722
Bram Moolenaar446cb832008-06-24 21:56:24 +00006723log10({expr}) *log10()*
6724 Return the logarithm of Float {expr} to base 10 as a |Float|.
6725 {expr} must evaluate to a |Float| or a |Number|.
6726 Examples: >
6727 :echo log10(1000)
6728< 3.0 >
6729 :echo log10(0.01)
6730< -2.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006731
6732 Can also be used as a |method|: >
6733 Compute()->log10()
6734<
Bram Moolenaar446cb832008-06-24 21:56:24 +00006735 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006736
6737luaeval({expr} [, {expr}]) *luaeval()*
6738 Evaluate Lua expression {expr} and return its result converted
6739 to Vim data structures. Second {expr} may hold additional
Bram Moolenaard38b0552012-04-25 19:07:41 +02006740 argument accessible as _A inside first {expr}.
6741 Strings are returned as they are.
6742 Boolean objects are converted to numbers.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006743 Numbers are converted to |Float| values if vim was compiled
Bram Moolenaard38b0552012-04-25 19:07:41 +02006744 with |+float| and to numbers otherwise.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006745 Dictionaries and lists obtained by vim.eval() are returned
Bram Moolenaard38b0552012-04-25 19:07:41 +02006746 as-is.
6747 Other objects are returned as zero without any errors.
6748 See |lua-luaeval| for more details.
Bram Moolenaar02b31112019-08-31 22:16:38 +02006749
6750 Can also be used as a |method|: >
6751 GetExpr()->luaeval()
6752
6753< {only available when compiled with the |+lua| feature}
Bram Moolenaard38b0552012-04-25 19:07:41 +02006754
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006755map({expr1}, {expr2}) *map()*
6756 {expr1} must be a |List| or a |Dictionary|.
6757 Replace each item in {expr1} with the result of evaluating
6758 {expr2}. {expr2} must be a |string| or |Funcref|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006759
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006760 If {expr2} is a |string|, inside {expr2} |v:val| has the value
6761 of the current item. For a |Dictionary| |v:key| has the key
6762 of the current item and for a |List| |v:key| has the index of
6763 the current item.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006764 Example: >
6765 :call map(mylist, '"> " . v:val . " <"')
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006766< This puts "> " before and " <" after each item in "mylist".
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006767
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006768 Note that {expr2} is the result of an expression and is then
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006769 used as an expression again. Often it is good to use a
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00006770 |literal-string| to avoid having to double backslashes. You
6771 still have to double ' quotes
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006772
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006773 If {expr2} is a |Funcref| it is called with two arguments:
6774 1. The key or the index of the current item.
6775 2. the value of the current item.
6776 The function must return the new value of the item. Example
6777 that changes each value by "key-value": >
6778 func KeyValue(key, val)
6779 return a:key . '-' . a:val
6780 endfunc
6781 call map(myDict, function('KeyValue'))
Bram Moolenaar50ba5262016-09-22 22:33:02 +02006782< It is shorter when using a |lambda|: >
6783 call map(myDict, {key, val -> key . '-' . val})
6784< If you do not use "val" you can leave it out: >
6785 call map(myDict, {key -> 'item: ' . key})
Bram Moolenaar088e8e32019-08-08 22:15:18 +02006786< If you do not use "key" you can use a short name: >
6787 call map(myDict, {_, val -> 'item: ' . val})
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006788<
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006789 The operation is done in-place. If you want a |List| or
6790 |Dictionary| to remain unmodified make a copy first: >
Bram Moolenaar30b65812012-07-12 22:01:11 +02006791 :let tlist = map(copy(mylist), ' v:val . "\t"')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006792
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006793< Returns {expr1}, the |List| or |Dictionary| that was filtered.
6794 When an error is encountered while evaluating {expr2} no
6795 further items in {expr1} are processed. When {expr2} is a
6796 Funcref errors inside a function are ignored, unless it was
6797 defined with the "abort" flag.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006798
Bram Moolenaarac92e252019-08-03 21:58:38 +02006799 Can also be used as a |method|: >
6800 mylist->map(expr2)
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006801
Bram Moolenaar4c9243f2020-05-22 13:10:44 +02006802
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006803maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
Bram Moolenaarbd743252010-10-20 21:23:33 +02006804 When {dict} is omitted or zero: Return the rhs of mapping
6805 {name} in mode {mode}. The returned String has special
6806 characters translated like in the output of the ":map" command
6807 listing.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006808
Bram Moolenaarbd743252010-10-20 21:23:33 +02006809 When there is no mapping for {name}, an empty String is
Bram Moolenaar0b0f0992018-05-22 21:41:30 +02006810 returned. When the mapping for {name} is empty, then "<Nop>"
6811 is returned.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006812
6813 The {name} can have special key names, like in the ":map"
6814 command.
6815
Bram Moolenaard12f5c12006-01-25 22:10:52 +00006816 {mode} can be one of these strings:
Bram Moolenaar071d4272004-06-13 20:20:40 +00006817 "n" Normal
Bram Moolenaarbd743252010-10-20 21:23:33 +02006818 "v" Visual (including Select)
Bram Moolenaar071d4272004-06-13 20:20:40 +00006819 "o" Operator-pending
6820 "i" Insert
6821 "c" Cmd-line
Bram Moolenaarbd743252010-10-20 21:23:33 +02006822 "s" Select
6823 "x" Visual
Bram Moolenaar071d4272004-06-13 20:20:40 +00006824 "l" langmap |language-mapping|
Bram Moolenaar37c64c72017-09-19 22:06:03 +02006825 "t" Terminal-Job
Bram Moolenaar071d4272004-06-13 20:20:40 +00006826 "" Normal, Visual and Operator-pending
Bram Moolenaard12f5c12006-01-25 22:10:52 +00006827 When {mode} is omitted, the modes for "" are used.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006828
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006829 When {abbr} is there and it is |TRUE| use abbreviations
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00006830 instead of mappings.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006831
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006832 When {dict} is there and it is |TRUE| return a dictionary
Bram Moolenaarbd743252010-10-20 21:23:33 +02006833 containing all the information of the mapping with the
6834 following items:
Bram Moolenaar9c652532020-05-24 13:10:18 +02006835 "lhs" The {lhs} of the mapping as it would be typed
6836 "lhsraw" The {lhs} of the mapping as raw bytes
6837 "lhsrawalt" The {lhs} of the mapping as raw bytes, alternate
6838 form, only present when it differs from "lhsraw"
Bram Moolenaarbd743252010-10-20 21:23:33 +02006839 "rhs" The {rhs} of the mapping as typed.
6840 "silent" 1 for a |:map-silent| mapping, else 0.
Bram Moolenaar05365702010-10-27 18:34:44 +02006841 "noremap" 1 if the {rhs} of the mapping is not remappable.
Bram Moolenaar2da0f0c2020-04-01 19:22:12 +02006842 "script" 1 if mapping was defined with <script>.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006843 "expr" 1 for an expression mapping (|:map-<expr>|).
6844 "buffer" 1 for a buffer local mapping (|:map-local|).
6845 "mode" Modes for which the mapping is defined. In
6846 addition to the modes mentioned above, these
6847 characters will be used:
6848 " " Normal, Visual and Operator-pending
6849 "!" Insert and Commandline mode
Bram Moolenaar166af9b2010-11-16 20:34:40 +01006850 (|mapmode-ic|)
Bram Moolenaar05365702010-10-27 18:34:44 +02006851 "sid" The script local ID, used for <sid> mappings
6852 (|<SID>|).
Bram Moolenaarf29c1c62018-09-10 21:05:02 +02006853 "lnum" The line number in "sid", zero if unknown.
Bram Moolenaardfb18412013-12-11 18:53:29 +01006854 "nowait" Do not wait for other, longer mappings.
6855 (|:map-<nowait>|).
Bram Moolenaar4c9243f2020-05-22 13:10:44 +02006856
6857 The dictionary can be used to restore a mapping with
6858 |mapset()|.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006859
Bram Moolenaar071d4272004-06-13 20:20:40 +00006860 The mappings local to the current buffer are checked first,
6861 then the global mappings.
Bram Moolenaara40ceaf2006-01-13 22:35:40 +00006862 This function can be used to map a key even when it's already
6863 mapped, and have it do the original mapping too. Sketch: >
6864 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
6865
Bram Moolenaara1449832019-09-01 20:16:52 +02006866< Can also be used as a |method|: >
6867 GetKey()->maparg('n')
Bram Moolenaar071d4272004-06-13 20:20:40 +00006868
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006869mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00006870 Check if there is a mapping that matches with {name} in mode
6871 {mode}. See |maparg()| for {mode} and special names in
6872 {name}.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006873 When {abbr} is there and it is |TRUE| use abbreviations
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00006874 instead of mappings.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006875 A match happens with a mapping that starts with {name} and
6876 with a mapping which is equal to the start of {name}.
6877
Bram Moolenaar446cb832008-06-24 21:56:24 +00006878 matches mapping "a" "ab" "abc" ~
Bram Moolenaar071d4272004-06-13 20:20:40 +00006879 mapcheck("a") yes yes yes
6880 mapcheck("abc") yes yes yes
6881 mapcheck("ax") yes no no
6882 mapcheck("b") no no no
6883
6884 The difference with maparg() is that mapcheck() finds a
6885 mapping that matches with {name}, while maparg() only finds a
6886 mapping for {name} exactly.
6887 When there is no mapping that starts with {name}, an empty
Bram Moolenaar0b0f0992018-05-22 21:41:30 +02006888 String is returned. If there is one, the RHS of that mapping
Bram Moolenaar071d4272004-06-13 20:20:40 +00006889 is returned. If there are several mappings that start with
Bram Moolenaar0b0f0992018-05-22 21:41:30 +02006890 {name}, the RHS of one of them is returned. This will be
6891 "<Nop>" if the RHS is empty.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006892 The mappings local to the current buffer are checked first,
6893 then the global mappings.
6894 This function can be used to check if a mapping can be added
6895 without being ambiguous. Example: >
6896 :if mapcheck("_vv") == ""
6897 : map _vv :set guifont=7x13<CR>
6898 :endif
6899< This avoids adding the "_vv" mapping when there already is a
6900 mapping for "_v" or for "_vvv".
6901
Bram Moolenaara1449832019-09-01 20:16:52 +02006902 Can also be used as a |method|: >
6903 GetKey()->mapcheck('n')
6904
Bram Moolenaar9c652532020-05-24 13:10:18 +02006905
Bram Moolenaar4c9243f2020-05-22 13:10:44 +02006906mapset({mode}, {abbr}, {dict}) *mapset()*
6907 Restore a mapping from a dictionary returned by |maparg()|.
Bram Moolenaar9c652532020-05-24 13:10:18 +02006908 {mode} and {abbr} should be the same as for the call to
6909 |maparg()|. *E460*
Bram Moolenaar4c9243f2020-05-22 13:10:44 +02006910 {mode} is used to define the mode in which the mapping is set,
6911 not the "mode" entry in {dict}.
6912 Example for saving and restoring a mapping: >
6913 let save_map = maparg('K', 'n', 0, 1)
6914 nnoremap K somethingelse
6915 ...
6916 call mapset('n', 0, save_map)
Bram Moolenaar9c652532020-05-24 13:10:18 +02006917< Note that if you are going to replace a map in several modes,
6918 e.g. with `:map!`, you need to save the mapping for all of
6919 them, since they can differe.
6920
6921
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006922match({expr}, {pat} [, {start} [, {count}]]) *match()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006923 When {expr} is a |List| then this returns the index of the
6924 first item where {pat} matches. Each item is used as a
Bram Moolenaara23ccb82006-02-27 00:08:02 +00006925 String, |Lists| and |Dictionaries| are used as echoed.
Bram Moolenaar93a1df22018-09-10 11:51:50 +02006926
Bram Moolenaar58b85342016-08-14 19:54:54 +02006927 Otherwise, {expr} is used as a String. The result is a
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006928 Number, which gives the index (byte offset) in {expr} where
6929 {pat} matches.
Bram Moolenaar93a1df22018-09-10 11:51:50 +02006930
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006931 A match at the first character or |List| item returns zero.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00006932 If there is no match -1 is returned.
Bram Moolenaar93a1df22018-09-10 11:51:50 +02006933
Bram Moolenaar20f90cf2011-05-19 12:22:51 +02006934 For getting submatches see |matchlist()|.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00006935 Example: >
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006936 :echo match("testing", "ing") " results in 4
Bram Moolenaar362e1a32006-03-06 23:29:24 +00006937 :echo match([1, 'x'], '\a') " results in 1
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006938< See |string-match| for how {pat} is used.
Bram Moolenaar05159a02005-02-26 23:04:13 +00006939 *strpbrk()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02006940 Vim doesn't have a strpbrk() function. But you can do: >
Bram Moolenaar05159a02005-02-26 23:04:13 +00006941 :let sepidx = match(line, '[.,;: \t]')
6942< *strcasestr()*
6943 Vim doesn't have a strcasestr() function. But you can add
6944 "\c" to the pattern to ignore case: >
6945 :let idx = match(haystack, '\cneedle')
6946<
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006947 If {start} is given, the search starts from byte index
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006948 {start} in a String or item {start} in a |List|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006949 The result, however, is still the index counted from the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00006950 first character/item. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00006951 :echo match("testing", "ing", 2)
6952< result is again "4". >
6953 :echo match("testing", "ing", 4)
6954< result is again "4". >
6955 :echo match("testing", "t", 2)
6956< result is "3".
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006957 For a String, if {start} > 0 then it is like the string starts
Bram Moolenaar0b238792006-03-02 22:49:12 +00006958 {start} bytes later, thus "^" will match at {start}. Except
6959 when {count} is given, then it's like matches before the
6960 {start} byte are ignored (this is a bit complicated to keep it
6961 backwards compatible).
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006962 For a String, if {start} < 0, it will be set to 0. For a list
6963 the index is counted from the end.
Bram Moolenaare224ffa2006-03-01 00:01:28 +00006964 If {start} is out of range ({start} > strlen({expr}) for a
6965 String or {start} > len({expr}) for a |List|) -1 is returned.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006966
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006967 When {count} is given use the {count}'th match. When a match
Bram Moolenaare224ffa2006-03-01 00:01:28 +00006968 is found in a String the search for the next one starts one
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006969 character further. Thus this example results in 1: >
6970 echo match("testing", "..", 0, 2)
6971< In a |List| the search continues in the next item.
Bram Moolenaar0b238792006-03-02 22:49:12 +00006972 Note that when {count} is added the way {start} works changes,
6973 see above.
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006974
Bram Moolenaar071d4272004-06-13 20:20:40 +00006975 See |pattern| for the patterns that are accepted.
6976 The 'ignorecase' option is used to set the ignore-caseness of
Bram Moolenaar58b85342016-08-14 19:54:54 +02006977 the pattern. 'smartcase' is NOT used. The matching is always
Bram Moolenaar071d4272004-06-13 20:20:40 +00006978 done like 'magic' is set and 'cpoptions' is empty.
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +01006979 Note that a match at the start is preferred, thus when the
6980 pattern is using "*" (any number of matches) it tends to find
6981 zero matches at the start instead of a number of matches
6982 further down in the text.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006983
Bram Moolenaara1449832019-09-01 20:16:52 +02006984 Can also be used as a |method|: >
6985 GetList()->match('word')
6986<
Bram Moolenaar95e51472018-07-28 16:55:56 +02006987 *matchadd()* *E798* *E799* *E801* *E957*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006988matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006989 Defines a pattern to be highlighted in the current window (a
6990 "match"). It will be highlighted with {group}. Returns an
6991 identification number (ID), which can be used to delete the
Bram Moolenaaraff74912019-03-30 18:11:49 +01006992 match using |matchdelete()|. The ID is bound to the window.
Bram Moolenaar8e69b4a2013-11-09 03:41:58 +01006993 Matching is case sensitive and magic, unless case sensitivity
6994 or magicness are explicitly overridden in {pattern}. The
6995 'magic', 'smartcase' and 'ignorecase' options are not used.
Bram Moolenaarf9132812015-07-21 19:19:13 +02006996 The "Conceal" value is special, it causes the match to be
6997 concealed.
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006998
6999 The optional {priority} argument assigns a priority to the
Bram Moolenaar58b85342016-08-14 19:54:54 +02007000 match. A match with a high priority will have its
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007001 highlighting overrule that of a match with a lower priority.
7002 A priority is specified as an integer (negative numbers are no
7003 exception). If the {priority} argument is not specified, the
7004 default priority is 10. The priority of 'hlsearch' is zero,
7005 hence all matches with a priority greater than zero will
7006 overrule it. Syntax highlighting (see 'syntax') is a separate
7007 mechanism, and regardless of the chosen priority a match will
7008 always overrule syntax highlighting.
7009
7010 The optional {id} argument allows the request for a specific
7011 match ID. If a specified ID is already taken, an error
7012 message will appear and the match will not be added. An ID
7013 is specified as a positive integer (zero excluded). IDs 1, 2
7014 and 3 are reserved for |:match|, |:2match| and |:3match|,
Bram Moolenaar6561d522015-07-21 15:48:27 +02007015 respectively. If the {id} argument is not specified or -1,
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007016 |matchadd()| automatically chooses a free ID.
7017
Bram Moolenaar85084ef2016-01-17 22:26:33 +01007018 The optional {dict} argument allows for further custom
7019 values. Currently this is used to specify a match specific
Bram Moolenaar6561d522015-07-21 15:48:27 +02007020 conceal character that will be shown for |hl-Conceal|
7021 highlighted matches. The dict can have the following members:
7022
7023 conceal Special character to show instead of the
Bram Moolenaar6463ca22016-02-13 17:04:46 +01007024 match (only for |hl-Conceal| highlighted
Bram Moolenaar6561d522015-07-21 15:48:27 +02007025 matches, see |:syn-cchar|)
Bram Moolenaar95e51472018-07-28 16:55:56 +02007026 window Instead of the current window use the
7027 window with this number or window ID.
Bram Moolenaar6561d522015-07-21 15:48:27 +02007028
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007029 The number of matches is not limited, as it is the case with
7030 the |:match| commands.
7031
7032 Example: >
7033 :highlight MyGroup ctermbg=green guibg=green
7034 :let m = matchadd("MyGroup", "TODO")
7035< Deletion of the pattern: >
7036 :call matchdelete(m)
7037
7038< A list of matches defined by |matchadd()| and |:match| are
Bram Moolenaar58b85342016-08-14 19:54:54 +02007039 available from |getmatches()|. All matches can be deleted in
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007040 one operation by |clearmatches()|.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007041
Bram Moolenaara1449832019-09-01 20:16:52 +02007042 Can also be used as a |method|: >
7043 GetGroup()->matchadd('TODO')
7044<
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02007045 *matchaddpos()*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007046matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaarb3414592014-06-17 17:48:32 +02007047 Same as |matchadd()|, but requires a list of positions {pos}
7048 instead of a pattern. This command is faster than |matchadd()|
7049 because it does not require to handle regular expressions and
7050 sets buffer line boundaries to redraw screen. It is supposed
7051 to be used when fast match additions and deletions are
7052 required, for example to highlight matching parentheses.
7053
7054 The list {pos} can contain one of these items:
Bram Moolenaarb6da44a2014-06-25 18:15:22 +02007055 - A number. This whole line will be highlighted. The first
Bram Moolenaarb3414592014-06-17 17:48:32 +02007056 line has number 1.
7057 - A list with one number, e.g., [23]. The whole line with this
7058 number will be highlighted.
7059 - A list with two numbers, e.g., [23, 11]. The first number is
Bram Moolenaarb6da44a2014-06-25 18:15:22 +02007060 the line number, the second one is the column number (first
7061 column is 1, the value must correspond to the byte index as
7062 |col()| would return). The character at this position will
7063 be highlighted.
Bram Moolenaarb3414592014-06-17 17:48:32 +02007064 - A list with three numbers, e.g., [23, 11, 3]. As above, but
Bram Moolenaarb6da44a2014-06-25 18:15:22 +02007065 the third number gives the length of the highlight in bytes.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007066
Bram Moolenaarb3414592014-06-17 17:48:32 +02007067 The maximum number of positions is 8.
7068
7069 Example: >
7070 :highlight MyGroup ctermbg=green guibg=green
7071 :let m = matchaddpos("MyGroup", [[23, 24], 34])
7072< Deletion of the pattern: >
7073 :call matchdelete(m)
7074
7075< Matches added by |matchaddpos()| are returned by
7076 |getmatches()| with an entry "pos1", "pos2", etc., with the
7077 value a list like the {pos} item.
Bram Moolenaarb3414592014-06-17 17:48:32 +02007078
Bram Moolenaara1449832019-09-01 20:16:52 +02007079 Can also be used as a |method|: >
7080 GetGroup()->matchaddpos([23, 11])
7081
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007082matcharg({nr}) *matcharg()*
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007083 Selects the {nr} match item, as set with a |:match|,
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007084 |:2match| or |:3match| command.
7085 Return a |List| with two elements:
7086 The name of the highlight group used
7087 The pattern used.
7088 When {nr} is not 1, 2 or 3 returns an empty |List|.
7089 When there is no match item set returns ['', ''].
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007090 This is useful to save and restore a |:match|.
7091 Highlighting matches using the |:match| commands are limited
7092 to three matches. |matchadd()| does not have this limitation.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007093
Bram Moolenaara1449832019-09-01 20:16:52 +02007094 Can also be used as a |method|: >
7095 GetMatch()->matcharg()
7096
Bram Moolenaaraff74912019-03-30 18:11:49 +01007097matchdelete({id} [, {win}) *matchdelete()* *E802* *E803*
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007098 Deletes a match with ID {id} previously defined by |matchadd()|
Bram Moolenaar446cb832008-06-24 21:56:24 +00007099 or one of the |:match| commands. Returns 0 if successful,
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007100 otherwise -1. See example for |matchadd()|. All matches can
7101 be deleted in one operation by |clearmatches()|.
Bram Moolenaaraff74912019-03-30 18:11:49 +01007102 If {win} is specified, use the window with this number or
7103 window ID instead of the current window.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007104
Bram Moolenaara1449832019-09-01 20:16:52 +02007105 Can also be used as a |method|: >
7106 GetMatch()->matchdelete()
7107
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007108matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007109 Same as |match()|, but return the index of first character
7110 after the match. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007111 :echo matchend("testing", "ing")
7112< results in "7".
Bram Moolenaar05159a02005-02-26 23:04:13 +00007113 *strspn()* *strcspn()*
7114 Vim doesn't have a strspn() or strcspn() function, but you can
7115 do it with matchend(): >
7116 :let span = matchend(line, '[a-zA-Z]')
7117 :let span = matchend(line, '[^a-zA-Z]')
7118< Except that -1 is returned when there are no matches.
7119
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007120 The {start}, if given, has the same meaning as for |match()|. >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007121 :echo matchend("testing", "ing", 2)
7122< results in "7". >
7123 :echo matchend("testing", "ing", 5)
7124< result is "-1".
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007125 When {expr} is a |List| the result is equal to |match()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007126
Bram Moolenaara1449832019-09-01 20:16:52 +02007127 Can also be used as a |method|: >
7128 GetText()->matchend('word')
7129
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007130matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007131 Same as |match()|, but return a |List|. The first item in the
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007132 list is the matched string, same as what matchstr() would
7133 return. Following items are submatches, like "\1", "\2", etc.
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00007134 in |:substitute|. When an optional submatch didn't match an
7135 empty string is used. Example: >
7136 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
7137< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007138 When there is no match an empty list is returned.
7139
Bram Moolenaara1449832019-09-01 20:16:52 +02007140 Can also be used as a |method|: >
7141 GetList()->matchlist('word')
7142
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007143matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()*
Bram Moolenaar446cb832008-06-24 21:56:24 +00007144 Same as |match()|, but return the matched string. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007145 :echo matchstr("testing", "ing")
7146< results in "ing".
7147 When there is no match "" is returned.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007148 The {start}, if given, has the same meaning as for |match()|. >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007149 :echo matchstr("testing", "ing", 2)
7150< results in "ing". >
7151 :echo matchstr("testing", "ing", 5)
7152< result is "".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007153 When {expr} is a |List| then the matching item is returned.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00007154 The type isn't changed, it's not necessarily a String.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007155
Bram Moolenaara1449832019-09-01 20:16:52 +02007156 Can also be used as a |method|: >
7157 GetText()->matchstr('word')
7158
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007159matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
Bram Moolenaar7fed5c12016-03-29 23:10:31 +02007160 Same as |matchstr()|, but return the matched string, the start
7161 position and the end position of the match. Example: >
7162 :echo matchstrpos("testing", "ing")
7163< results in ["ing", 4, 7].
7164 When there is no match ["", -1, -1] is returned.
7165 The {start}, if given, has the same meaning as for |match()|. >
7166 :echo matchstrpos("testing", "ing", 2)
7167< results in ["ing", 4, 7]. >
7168 :echo matchstrpos("testing", "ing", 5)
7169< result is ["", -1, -1].
7170 When {expr} is a |List| then the matching item, the index
7171 of first item where {pat} matches, the start position and the
7172 end position of the match are returned. >
7173 :echo matchstrpos([1, '__x'], '\a')
7174< result is ["x", 1, 2, 3].
7175 The type isn't changed, it's not necessarily a String.
7176
Bram Moolenaara1449832019-09-01 20:16:52 +02007177 Can also be used as a |method|: >
7178 GetText()->matchstrpos('word')
Bram Moolenaar2e693a82019-10-16 22:35:02 +02007179<
Bram Moolenaar0eabd4d2020-03-15 16:13:53 +01007180
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00007181 *max()*
Bram Moolenaar690afe12017-01-28 18:34:47 +01007182max({expr}) Return the maximum value of all items in {expr}.
Bram Moolenaar29634562020-01-09 21:46:04 +01007183 {expr} can be a List or a Dictionary. For a Dictionary,
7184 it returns the maximum of all values in the Dictionary.
7185 If {expr} is neither a List nor a Dictionary, or one of the
Bram Moolenaar690afe12017-01-28 18:34:47 +01007186 items in {expr} cannot be used as a Number this results in
Bram Moolenaarf8be4612017-06-23 20:52:40 +02007187 an error. An empty |List| or |Dictionary| results in zero.
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00007188
Bram Moolenaarac92e252019-08-03 21:58:38 +02007189 Can also be used as a |method|: >
7190 mylist->max()
7191
Bram Moolenaar0eabd4d2020-03-15 16:13:53 +01007192
7193menu_info({name} [, {mode}]) *menu_info()*
7194 Return information about the specified menu {name} in
7195 mode {mode}. The menu name should be specified without the
7196 shortcut character ('&').
7197
7198 {mode} can be one of these strings:
7199 "n" Normal
7200 "v" Visual (including Select)
7201 "o" Operator-pending
7202 "i" Insert
7203 "c" Cmd-line
7204 "s" Select
7205 "x" Visual
7206 "t" Terminal-Job
7207 "" Normal, Visual and Operator-pending
7208 "!" Insert and Cmd-line
7209 When {mode} is omitted, the modes for "" are used.
7210
7211 Returns a |Dictionary| containing the following items:
7212 accel menu item accelerator text |menu-text|
7213 display display name (name without '&')
7214 enabled v:true if this menu item is enabled
7215 Refer to |:menu-enable|
7216 icon name of the icon file (for toolbar)
7217 |toolbar-icon|
7218 iconidx index of a built-in icon
7219 modes modes for which the menu is defined. In
7220 addition to the modes mentioned above, these
7221 characters will be used:
7222 " " Normal, Visual and Operator-pending
7223 name menu item name.
7224 noremenu v:true if the {rhs} of the menu item is not
7225 remappable else v:false.
7226 priority menu order priority |menu-priority|
7227 rhs right-hand-side of the menu item. The returned
7228 string has special characters translated like
7229 in the output of the ":menu" command listing.
7230 When the {rhs} of a menu item is empty, then
7231 "<Nop>" is returned.
7232 script v:true if script-local remapping of {rhs} is
7233 allowed else v:false. See |:menu-script|.
7234 shortcut shortcut key (character after '&' in
7235 the menu name) |menu-shortcut|
7236 silent v:true if the menu item is created
7237 with <silent> argument |:menu-silent|
7238 submenus |List| containing the names of
7239 all the submenus. Present only if the menu
7240 item has submenus.
7241
7242 Returns an empty dictionary if the menu item is not found.
7243
7244 Examples: >
Bram Moolenaarff781552020-03-19 20:37:11 +01007245 :echo menu_info('Edit.Cut')
7246 :echo menu_info('File.Save', 'n')
Bram Moolenaar0eabd4d2020-03-15 16:13:53 +01007247<
7248 Can also be used as a |method|: >
Bram Moolenaarff781552020-03-19 20:37:11 +01007249 GetMenuName()->menu_info('v')
Bram Moolenaar0eabd4d2020-03-15 16:13:53 +01007250
7251
Bram Moolenaarac92e252019-08-03 21:58:38 +02007252< *min()*
Bram Moolenaar690afe12017-01-28 18:34:47 +01007253min({expr}) Return the minimum value of all items in {expr}.
Bram Moolenaar29634562020-01-09 21:46:04 +01007254 {expr} can be a List or a Dictionary. For a Dictionary,
7255 it returns the minimum of all values in the Dictionary.
7256 If {expr} is neither a List nor a Dictionary, or one of the
Bram Moolenaar690afe12017-01-28 18:34:47 +01007257 items in {expr} cannot be used as a Number this results in
Bram Moolenaarf8be4612017-06-23 20:52:40 +02007258 an error. An empty |List| or |Dictionary| results in zero.
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00007259
Bram Moolenaarac92e252019-08-03 21:58:38 +02007260 Can also be used as a |method|: >
7261 mylist->min()
7262
7263< *mkdir()* *E739*
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007264mkdir({name} [, {path} [, {prot}]])
7265 Create directory {name}.
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007266
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007267 If {path} is "p" then intermediate directories are created as
7268 necessary. Otherwise it must be "".
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007269
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007270 If {prot} is given it is used to set the protection bits of
7271 the new directory. The default is 0755 (rwxr-xr-x: r/w for
Bram Moolenaar58b85342016-08-14 19:54:54 +02007272 the user readable for others). Use 0700 to make it unreadable
Bram Moolenaared39e1d2008-08-09 17:55:22 +00007273 for others. This is only used for the last part of {name}.
7274 Thus if you create /tmp/foo/bar then /tmp/foo will be created
7275 with 0755.
7276 Example: >
7277 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007278
Bram Moolenaared39e1d2008-08-09 17:55:22 +00007279< This function is not available in the |sandbox|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007280
Bram Moolenaar78a16b02018-04-14 13:51:55 +02007281 There is no error if the directory already exists and the "p"
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007282 flag is passed (since patch 8.0.1708). However, without the
Bram Moolenaar10455d42019-11-21 15:36:18 +01007283 "p" option the call will fail.
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007284
Bram Moolenaar10455d42019-11-21 15:36:18 +01007285 The function result is a Number, which is 1 if the call was
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007286 successful or 0 if the directory creation failed or partly
7287 failed.
7288
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007289 Not available on all systems. To check use: >
7290 :if exists("*mkdir")
Bram Moolenaara1449832019-09-01 20:16:52 +02007291
7292< Can also be used as a |method|: >
7293 GetName()->mkdir()
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007294<
Bram Moolenaar071d4272004-06-13 20:20:40 +00007295 *mode()*
Bram Moolenaar446cb832008-06-24 21:56:24 +00007296mode([expr]) Return a string that indicates the current mode.
Bram Moolenaar05bb9532008-07-04 09:44:11 +00007297 If [expr] is supplied and it evaluates to a non-zero Number or
7298 a non-empty String (|non-zero-arg|), then the full mode is
Bram Moolenaare381d3d2016-07-07 14:50:41 +02007299 returned, otherwise only the first letter is returned.
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02007300 Also see |state()|.
Bram Moolenaar446cb832008-06-24 21:56:24 +00007301
Bram Moolenaar612cc382018-07-29 15:34:26 +02007302 n Normal, Terminal-Normal
7303 no Operator-pending
Bram Moolenaar5976f8f2018-12-27 23:44:44 +01007304 nov Operator-pending (forced characterwise |o_v|)
7305 noV Operator-pending (forced linewise |o_V|)
7306 noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|);
Bram Moolenaar5b69c222019-01-11 14:50:06 +01007307 CTRL-V is one character
Bram Moolenaar612cc382018-07-29 15:34:26 +02007308 niI Normal using |i_CTRL-O| in |Insert-mode|
7309 niR Normal using |i_CTRL-O| in |Replace-mode|
7310 niV Normal using |i_CTRL-O| in |Virtual-Replace-mode|
7311 v Visual by character
7312 V Visual by line
7313 CTRL-V Visual blockwise
7314 s Select by character
7315 S Select by line
7316 CTRL-S Select blockwise
7317 i Insert
7318 ic Insert mode completion |compl-generic|
7319 ix Insert mode |i_CTRL-X| completion
7320 R Replace |R|
7321 Rc Replace mode completion |compl-generic|
7322 Rv Virtual Replace |gR|
7323 Rx Replace mode |i_CTRL-X| completion
7324 c Command-line editing
7325 cv Vim Ex mode |gQ|
7326 ce Normal Ex mode |Q|
7327 r Hit-enter prompt
7328 rm The -- more -- prompt
7329 r? A |:confirm| query of some sort
7330 ! Shell or external command is executing
7331 t Terminal-Job mode: keys go to the job
Bram Moolenaar446cb832008-06-24 21:56:24 +00007332 This is useful in the 'statusline' option or when used
7333 with |remote_expr()| In most other places it always returns
7334 "c" or "n".
Bram Moolenaar612cc382018-07-29 15:34:26 +02007335 Note that in the future more modes and more specific modes may
7336 be added. It's better not to compare the whole string but only
7337 the leading character(s).
Bram Moolenaar446cb832008-06-24 21:56:24 +00007338 Also see |visualmode()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007339
Bram Moolenaara1449832019-09-01 20:16:52 +02007340 Can also be used as a |method|: >
7341 DoFull()->mode()
7342
Bram Moolenaar7e506b62010-01-19 15:55:06 +01007343mzeval({expr}) *mzeval()*
7344 Evaluate MzScheme expression {expr} and return its result
Bram Moolenaard38b0552012-04-25 19:07:41 +02007345 converted to Vim data structures.
Bram Moolenaar7e506b62010-01-19 15:55:06 +01007346 Numbers and strings are returned as they are.
7347 Pairs (including lists and improper lists) and vectors are
7348 returned as Vim |Lists|.
7349 Hash tables are represented as Vim |Dictionary| type with keys
7350 converted to strings.
7351 All other types are converted to string with display function.
7352 Examples: >
7353 :mz (define l (list 1 2 3))
7354 :mz (define h (make-hash)) (hash-set! h "list" l)
7355 :echo mzeval("l")
7356 :echo mzeval("h")
7357<
Bram Moolenaara1449832019-09-01 20:16:52 +02007358 Can also be used as a |method|: >
7359 GetExpr()->mzeval()
7360<
Bram Moolenaar7e506b62010-01-19 15:55:06 +01007361 {only available when compiled with the |+mzscheme| feature}
7362
Bram Moolenaar071d4272004-06-13 20:20:40 +00007363nextnonblank({lnum}) *nextnonblank()*
7364 Return the line number of the first line at or below {lnum}
7365 that is not blank. Example: >
7366 if getline(nextnonblank(1)) =~ "Java"
7367< When {lnum} is invalid or there is no non-blank line at or
7368 below it, zero is returned.
7369 See also |prevnonblank()|.
7370
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007371 Can also be used as a |method|: >
7372 GetLnum()->nextnonblank()
7373
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007374nr2char({expr} [, {utf8}]) *nr2char()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00007375 Return a string with a single character, which has the number
7376 value {expr}. Examples: >
7377 nr2char(64) returns "@"
7378 nr2char(32) returns " "
Bram Moolenaard35d7842013-01-23 17:17:10 +01007379< When {utf8} is omitted or zero, the current 'encoding' is used.
7380 Example for "utf-8": >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007381 nr2char(300) returns I with bow character
Bram Moolenaard35d7842013-01-23 17:17:10 +01007382< With {utf8} set to 1, always return utf-8 characters.
7383 Note that a NUL character in the file is specified with
Bram Moolenaar071d4272004-06-13 20:20:40 +00007384 nr2char(10), because NULs are represented with newline
7385 characters. nr2char(0) is a real NUL and terminates the
Bram Moolenaar383f9bc2005-01-19 22:18:32 +00007386 string, thus results in an empty string.
Bram Moolenaaraff74912019-03-30 18:11:49 +01007387 To turn a list of character numbers into a string: >
7388 let list = [65, 66, 67]
7389 let str = join(map(list, {_, val -> nr2char(val)}), '')
7390< Result: "ABC"
Bram Moolenaar071d4272004-06-13 20:20:40 +00007391
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007392 Can also be used as a |method|: >
7393 GetNumber()->nr2char()
Bram Moolenaar073e4b92019-08-18 23:01:56 +02007394
Bram Moolenaard6e256c2011-12-14 15:32:50 +01007395or({expr}, {expr}) *or()*
7396 Bitwise OR on the two arguments. The arguments are converted
7397 to a number. A List, Dict or Float argument causes an error.
7398 Example: >
7399 :let bits = or(bits, 0x80)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02007400< Can also be used as a |method|: >
7401 :let bits = bits->or(0x80)
Bram Moolenaard6e256c2011-12-14 15:32:50 +01007402
7403
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007404pathshorten({expr}) *pathshorten()*
7405 Shorten directory names in the path {expr} and return the
7406 result. The tail, the file name, is kept as-is. The other
7407 components in the path are reduced to single letters. Leading
7408 '~' and '.' characters are kept. Example: >
7409 :echo pathshorten('~/.vim/autoload/myfile.vim')
7410< ~/.v/a/myfile.vim ~
7411 It doesn't matter if the path exists or not.
7412
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007413 Can also be used as a |method|: >
7414 GetDirectories()->pathshorten()
7415
Bram Moolenaare9b892e2016-01-17 21:15:58 +01007416perleval({expr}) *perleval()*
7417 Evaluate Perl expression {expr} in scalar context and return
7418 its result converted to Vim data structures. If value can't be
Bram Moolenaar85084ef2016-01-17 22:26:33 +01007419 converted, it is returned as a string Perl representation.
7420 Note: If you want an array or hash, {expr} must return a
7421 reference to it.
Bram Moolenaare9b892e2016-01-17 21:15:58 +01007422 Example: >
7423 :echo perleval('[1 .. 4]')
7424< [1, 2, 3, 4]
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007425
7426 Can also be used as a |method|: >
7427 GetExpr()->perleval()
7428
7429< {only available when compiled with the |+perl| feature}
Bram Moolenaare9b892e2016-01-17 21:15:58 +01007430
Bram Moolenaar931a2772019-07-04 16:54:54 +02007431
7432popup_ functions are documented here: |popup-functions|.
7433
7434
Bram Moolenaar446cb832008-06-24 21:56:24 +00007435pow({x}, {y}) *pow()*
7436 Return the power of {x} to the exponent {y} as a |Float|.
7437 {x} and {y} must evaluate to a |Float| or a |Number|.
7438 Examples: >
7439 :echo pow(3, 3)
7440< 27.0 >
7441 :echo pow(2, 16)
7442< 65536.0 >
7443 :echo pow(32, 0.20)
7444< 2.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02007445
7446 Can also be used as a |method|: >
7447 Compute()->pow(3)
7448<
Bram Moolenaar446cb832008-06-24 21:56:24 +00007449 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007450
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00007451prevnonblank({lnum}) *prevnonblank()*
7452 Return the line number of the first line at or above {lnum}
7453 that is not blank. Example: >
7454 let ind = indent(prevnonblank(v:lnum - 1))
7455< When {lnum} is invalid or there is no non-blank line at or
7456 above it, zero is returned.
7457 Also see |nextnonblank()|.
7458
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007459 Can also be used as a |method|: >
7460 GetLnum()->prevnonblank()
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00007461
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007462printf({fmt}, {expr1} ...) *printf()*
7463 Return a String with {fmt}, where "%" items are replaced by
7464 the formatted form of their respective arguments. Example: >
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007465 printf("%4d: E%d %.30s", lnum, errno, msg)
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007466< May result in:
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007467 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007468
Bram Moolenaarfd8ca212019-08-10 00:13:30 +02007469 When used as a |method| the base is passed as the second
7470 argument: >
7471 Compute()->printf("result: %d")
7472
7473< Often used items are:
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007474 %s string
Bram Moolenaar3ab72c52012-11-14 18:10:56 +01007475 %6S string right-aligned in 6 display cells
Bram Moolenaar98692072006-02-04 00:57:42 +00007476 %6s string right-aligned in 6 bytes
Bram Moolenaar446cb832008-06-24 21:56:24 +00007477 %.9s string truncated to 9 bytes
7478 %c single byte
7479 %d decimal number
7480 %5d decimal number padded with spaces to 5 characters
7481 %x hex number
7482 %04x hex number padded with zeros to at least 4 characters
7483 %X hex number using upper case letters
7484 %o octal number
Bram Moolenaar91984b92016-08-16 21:58:41 +02007485 %08b binary number padded with zeros to at least 8 chars
Bram Moolenaar04186092016-08-29 21:55:35 +02007486 %f floating point number as 12.23, inf, -inf or nan
7487 %F floating point number as 12.23, INF, -INF or NAN
7488 %e floating point number as 1.23e3, inf, -inf or nan
7489 %E floating point number as 1.23E3, INF, -INF or NAN
Bram Moolenaar446cb832008-06-24 21:56:24 +00007490 %g floating point number, as %f or %e depending on value
Bram Moolenaar3df01732017-02-17 22:47:16 +01007491 %G floating point number, as %F or %E depending on value
Bram Moolenaar446cb832008-06-24 21:56:24 +00007492 %% the % character itself
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007493
7494 Conversion specifications start with '%' and end with the
7495 conversion type. All other characters are copied unchanged to
7496 the result.
7497
7498 The "%" starts a conversion specification. The following
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007499 arguments appear in sequence:
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007500
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007501 % [flags] [field-width] [.precision] type
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007502
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007503 flags
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007504 Zero or more of the following flags:
7505
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007506 # The value should be converted to an "alternate
7507 form". For c, d, and s conversions, this option
7508 has no effect. For o conversions, the precision
7509 of the number is increased to force the first
7510 character of the output string to a zero (except
7511 if a zero value is printed with an explicit
7512 precision of zero).
Bram Moolenaar91984b92016-08-16 21:58:41 +02007513 For b and B conversions, a non-zero result has
7514 the string "0b" (or "0B" for B conversions)
7515 prepended to it.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007516 For x and X conversions, a non-zero result has
7517 the string "0x" (or "0X" for X conversions)
7518 prepended to it.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007519
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007520 0 (zero) Zero padding. For all conversions the converted
7521 value is padded on the left with zeros rather
7522 than blanks. If a precision is given with a
Bram Moolenaar91984b92016-08-16 21:58:41 +02007523 numeric conversion (d, b, B, o, x, and X), the 0
7524 flag is ignored.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007525
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007526 - A negative field width flag; the converted value
7527 is to be left adjusted on the field boundary.
7528 The converted value is padded on the right with
7529 blanks, rather than on the left with blanks or
7530 zeros. A - overrides a 0 if both are given.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007531
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007532 ' ' (space) A blank should be left before a positive
7533 number produced by a signed conversion (d).
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007534
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007535 + A sign must always be placed before a number
Bram Moolenaar58b85342016-08-14 19:54:54 +02007536 produced by a signed conversion. A + overrides
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007537 a space if both are used.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007538
7539 field-width
7540 An optional decimal digit string specifying a minimum
Bram Moolenaar98692072006-02-04 00:57:42 +00007541 field width. If the converted value has fewer bytes
7542 than the field width, it will be padded with spaces on
7543 the left (or right, if the left-adjustment flag has
7544 been given) to fill out the field width.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007545
7546 .precision
7547 An optional precision, in the form of a period '.'
7548 followed by an optional digit string. If the digit
7549 string is omitted, the precision is taken as zero.
7550 This gives the minimum number of digits to appear for
7551 d, o, x, and X conversions, or the maximum number of
Bram Moolenaar98692072006-02-04 00:57:42 +00007552 bytes to be printed from a string for s conversions.
Bram Moolenaar446cb832008-06-24 21:56:24 +00007553 For floating point it is the number of digits after
7554 the decimal point.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007555
7556 type
7557 A character that specifies the type of conversion to
7558 be applied, see below.
7559
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007560 A field width or precision, or both, may be indicated by an
7561 asterisk '*' instead of a digit string. In this case, a
Bram Moolenaar58b85342016-08-14 19:54:54 +02007562 Number argument supplies the field width or precision. A
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007563 negative field width is treated as a left adjustment flag
7564 followed by a positive field width; a negative precision is
7565 treated as though it were missing. Example: >
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007566 :echo printf("%d: %.*s", nr, width, line)
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007567< This limits the length of the text used from "line" to
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007568 "width" bytes.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007569
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007570 The conversion specifiers and their meanings are:
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007571
Bram Moolenaar91984b92016-08-16 21:58:41 +02007572 *printf-d* *printf-b* *printf-B* *printf-o*
7573 *printf-x* *printf-X*
7574 dbBoxX The Number argument is converted to signed decimal
7575 (d), unsigned binary (b and B), unsigned octal (o), or
7576 unsigned hexadecimal (x and X) notation. The letters
7577 "abcdef" are used for x conversions; the letters
7578 "ABCDEF" are used for X conversions.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007579 The precision, if any, gives the minimum number of
7580 digits that must appear; if the converted value
7581 requires fewer digits, it is padded on the left with
7582 zeros.
7583 In no case does a non-existent or small field width
7584 cause truncation of a numeric field; if the result of
7585 a conversion is wider than the field width, the field
7586 is expanded to contain the conversion result.
Bram Moolenaar30567352016-08-27 21:25:44 +02007587 The 'h' modifier indicates the argument is 16 bits.
7588 The 'l' modifier indicates the argument is 32 bits.
7589 The 'L' modifier indicates the argument is 64 bits.
7590 Generally, these modifiers are not useful. They are
7591 ignored when type is known from the argument.
7592
7593 i alias for d
7594 D alias for ld
7595 U alias for lu
7596 O alias for lo
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007597
Bram Moolenaar446cb832008-06-24 21:56:24 +00007598 *printf-c*
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007599 c The Number argument is converted to a byte, and the
7600 resulting character is written.
7601
Bram Moolenaar446cb832008-06-24 21:56:24 +00007602 *printf-s*
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007603 s The text of the String argument is used. If a
7604 precision is specified, no more bytes than the number
7605 specified are used.
Bram Moolenaar7571d552016-08-18 22:54:46 +02007606 If the argument is not a String type, it is
7607 automatically converted to text with the same format
7608 as ":echo".
Bram Moolenaar0122c402015-02-03 19:13:34 +01007609 *printf-S*
Bram Moolenaar3ab72c52012-11-14 18:10:56 +01007610 S The text of the String argument is used. If a
7611 precision is specified, no more display cells than the
Bram Moolenaar4c92e752019-02-17 21:18:32 +01007612 number specified are used.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007613
Bram Moolenaar446cb832008-06-24 21:56:24 +00007614 *printf-f* *E807*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007615 f F The Float argument is converted into a string of the
Bram Moolenaar446cb832008-06-24 21:56:24 +00007616 form 123.456. The precision specifies the number of
7617 digits after the decimal point. When the precision is
7618 zero the decimal point is omitted. When the precision
7619 is not specified 6 is used. A really big number
Bram Moolenaar04186092016-08-29 21:55:35 +02007620 (out of range or dividing by zero) results in "inf"
Bram Moolenaarf8be4612017-06-23 20:52:40 +02007621 or "-inf" with %f (INF or -INF with %F).
7622 "0.0 / 0.0" results in "nan" with %f (NAN with %F).
Bram Moolenaar446cb832008-06-24 21:56:24 +00007623 Example: >
7624 echo printf("%.2f", 12.115)
7625< 12.12
7626 Note that roundoff depends on the system libraries.
7627 Use |round()| when in doubt.
7628
7629 *printf-e* *printf-E*
7630 e E The Float argument is converted into a string of the
7631 form 1.234e+03 or 1.234E+03 when using 'E'. The
7632 precision specifies the number of digits after the
7633 decimal point, like with 'f'.
7634
7635 *printf-g* *printf-G*
7636 g G The Float argument is converted like with 'f' if the
7637 value is between 0.001 (inclusive) and 10000000.0
7638 (exclusive). Otherwise 'e' is used for 'g' and 'E'
7639 for 'G'. When no precision is specified superfluous
7640 zeroes and '+' signs are removed, except for the zero
7641 immediately after the decimal point. Thus 10000000.0
7642 results in 1.0e7.
7643
7644 *printf-%*
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007645 % A '%' is written. No argument is converted. The
7646 complete conversion specification is "%%".
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007647
Bram Moolenaarc236c162008-07-13 17:41:49 +00007648 When a Number argument is expected a String argument is also
7649 accepted and automatically converted.
7650 When a Float or String argument is expected a Number argument
7651 is also accepted and automatically converted.
7652 Any other argument type results in an error message.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007653
Bram Moolenaar83bab712005-08-01 21:58:57 +00007654 *E766* *E767*
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007655 The number of {exprN} arguments must exactly match the number
7656 of "%" items. If there are not sufficient or too many
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007657 arguments an error is given. Up to 18 arguments can be used.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007658
7659
Bram Moolenaarf2732452018-06-03 14:47:35 +02007660prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007661 Set prompt callback for buffer {buf} to {expr}. When {expr}
7662 is an empty string the callback is removed. This has only
Bram Moolenaarf2732452018-06-03 14:47:35 +02007663 effect if {buf} has 'buftype' set to "prompt".
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007664
Bram Moolenaarf2732452018-06-03 14:47:35 +02007665 The callback is invoked when pressing Enter. The current
7666 buffer will always be the prompt buffer. A new line for a
7667 prompt is added before invoking the callback, thus the prompt
7668 for which the callback was invoked will be in the last but one
7669 line.
7670 If the callback wants to add text to the buffer, it must
7671 insert it above the last line, since that is where the current
7672 prompt is. This can also be done asynchronously.
7673 The callback is invoked with one argument, which is the text
7674 that was entered at the prompt. This can be an empty string
7675 if the user only typed Enter.
7676 Example: >
Bram Moolenaara8eee212019-08-24 22:14:58 +02007677 call prompt_setcallback(bufnr(), function('s:TextEntered'))
Bram Moolenaarf2732452018-06-03 14:47:35 +02007678 func s:TextEntered(text)
7679 if a:text == 'exit' || a:text == 'quit'
7680 stopinsert
7681 close
7682 else
7683 call append(line('$') - 1, 'Entered: "' . a:text . '"')
7684 " Reset 'modified' to allow the buffer to be closed.
7685 set nomodified
7686 endif
7687 endfunc
7688
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007689< Can also be used as a |method|: >
7690 GetBuffer()->prompt_setcallback(callback)
7691
7692
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007693prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
7694 Set a callback for buffer {buf} to {expr}. When {expr} is an
7695 empty string the callback is removed. This has only effect if
7696 {buf} has 'buftype' set to "prompt".
7697
7698 This callback will be invoked when pressing CTRL-C in Insert
7699 mode. Without setting a callback Vim will exit Insert mode,
7700 as in any buffer.
7701
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007702 Can also be used as a |method|: >
7703 GetBuffer()->prompt_setinterrupt(callback)
7704
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007705prompt_setprompt({buf}, {text}) *prompt_setprompt()*
7706 Set prompt for buffer {buf} to {text}. You most likely want
7707 {text} to end in a space.
7708 The result is only visible if {buf} has 'buftype' set to
7709 "prompt". Example: >
Bram Moolenaara8eee212019-08-24 22:14:58 +02007710 call prompt_setprompt(bufnr(), 'command: ')
Bram Moolenaar98aefe72018-12-13 22:20:09 +01007711<
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007712 Can also be used as a |method|: >
7713 GetBuffer()->prompt_setprompt('command: ')
7714
Bram Moolenaared997ad2019-07-21 16:42:00 +02007715prop_ functions are documented here: |text-prop-functions|.
Bram Moolenaarf2732452018-06-03 14:47:35 +02007716
Bram Moolenaare9bd5722019-08-17 19:36:06 +02007717pum_getpos() *pum_getpos()*
7718 If the popup menu (see |ins-completion-menu|) is not visible,
7719 returns an empty |Dictionary|, otherwise, returns a
7720 |Dictionary| with the following keys:
7721 height nr of items visible
7722 width screen cells
7723 row top screen row (0 first row)
7724 col leftmost screen column (0 first col)
7725 size total nr of items
Bram Moolenaar96f45c02019-10-26 19:53:45 +02007726 scrollbar |TRUE| if scrollbar is visible
Bram Moolenaare9bd5722019-08-17 19:36:06 +02007727
7728 The values are the same as in |v:event| during
7729 |CompleteChanged|.
7730
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00007731pumvisible() *pumvisible()*
7732 Returns non-zero when the popup menu is visible, zero
7733 otherwise. See |ins-completion-menu|.
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00007734 This can be used to avoid some things that would remove the
7735 popup menu.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007736
Bram Moolenaar30b65812012-07-12 22:01:11 +02007737py3eval({expr}) *py3eval()*
7738 Evaluate Python expression {expr} and return its result
7739 converted to Vim data structures.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007740 Numbers and strings are returned as they are (strings are
7741 copied though, Unicode strings are additionally converted to
Bram Moolenaar30b65812012-07-12 22:01:11 +02007742 'encoding').
7743 Lists are represented as Vim |List| type.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007744 Dictionaries are represented as Vim |Dictionary| type with
Bram Moolenaar30b65812012-07-12 22:01:11 +02007745 keys converted to strings.
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007746
7747 Can also be used as a |method|: >
7748 GetExpr()->py3eval()
7749
7750< {only available when compiled with the |+python3| feature}
Bram Moolenaar30b65812012-07-12 22:01:11 +02007751
7752 *E858* *E859*
7753pyeval({expr}) *pyeval()*
7754 Evaluate Python expression {expr} and return its result
7755 converted to Vim data structures.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007756 Numbers and strings are returned as they are (strings are
Bram Moolenaar30b65812012-07-12 22:01:11 +02007757 copied though).
7758 Lists are represented as Vim |List| type.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007759 Dictionaries are represented as Vim |Dictionary| type,
Bram Moolenaard09acef2012-09-21 14:54:30 +02007760 non-string keys result in error.
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007761
7762 Can also be used as a |method|: >
7763 GetExpr()->pyeval()
7764
7765< {only available when compiled with the |+python| feature}
Bram Moolenaar30b65812012-07-12 22:01:11 +02007766
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01007767pyxeval({expr}) *pyxeval()*
7768 Evaluate Python expression {expr} and return its result
7769 converted to Vim data structures.
7770 Uses Python 2 or 3, see |python_x| and 'pyxversion'.
7771 See also: |pyeval()|, |py3eval()|
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007772
7773 Can also be used as a |method|: >
7774 GetExpr()->pyxeval()
7775
7776< {only available when compiled with the |+python| or the
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01007777 |+python3| feature}
7778
Bram Moolenaar3a3a7232005-01-17 22:16:15 +00007779 *E726* *E727*
Bram Moolenaard8b02732005-01-14 21:48:43 +00007780range({expr} [, {max} [, {stride}]]) *range()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007781 Returns a |List| with Numbers:
Bram Moolenaard8b02732005-01-14 21:48:43 +00007782 - If only {expr} is specified: [0, 1, ..., {expr} - 1]
7783 - If {max} is specified: [{expr}, {expr} + 1, ..., {max}]
7784 - If {stride} is specified: [{expr}, {expr} + {stride}, ...,
7785 {max}] (increasing {expr} with {stride} each time, not
7786 producing a value past {max}).
Bram Moolenaare7566042005-06-17 22:00:15 +00007787 When the maximum is one before the start the result is an
7788 empty list. When the maximum is more than one before the
7789 start this is an error.
Bram Moolenaard8b02732005-01-14 21:48:43 +00007790 Examples: >
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007791 range(4) " [0, 1, 2, 3]
Bram Moolenaard8b02732005-01-14 21:48:43 +00007792 range(2, 4) " [2, 3, 4]
7793 range(2, 9, 3) " [2, 5, 8]
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007794 range(2, -2, -1) " [2, 1, 0, -1, -2]
Bram Moolenaare7566042005-06-17 22:00:15 +00007795 range(0) " []
7796 range(2, 0) " error!
Bram Moolenaard8b02732005-01-14 21:48:43 +00007797<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007798 Can also be used as a |method|: >
7799 GetExpr()->range()
7800<
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01007801
Bram Moolenaar2c7f8c52020-04-20 19:52:53 +02007802rand([{expr}]) *rand()* *random*
Bram Moolenaarf8c1f922019-11-28 22:13:14 +01007803 Return a pseudo-random Number generated with an xoshiro128**
Bram Moolenaar0c0734d2019-11-26 21:44:46 +01007804 algorithm using seed {expr}. The returned number is 32 bits,
7805 also on 64 bits systems, for consistency.
7806 {expr} can be initialized by |srand()| and will be updated by
7807 rand(). If {expr} is omitted, an internal seed value is used
7808 and updated.
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01007809
7810 Examples: >
7811 :echo rand()
7812 :let seed = srand()
7813 :echo rand(seed)
Bram Moolenaar0c0734d2019-11-26 21:44:46 +01007814 :echo rand(seed) % 16 " random number 0 - 15
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01007815<
Bram Moolenaar543c9b12019-04-05 22:50:40 +02007816 *readdir()*
7817readdir({directory} [, {expr}])
7818 Return a list with file and directory names in {directory}.
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02007819 You can also use |glob()| if you don't need to do complicated
7820 things, such as limiting the number of matches.
Bram Moolenaar543c9b12019-04-05 22:50:40 +02007821
7822 When {expr} is omitted all entries are included.
7823 When {expr} is given, it is evaluated to check what to do:
7824 If {expr} results in -1 then no further entries will
7825 be handled.
7826 If {expr} results in 0 then this entry will not be
7827 added to the list.
7828 If {expr} results in 1 then this entry will be added
7829 to the list.
7830 Each time {expr} is evaluated |v:val| is set to the entry name.
7831 When {expr} is a function the name is passed as the argument.
7832 For example, to get a list of files ending in ".txt": >
7833 readdir(dirname, {n -> n =~ '.txt$'})
7834< To skip hidden and backup files: >
7835 readdir(dirname, {n -> n !~ '^\.\|\~$'})
7836
7837< If you want to get a directory tree: >
7838 function! s:tree(dir)
7839 return {a:dir : map(readdir(a:dir),
7840 \ {_, x -> isdirectory(x) ?
7841 \ {x : s:tree(a:dir . '/' . x)} : x})}
7842 endfunction
7843 echo s:tree(".")
7844<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007845 Can also be used as a |method|: >
7846 GetDirName()->readdir()
7847<
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007848 *readfile()*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007849readfile({fname} [, {type} [, {max}]])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007850 Read file {fname} and return a |List|, each line of the file
Bram Moolenaar6100d022016-10-02 16:51:57 +02007851 as an item. Lines are broken at NL characters. Macintosh
7852 files separated with CR will result in a single long line
7853 (unless a NL appears somewhere).
Bram Moolenaar06583f12010-08-07 20:30:49 +02007854 All NUL characters are replaced with a NL character.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007855 When {type} contains "b" binary mode is used:
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007856 - When the last line ends in a NL an extra empty list item is
7857 added.
7858 - No CR characters are removed.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007859 When {type} contains "B" a |Blob| is returned with the binary
7860 data of the file unmodified.
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007861 Otherwise:
7862 - CR characters that appear before a NL are removed.
7863 - Whether the last line ends in a NL or not does not matter.
Bram Moolenaar06583f12010-08-07 20:30:49 +02007864 - When 'encoding' is Unicode any UTF-8 byte order mark is
7865 removed from the text.
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007866 When {max} is given this specifies the maximum number of lines
7867 to be read. Useful if you only want to check the first ten
7868 lines of a file: >
7869 :for line in readfile(fname, '', 10)
7870 : if line =~ 'Date' | echo line | endif
7871 :endfor
Bram Moolenaar582fd852005-03-28 20:58:01 +00007872< When {max} is negative -{max} lines from the end of the file
7873 are returned, or as many as there are.
7874 When {max} is zero the result is an empty list.
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007875 Note that without {max} the whole file is read into memory.
7876 Also note that there is no recognition of encoding. Read a
7877 file into a buffer if you need to.
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007878 When the file can't be opened an error message is given and
7879 the result is an empty list.
7880 Also see |writefile()|.
7881
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007882 Can also be used as a |method|: >
7883 GetFileName()->readfile()
7884
Bram Moolenaar0b6d9112018-05-22 20:35:17 +02007885reg_executing() *reg_executing()*
7886 Returns the single letter name of the register being executed.
7887 Returns an empty string when no register is being executed.
7888 See |@|.
7889
7890reg_recording() *reg_recording()*
7891 Returns the single letter name of the register being recorded.
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02007892 Returns an empty string when not recording. See |q|.
Bram Moolenaar0b6d9112018-05-22 20:35:17 +02007893
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007894reltime([{start} [, {end}]]) *reltime()*
7895 Return an item that represents a time value. The format of
7896 the item depends on the system. It can be passed to
Bram Moolenaar03413f42016-04-12 21:07:15 +02007897 |reltimestr()| to convert it to a string or |reltimefloat()|
7898 to convert to a Float.
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007899 Without an argument it returns the current time.
7900 With one argument is returns the time passed since the time
7901 specified in the argument.
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00007902 With two arguments it returns the time passed between {start}
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007903 and {end}.
7904 The {start} and {end} arguments must be values returned by
7905 reltime().
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007906
7907 Can also be used as a |method|: >
7908 GetStart()->reltime()
7909<
Bram Moolenaardb84e452010-08-15 13:50:43 +02007910 {only available when compiled with the |+reltime| feature}
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007911
Bram Moolenaar03413f42016-04-12 21:07:15 +02007912reltimefloat({time}) *reltimefloat()*
7913 Return a Float that represents the time value of {time}.
7914 Example: >
7915 let start = reltime()
7916 call MyFunction()
7917 let seconds = reltimefloat(reltime(start))
7918< See the note of reltimestr() about overhead.
7919 Also see |profiling|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007920
7921 Can also be used as a |method|: >
7922 reltime(start)->reltimefloat()
7923
7924< {only available when compiled with the |+reltime| feature}
Bram Moolenaar03413f42016-04-12 21:07:15 +02007925
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007926reltimestr({time}) *reltimestr()*
7927 Return a String that represents the time value of {time}.
7928 This is the number of seconds, a dot and the number of
7929 microseconds. Example: >
7930 let start = reltime()
7931 call MyFunction()
7932 echo reltimestr(reltime(start))
7933< Note that overhead for the commands will be added to the time.
7934 The accuracy depends on the system.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00007935 Leading spaces are used to make the string align nicely. You
7936 can use split() to remove it. >
7937 echo split(reltimestr(reltime(start)))[0]
7938< Also see |profiling|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007939
7940 Can also be used as a |method|: >
7941 reltime(start)->reltimestr()
7942
7943< {only available when compiled with the |+reltime| feature}
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007944
Bram Moolenaar071d4272004-06-13 20:20:40 +00007945 *remote_expr()* *E449*
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007946remote_expr({server}, {string} [, {idvar} [, {timeout}]])
Bram Moolenaar58b85342016-08-14 19:54:54 +02007947 Send the {string} to {server}. The string is sent as an
Bram Moolenaar071d4272004-06-13 20:20:40 +00007948 expression and the result is returned after evaluation.
Bram Moolenaar362e1a32006-03-06 23:29:24 +00007949 The result must be a String or a |List|. A |List| is turned
7950 into a String by joining the items with a line break in
7951 between (not at the end), like with join(expr, "\n").
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007952 If {idvar} is present and not empty, it is taken as the name
7953 of a variable and a {serverid} for later use with
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01007954 |remote_read()| is stored there.
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007955 If {timeout} is given the read times out after this many
7956 seconds. Otherwise a timeout of 600 seconds is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007957 See also |clientserver| |RemoteReply|.
7958 This function is not available in the |sandbox|.
7959 {only available when compiled with the |+clientserver| feature}
7960 Note: Any errors will cause a local error message to be issued
7961 and the result will be the empty string.
Bram Moolenaar01164a62017-11-02 22:58:42 +01007962
7963 Variables will be evaluated in the global namespace,
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007964 independent of a function currently being active. Except
Bram Moolenaar01164a62017-11-02 22:58:42 +01007965 when in debug mode, then local function variables and
7966 arguments can be evaluated.
7967
Bram Moolenaar071d4272004-06-13 20:20:40 +00007968 Examples: >
7969 :echo remote_expr("gvim", "2+2")
7970 :echo remote_expr("gvim1", "b:current_syntax")
7971<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007972 Can also be used as a |method|: >
7973 ServerName()->remote_expr(expr)
Bram Moolenaar071d4272004-06-13 20:20:40 +00007974
7975remote_foreground({server}) *remote_foreground()*
7976 Move the Vim server with the name {server} to the foreground.
7977 This works like: >
7978 remote_expr({server}, "foreground()")
7979< Except that on Win32 systems the client does the work, to work
7980 around the problem that the OS doesn't always allow the server
7981 to bring itself to the foreground.
Bram Moolenaar9372a112005-12-06 19:59:18 +00007982 Note: This does not restore the window if it was minimized,
7983 like foreground() does.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007984 This function is not available in the |sandbox|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007985
7986 Can also be used as a |method|: >
7987 ServerName()->remote_foreground()
7988
7989< {only in the Win32, Athena, Motif and GTK GUI versions and the
Bram Moolenaar071d4272004-06-13 20:20:40 +00007990 Win32 console version}
7991
7992
7993remote_peek({serverid} [, {retvar}]) *remote_peek()*
7994 Returns a positive number if there are available strings
7995 from {serverid}. Copies any reply string into the variable
Bram Moolenaar58b85342016-08-14 19:54:54 +02007996 {retvar} if specified. {retvar} must be a string with the
Bram Moolenaar071d4272004-06-13 20:20:40 +00007997 name of a variable.
7998 Returns zero if none are available.
7999 Returns -1 if something is wrong.
8000 See also |clientserver|.
8001 This function is not available in the |sandbox|.
8002 {only available when compiled with the |+clientserver| feature}
8003 Examples: >
8004 :let repl = ""
8005 :echo "PEEK: ".remote_peek(id, "repl").": ".repl
8006
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008007< Can also be used as a |method|: >
8008 ServerId()->remote_peek()
8009
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01008010remote_read({serverid}, [{timeout}]) *remote_read()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00008011 Return the oldest available reply from {serverid} and consume
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01008012 it. Unless a {timeout} in seconds is given, it blocks until a
8013 reply is available.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008014 See also |clientserver|.
8015 This function is not available in the |sandbox|.
8016 {only available when compiled with the |+clientserver| feature}
8017 Example: >
8018 :echo remote_read(id)
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008019
8020< Can also be used as a |method|: >
8021 ServerId()->remote_read()
Bram Moolenaar071d4272004-06-13 20:20:40 +00008022<
8023 *remote_send()* *E241*
8024remote_send({server}, {string} [, {idvar}])
Bram Moolenaar58b85342016-08-14 19:54:54 +02008025 Send the {string} to {server}. The string is sent as input
Bram Moolenaard4755bb2004-09-02 19:12:26 +00008026 keys and the function returns immediately. At the Vim server
8027 the keys are not mapped |:map|.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00008028 If {idvar} is present, it is taken as the name of a variable
8029 and a {serverid} for later use with remote_read() is stored
8030 there.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008031 See also |clientserver| |RemoteReply|.
8032 This function is not available in the |sandbox|.
8033 {only available when compiled with the |+clientserver| feature}
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01008034
Bram Moolenaar071d4272004-06-13 20:20:40 +00008035 Note: Any errors will be reported in the server and may mess
8036 up the display.
8037 Examples: >
8038 :echo remote_send("gvim", ":DropAndReply ".file, "serverid").
8039 \ remote_read(serverid)
8040
8041 :autocmd NONE RemoteReply *
8042 \ echo remote_read(expand("<amatch>"))
8043 :echo remote_send("gvim", ":sleep 10 | echo ".
8044 \ 'server2client(expand("<client>"), "HELLO")<CR>')
Bram Moolenaara14de3d2005-01-07 21:48:26 +00008045<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008046 Can also be used as a |method|: >
8047 ServerName()->remote_send(keys)
8048<
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01008049 *remote_startserver()* *E941* *E942*
8050remote_startserver({name})
8051 Become the server {name}. This fails if already running as a
8052 server, when |v:servername| is not empty.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008053
8054 Can also be used as a |method|: >
8055 ServerName()->remote_startserver()
8056
8057< {only available when compiled with the |+clientserver| feature}
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01008058
Bram Moolenaarde8866b2005-01-06 23:24:37 +00008059remove({list}, {idx} [, {end}]) *remove()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00008060 Without {end}: Remove the item at {idx} from |List| {list} and
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008061 return the item.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00008062 With {end}: Remove items from {idx} to {end} (inclusive) and
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008063 return a List with these items. When {idx} points to the same
Bram Moolenaarde8866b2005-01-06 23:24:37 +00008064 item as {end} a list with one item is returned. When {end}
8065 points to an item before {idx} this is an error.
8066 See |list-index| for possible values of {idx} and {end}.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00008067 Example: >
8068 :echo "last item: " . remove(mylist, -1)
Bram Moolenaarde8866b2005-01-06 23:24:37 +00008069 :call remove(mylist, 0, 9)
Bram Moolenaar39536dd2019-01-29 22:58:21 +01008070<
8071 Use |delete()| to remove a file.
8072
Bram Moolenaarac92e252019-08-03 21:58:38 +02008073 Can also be used as a |method|: >
8074 mylist->remove(idx)
8075
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01008076remove({blob}, {idx} [, {end}])
8077 Without {end}: Remove the byte at {idx} from |Blob| {blob} and
8078 return the byte.
8079 With {end}: Remove bytes from {idx} to {end} (inclusive) and
8080 return a |Blob| with these bytes. When {idx} points to the same
8081 byte as {end} a |Blob| with one byte is returned. When {end}
8082 points to a byte before {idx} this is an error.
8083 Example: >
8084 :echo "last byte: " . remove(myblob, -1)
8085 :call remove(mylist, 0, 9)
Bram Moolenaar39536dd2019-01-29 22:58:21 +01008086
Bram Moolenaard8b02732005-01-14 21:48:43 +00008087remove({dict}, {key})
Bram Moolenaar54775062019-07-31 21:07:14 +02008088 Remove the entry from {dict} with key {key} and return it.
8089 Example: >
Bram Moolenaard8b02732005-01-14 21:48:43 +00008090 :echo "removed " . remove(dict, "one")
8091< If there is no {key} in {dict} this is an error.
8092
Bram Moolenaar071d4272004-06-13 20:20:40 +00008093rename({from}, {to}) *rename()*
8094 Rename the file by the name {from} to the name {to}. This
8095 should also work to move files across file systems. The
8096 result is a Number, which is 0 if the file was renamed
8097 successfully, and non-zero when the renaming failed.
Bram Moolenaar798b30b2009-04-22 10:56:16 +00008098 NOTE: If {to} exists it is overwritten without warning.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008099 This function is not available in the |sandbox|.
8100
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008101 Can also be used as a |method|: >
8102 GetOldName()->rename(newname)
8103
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00008104repeat({expr}, {count}) *repeat()*
8105 Repeat {expr} {count} times and return the concatenated
8106 result. Example: >
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00008107 :let separator = repeat('-', 80)
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00008108< When {count} is zero or negative the result is empty.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00008109 When {expr} is a |List| the result is {expr} concatenated
Bram Moolenaar58b85342016-08-14 19:54:54 +02008110 {count} times. Example: >
Bram Moolenaarde8866b2005-01-06 23:24:37 +00008111 :let longlist = repeat(['a', 'b'], 3)
8112< Results in ['a', 'b', 'a', 'b', 'a', 'b'].
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00008113
Bram Moolenaarac92e252019-08-03 21:58:38 +02008114 Can also be used as a |method|: >
8115 mylist->repeat(count)
Bram Moolenaara14de3d2005-01-07 21:48:26 +00008116
Bram Moolenaar071d4272004-06-13 20:20:40 +00008117resolve({filename}) *resolve()* *E655*
8118 On MS-Windows, when {filename} is a shortcut (a .lnk file),
8119 returns the path the shortcut points to in a simplified form.
Bram Moolenaardce1e892019-02-10 23:18:53 +01008120 When {filename} is a symbolic link or junction point, return
8121 the full path to the target. If the target of junction is
8122 removed, return {filename}.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008123 On Unix, repeat resolving symbolic links in all path
8124 components of {filename} and return the simplified result.
8125 To cope with link cycles, resolving of symbolic links is
8126 stopped after 100 iterations.
8127 On other systems, return the simplified {filename}.
8128 The simplification step is done as by |simplify()|.
8129 resolve() keeps a leading path component specifying the
8130 current directory (provided the result is still a relative
8131 path name) and also keeps a trailing path separator.
8132
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008133 Can also be used as a |method|: >
8134 GetName()->resolve()
Bram Moolenaarac92e252019-08-03 21:58:38 +02008135
8136reverse({object}) *reverse()*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01008137 Reverse the order of items in {object} in-place.
8138 {object} can be a |List| or a |Blob|.
8139 Returns {object}.
8140 If you want an object to remain unmodified make a copy first: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00008141 :let revlist = reverse(copy(mylist))
Bram Moolenaarac92e252019-08-03 21:58:38 +02008142< Can also be used as a |method|: >
8143 mylist->reverse()
Bram Moolenaara14de3d2005-01-07 21:48:26 +00008144
Bram Moolenaar446cb832008-06-24 21:56:24 +00008145round({expr}) *round()*
Bram Moolenaarc236c162008-07-13 17:41:49 +00008146 Round off {expr} to the nearest integral value and return it
Bram Moolenaar446cb832008-06-24 21:56:24 +00008147 as a |Float|. If {expr} lies halfway between two integral
8148 values, then use the larger one (away from zero).
8149 {expr} must evaluate to a |Float| or a |Number|.
8150 Examples: >
8151 echo round(0.456)
8152< 0.0 >
8153 echo round(4.5)
8154< 5.0 >
8155 echo round(-4.5)
8156< -5.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02008157
8158 Can also be used as a |method|: >
8159 Compute()->round()
8160<
Bram Moolenaar446cb832008-06-24 21:56:24 +00008161 {only available when compiled with the |+float| feature}
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008162
Bram Moolenaare99be0e2019-03-26 22:51:09 +01008163rubyeval({expr}) *rubyeval()*
8164 Evaluate Ruby expression {expr} and return its result
8165 converted to Vim data structures.
8166 Numbers, floats and strings are returned as they are (strings
8167 are copied though).
8168 Arrays are represented as Vim |List| type.
8169 Hashes are represented as Vim |Dictionary| type.
8170 Other objects are represented as strings resulted from their
8171 "Object#to_s" method.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008172
8173 Can also be used as a |method|: >
8174 GetRubyExpr()->rubyeval()
8175
8176< {only available when compiled with the |+ruby| feature}
Bram Moolenaare99be0e2019-03-26 22:51:09 +01008177
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008178screenattr({row}, {col}) *screenattr()*
Bram Moolenaar36f44c22016-08-28 18:17:20 +02008179 Like |screenchar()|, but return the attribute. This is a rather
Bram Moolenaar9a773482013-06-11 18:40:13 +02008180 arbitrary number that can only be used to compare to the
8181 attribute at other positions.
8182
Bram Moolenaar196b4662019-09-06 21:34:30 +02008183 Can also be used as a |method|: >
8184 GetRow()->screenattr(col)
8185
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008186screenchar({row}, {col}) *screenchar()*
Bram Moolenaar9a773482013-06-11 18:40:13 +02008187 The result is a Number, which is the character at position
8188 [row, col] on the screen. This works for every possible
8189 screen position, also status lines, window separators and the
8190 command line. The top left position is row one, column one
8191 The character excludes composing characters. For double-byte
8192 encodings it may only be the first byte.
8193 This is mainly to be used for testing.
8194 Returns -1 when row or col is out of range.
8195
Bram Moolenaar196b4662019-09-06 21:34:30 +02008196 Can also be used as a |method|: >
8197 GetRow()->screenchar(col)
8198
Bram Moolenaar2912abb2019-03-29 14:16:42 +01008199screenchars({row}, {col}) *screenchars()*
8200 The result is a List of Numbers. The first number is the same
8201 as what |screenchar()| returns. Further numbers are
8202 composing characters on top of the base character.
8203 This is mainly to be used for testing.
8204 Returns an empty List when row or col is out of range.
8205
Bram Moolenaar196b4662019-09-06 21:34:30 +02008206 Can also be used as a |method|: >
8207 GetRow()->screenchars(col)
8208
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008209screencol() *screencol()*
8210 The result is a Number, which is the current screen column of
8211 the cursor. The leftmost column has number 1.
8212 This function is mainly used for testing.
8213
8214 Note: Always returns the current screen column, thus if used
8215 in a command (e.g. ":echo screencol()") it will return the
8216 column inside the command line, which is 1 when the command is
8217 executed. To get the cursor position in the file use one of
8218 the following mappings: >
8219 nnoremap <expr> GG ":echom ".screencol()."\n"
8220 nnoremap <silent> GG :echom screencol()<CR>
8221<
Bram Moolenaarb3d17a22019-07-07 18:28:14 +02008222screenpos({winid}, {lnum}, {col}) *screenpos()*
8223 The result is a Dict with the screen position of the text
8224 character in window {winid} at buffer line {lnum} and column
8225 {col}. {col} is a one-based byte index.
8226 The Dict has these members:
8227 row screen row
8228 col first screen column
8229 endcol last screen column
8230 curscol cursor screen column
8231 If the specified position is not visible, all values are zero.
8232 The "endcol" value differs from "col" when the character
8233 occupies more than one screen cell. E.g. for a Tab "col" can
8234 be 1 and "endcol" can be 8.
8235 The "curscol" value is where the cursor would be placed. For
8236 a Tab it would be the same as "endcol", while for a double
8237 width character it would be the same as "col".
8238
Bram Moolenaar196b4662019-09-06 21:34:30 +02008239 Can also be used as a |method|: >
8240 GetWinid()->screenpos(lnum, col)
8241
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008242screenrow() *screenrow()*
8243 The result is a Number, which is the current screen row of the
8244 cursor. The top line has number one.
8245 This function is mainly used for testing.
Bram Moolenaar437bafe2016-08-01 15:40:54 +02008246 Alternatively you can use |winline()|.
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008247
8248 Note: Same restrictions as with |screencol()|.
8249
Bram Moolenaar2912abb2019-03-29 14:16:42 +01008250screenstring({row}, {col}) *screenstring()*
8251 The result is a String that contains the base character and
8252 any composing characters at position [row, col] on the screen.
8253 This is like |screenchars()| but returning a String with the
8254 characters.
8255 This is mainly to be used for testing.
8256 Returns an empty String when row or col is out of range.
8257
Bram Moolenaar196b4662019-09-06 21:34:30 +02008258 Can also be used as a |method|: >
8259 GetRow()->screenstring(col)
8260
Bram Moolenaar76929292008-01-06 19:07:36 +00008261search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00008262 Search for regexp pattern {pattern}. The search starts at the
Bram Moolenaar383f9bc2005-01-19 22:18:32 +00008263 cursor position (you can use |cursor()| to set it).
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008264
Bram Moolenaar2df58b42012-11-28 18:21:11 +01008265 When a match has been found its line number is returned.
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01008266 If there is no match a 0 is returned and the cursor doesn't
8267 move. No error message is given.
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01008268
Bram Moolenaar071d4272004-06-13 20:20:40 +00008269 {flags} is a String, which can contain these character flags:
Bram Moolenaarad4d8a12015-12-28 19:20:36 +01008270 'b' search Backward instead of forward
8271 'c' accept a match at the Cursor position
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008272 'e' move to the End of the match
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00008273 'n' do Not move the cursor
Bram Moolenaarad4d8a12015-12-28 19:20:36 +01008274 'p' return number of matching sub-Pattern (see below)
8275 's' Set the ' mark at the previous location of the cursor
8276 'w' Wrap around the end of the file
8277 'W' don't Wrap around the end of the file
8278 'z' start searching at the cursor column instead of zero
Bram Moolenaar071d4272004-06-13 20:20:40 +00008279 If neither 'w' or 'W' is given, the 'wrapscan' option applies.
8280
Bram Moolenaar02743632005-07-25 20:42:36 +00008281 If the 's' flag is supplied, the ' mark is set, only if the
8282 cursor is moved. The 's' flag cannot be combined with the 'n'
8283 flag.
8284
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008285 'ignorecase', 'smartcase' and 'magic' are used.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008286
Bram Moolenaar85084ef2016-01-17 22:26:33 +01008287 When the 'z' flag is not given, searching always starts in
Bram Moolenaarad4d8a12015-12-28 19:20:36 +01008288 column zero and then matches before the cursor are skipped.
8289 When the 'c' flag is present in 'cpo' the next search starts
8290 after the match. Without the 'c' flag the next search starts
8291 one column further.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008292
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008293 When the {stopline} argument is given then the search stops
8294 after searching this line. This is useful to restrict the
8295 search to a range of lines. Examples: >
8296 let match = search('(', 'b', line("w0"))
8297 let end = search('END', '', line("w$"))
8298< When {stopline} is used and it is not zero this also implies
8299 that the search does not wrap around the end of the file.
Bram Moolenaar76929292008-01-06 19:07:36 +00008300 A zero value is equal to not giving the argument.
8301
8302 When the {timeout} argument is given the search stops when
Bram Moolenaar58b85342016-08-14 19:54:54 +02008303 more than this many milliseconds have passed. Thus when
Bram Moolenaar76929292008-01-06 19:07:36 +00008304 {timeout} is 500 the search stops after half a second.
8305 The value must not be negative. A zero value is like not
8306 giving the argument.
Bram Moolenaardb84e452010-08-15 13:50:43 +02008307 {only available when compiled with the |+reltime| feature}
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008308
Bram Moolenaar362e1a32006-03-06 23:29:24 +00008309 *search()-sub-match*
8310 With the 'p' flag the returned value is one more than the
8311 first sub-match in \(\). One if none of them matched but the
8312 whole pattern did match.
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008313 To get the column number too use |searchpos()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008314
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008315 The cursor will be positioned at the match, unless the 'n'
8316 flag is used.
8317
Bram Moolenaar071d4272004-06-13 20:20:40 +00008318 Example (goes over all files in the argument list): >
8319 :let n = 1
8320 :while n <= argc() " loop over all files in arglist
8321 : exe "argument " . n
8322 : " start at the last char in the file and wrap for the
8323 : " first search to find match at start of file
8324 : normal G$
8325 : let flags = "w"
8326 : while search("foo", flags) > 0
Bram Moolenaar446cb832008-06-24 21:56:24 +00008327 : s/foo/bar/g
Bram Moolenaar071d4272004-06-13 20:20:40 +00008328 : let flags = "W"
8329 : endwhile
8330 : update " write the file if modified
8331 : let n = n + 1
8332 :endwhile
8333<
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008334 Example for using some flags: >
8335 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
8336< This will search for the keywords "if", "else", and "endif"
8337 under or after the cursor. Because of the 'p' flag, it
8338 returns 1, 2, or 3 depending on which keyword is found, or 0
8339 if the search fails. With the cursor on the first word of the
8340 line:
8341 if (foo == 0) | let foo = foo + 1 | endif ~
8342 the function returns 1. Without the 'c' flag, the function
8343 finds the "endif" and returns 3. The same thing happens
8344 without the 'e' flag if the cursor is on the "f" of "if".
8345 The 'n' flag tells the function not to move the cursor.
8346
Bram Moolenaar196b4662019-09-06 21:34:30 +02008347 Can also be used as a |method|: >
8348 GetPattern()->search()
Bram Moolenaar92d640f2005-09-05 22:11:52 +00008349
Bram Moolenaarf75a9632005-09-13 21:20:47 +00008350searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()*
8351 Search for the declaration of {name}.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00008352
Bram Moolenaarf75a9632005-09-13 21:20:47 +00008353 With a non-zero {global} argument it works like |gD|, find
8354 first match in the file. Otherwise it works like |gd|, find
8355 first match in the function.
8356
8357 With a non-zero {thisblock} argument matches in a {} block
8358 that ends before the cursor position are ignored. Avoids
8359 finding variable declarations only valid in another scope.
8360
Bram Moolenaar92d640f2005-09-05 22:11:52 +00008361 Moves the cursor to the found match.
8362 Returns zero for success, non-zero for failure.
8363 Example: >
8364 if searchdecl('myvar') == 0
8365 echo getline('.')
8366 endif
8367<
Bram Moolenaar196b4662019-09-06 21:34:30 +02008368 Can also be used as a |method|: >
8369 GetName()->searchdecl()
8370<
Bram Moolenaar071d4272004-06-13 20:20:40 +00008371 *searchpair()*
Bram Moolenaar76929292008-01-06 19:07:36 +00008372searchpair({start}, {middle}, {end} [, {flags} [, {skip}
8373 [, {stopline} [, {timeout}]]]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00008374 Search for the match of a nested start-end pair. This can be
8375 used to find the "endif" that matches an "if", while other
8376 if/endif pairs in between are ignored.
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00008377 The search starts at the cursor. The default is to search
8378 forward, include 'b' in {flags} to search backward.
8379 If a match is found, the cursor is positioned at it and the
8380 line number is returned. If no match is found 0 or -1 is
8381 returned and the cursor doesn't move. No error message is
8382 given.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008383
8384 {start}, {middle} and {end} are patterns, see |pattern|. They
8385 must not contain \( \) pairs. Use of \%( \) is allowed. When
8386 {middle} is not empty, it is found when searching from either
8387 direction, but only when not in a nested start-end pair. A
8388 typical use is: >
8389 searchpair('\<if\>', '\<else\>', '\<endif\>')
8390< By leaving {middle} empty the "else" is skipped.
8391
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008392 {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with
8393 |search()|. Additionally:
Bram Moolenaar071d4272004-06-13 20:20:40 +00008394 'r' Repeat until no more matches found; will find the
Bram Moolenaar446cb832008-06-24 21:56:24 +00008395 outer pair. Implies the 'W' flag.
8396 'm' Return number of matches instead of line number with
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008397 the match; will be > 1 when 'r' is used.
Bram Moolenaar446cb832008-06-24 21:56:24 +00008398 Note: it's nearly always a good idea to use the 'W' flag, to
8399 avoid wrapping around the end of the file.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008400
8401 When a match for {start}, {middle} or {end} is found, the
8402 {skip} expression is evaluated with the cursor positioned on
8403 the start of the match. It should return non-zero if this
8404 match is to be skipped. E.g., because it is inside a comment
8405 or a string.
8406 When {skip} is omitted or empty, every match is accepted.
8407 When evaluating {skip} causes an error the search is aborted
8408 and -1 returned.
Bram Moolenaar48570482017-10-30 21:48:41 +01008409 {skip} can be a string, a lambda, a funcref or a partial.
Bram Moolenaar675e8d62018-06-24 20:42:01 +02008410 Anything else makes the function fail.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008411
Bram Moolenaar76929292008-01-06 19:07:36 +00008412 For {stopline} and {timeout} see |search()|.
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008413
Bram Moolenaar071d4272004-06-13 20:20:40 +00008414 The value of 'ignorecase' is used. 'magic' is ignored, the
8415 patterns are used like it's on.
8416
8417 The search starts exactly at the cursor. A match with
8418 {start}, {middle} or {end} at the next character, in the
8419 direction of searching, is the first one found. Example: >
8420 if 1
8421 if 2
8422 endif 2
8423 endif 1
8424< When starting at the "if 2", with the cursor on the "i", and
8425 searching forwards, the "endif 2" is found. When starting on
8426 the character just before the "if 2", the "endif 1" will be
Bram Moolenaar58b85342016-08-14 19:54:54 +02008427 found. That's because the "if 2" will be found first, and
Bram Moolenaar071d4272004-06-13 20:20:40 +00008428 then this is considered to be a nested if/endif from "if 2" to
8429 "endif 2".
8430 When searching backwards and {end} is more than one character,
8431 it may be useful to put "\zs" at the end of the pattern, so
8432 that when the cursor is inside a match with the end it finds
8433 the matching start.
8434
8435 Example, to find the "endif" command in a Vim script: >
8436
8437 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
8438 \ 'getline(".") =~ "^\\s*\""')
8439
8440< The cursor must be at or after the "if" for which a match is
8441 to be found. Note that single-quote strings are used to avoid
8442 having to double the backslashes. The skip expression only
8443 catches comments at the start of a line, not after a command.
8444 Also, a word "en" or "if" halfway a line is considered a
8445 match.
8446 Another example, to search for the matching "{" of a "}": >
8447
8448 :echo searchpair('{', '', '}', 'bW')
8449
8450< This works when the cursor is at or before the "}" for which a
8451 match is to be found. To reject matches that syntax
8452 highlighting recognized as strings: >
8453
8454 :echo searchpair('{', '', '}', 'bW',
8455 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
8456<
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00008457 *searchpairpos()*
Bram Moolenaar76929292008-01-06 19:07:36 +00008458searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
8459 [, {stopline} [, {timeout}]]]])
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008460 Same as |searchpair()|, but returns a |List| with the line and
Bram Moolenaar32466aa2006-02-24 23:53:04 +00008461 column position of the match. The first element of the |List|
8462 is the line number and the second element is the byte index of
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00008463 the column position of the match. If no match is found,
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02008464 returns [0, 0]. >
8465
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00008466 :let [lnum,col] = searchpairpos('{', '', '}', 'n')
8467<
8468 See |match-parens| for a bigger and more useful example.
8469
Bram Moolenaar76929292008-01-06 19:07:36 +00008470searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()*
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008471 Same as |search()|, but returns a |List| with the line and
Bram Moolenaar32466aa2006-02-24 23:53:04 +00008472 column position of the match. The first element of the |List|
8473 is the line number and the second element is the byte index of
8474 the column position of the match. If no match is found,
8475 returns [0, 0].
Bram Moolenaar362e1a32006-03-06 23:29:24 +00008476 Example: >
8477 :let [lnum, col] = searchpos('mypattern', 'n')
8478
8479< When the 'p' flag is given then there is an extra item with
8480 the sub-pattern match number |search()-sub-match|. Example: >
8481 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
8482< In this example "submatch" is 2 when a lowercase letter is
8483 found |/\l|, 3 when an uppercase letter is found |/\u|.
8484
Bram Moolenaar196b4662019-09-06 21:34:30 +02008485 Can also be used as a |method|: >
8486 GetPattern()->searchpos()
8487
Bram Moolenaar81edd172016-04-14 13:51:37 +02008488server2client({clientid}, {string}) *server2client()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00008489 Send a reply string to {clientid}. The most recent {clientid}
8490 that sent a string can be retrieved with expand("<client>").
8491 {only available when compiled with the |+clientserver| feature}
8492 Note:
8493 This id has to be stored before the next command can be
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00008494 received. I.e. before returning from the received command and
Bram Moolenaar071d4272004-06-13 20:20:40 +00008495 before calling any commands that waits for input.
8496 See also |clientserver|.
8497 Example: >
8498 :echo server2client(expand("<client>"), "HELLO")
Bram Moolenaar196b4662019-09-06 21:34:30 +02008499
8500< Can also be used as a |method|: >
8501 GetClientId()->server2client(string)
Bram Moolenaar071d4272004-06-13 20:20:40 +00008502<
8503serverlist() *serverlist()*
8504 Return a list of available server names, one per line.
8505 When there are no servers or the information is not available
8506 an empty string is returned. See also |clientserver|.
8507 {only available when compiled with the |+clientserver| feature}
8508 Example: >
8509 :echo serverlist()
8510<
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008511setbufline({expr}, {lnum}, {text}) *setbufline()*
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008512 Set line {lnum} to {text} in buffer {expr}. This works like
8513 |setline()| for the specified buffer.
8514
8515 This function works only for loaded buffers. First call
8516 |bufload()| if needed.
8517
8518 To insert lines use |appendbufline()|.
8519 Any text properties in {lnum} are cleared.
8520
8521 {text} can be a string to set one line, or a list of strings
8522 to set multiple lines. If the list extends below the last
8523 line then those lines are added.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008524
8525 For the use of {expr}, see |bufname()| above.
8526
8527 {lnum} is used like with |setline()|.
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008528 When {lnum} is just below the last line the {text} will be
8529 added below the last line.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008530
Bram Moolenaar6bf2c622019-07-04 17:12:09 +02008531 When {expr} is not a valid buffer, the buffer is not loaded or
8532 {lnum} is not valid then 1 is returned. On success 0 is
8533 returned.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008534
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008535 Can also be used as a |method|, the base is passed as the
8536 third argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008537 GetText()->setbufline(buf, lnum)
8538
Bram Moolenaar071d4272004-06-13 20:20:40 +00008539setbufvar({expr}, {varname}, {val}) *setbufvar()*
8540 Set option or local variable {varname} in buffer {expr} to
8541 {val}.
8542 This also works for a global or local window option, but it
8543 doesn't work for a global or local window variable.
8544 For a local window option the global value is unchanged.
8545 For the use of {expr}, see |bufname()| above.
8546 Note that the variable name without "b:" must be used.
8547 Examples: >
8548 :call setbufvar(1, "&mod", 1)
8549 :call setbufvar("todo", "myvar", "foobar")
8550< This function is not available in the |sandbox|.
8551
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008552 Can also be used as a |method|, the base is passed as the
8553 third argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008554 GetValue()->setbufvar(buf, varname)
8555
Bram Moolenaar12969c02015-09-08 23:36:10 +02008556setcharsearch({dict}) *setcharsearch()*
Bram Moolenaardbd24b52015-08-11 14:26:19 +02008557 Set the current character search information to {dict},
8558 which contains one or more of the following entries:
8559
8560 char character which will be used for a subsequent
8561 |,| or |;| command; an empty string clears the
8562 character search
8563 forward direction of character search; 1 for forward,
8564 0 for backward
8565 until type of character search; 1 for a |t| or |T|
8566 character search, 0 for an |f| or |F|
8567 character search
8568
8569 This can be useful to save/restore a user's character search
8570 from a script: >
8571 :let prevsearch = getcharsearch()
8572 :" Perform a command which clobbers user's search
8573 :call setcharsearch(prevsearch)
8574< Also see |getcharsearch()|.
8575
Bram Moolenaar196b4662019-09-06 21:34:30 +02008576 Can also be used as a |method|: >
8577 SavedSearch()->setcharsearch()
8578
Bram Moolenaar071d4272004-06-13 20:20:40 +00008579setcmdpos({pos}) *setcmdpos()*
8580 Set the cursor position in the command line to byte position
Bram Moolenaar58b85342016-08-14 19:54:54 +02008581 {pos}. The first position is 1.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008582 Use |getcmdpos()| to obtain the current position.
8583 Only works while editing the command line, thus you must use
Bram Moolenaard8b02732005-01-14 21:48:43 +00008584 |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='. For
8585 |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is
8586 set after the command line is set to the expression. For
8587 |c_CTRL-R_=| it is set after evaluating the expression but
8588 before inserting the resulting text.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008589 When the number is too big the cursor is put at the end of the
8590 line. A number smaller than one has undefined results.
8591 Returns 0 when successful, 1 when not editing the command
8592 line.
8593
Bram Moolenaar196b4662019-09-06 21:34:30 +02008594 Can also be used as a |method|: >
8595 GetPos()->setcmdpos()
8596
Bram Moolenaar691ddee2019-05-09 14:52:41 +02008597setenv({name}, {val}) *setenv()*
8598 Set environment variable {name} to {val}.
8599 When {val} is |v:null| the environment variable is deleted.
8600 See also |expr-env|.
8601
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008602 Can also be used as a |method|, the base is passed as the
8603 second argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008604 GetPath()->setenv('PATH')
8605
Bram Moolenaar80492532016-03-08 17:08:53 +01008606setfperm({fname}, {mode}) *setfperm()* *chmod*
8607 Set the file permissions for {fname} to {mode}.
8608 {mode} must be a string with 9 characters. It is of the form
8609 "rwxrwxrwx", where each group of "rwx" flags represent, in
8610 turn, the permissions of the owner of the file, the group the
8611 file belongs to, and other users. A '-' character means the
8612 permission is off, any other character means on. Multi-byte
8613 characters are not supported.
8614
8615 For example "rw-r-----" means read-write for the user,
8616 readable by the group, not accessible by others. "xx-x-----"
8617 would do the same thing.
8618
8619 Returns non-zero for success, zero for failure.
8620
Bram Moolenaar4c313b12019-08-24 22:58:31 +02008621 Can also be used as a |method|: >
8622 GetFilename()->setfperm(mode)
8623<
Bram Moolenaar80492532016-03-08 17:08:53 +01008624 To read permissions see |getfperm()|.
8625
8626
Bram Moolenaar446cb832008-06-24 21:56:24 +00008627setline({lnum}, {text}) *setline()*
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01008628 Set line {lnum} of the current buffer to {text}. To insert
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008629 lines use |append()|. To set lines in another buffer use
Bram Moolenaarb328cca2019-01-06 16:24:01 +01008630 |setbufline()|. Any text properties in {lnum} are cleared.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008631
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00008632 {lnum} is used like with |getline()|.
Bram Moolenaar446cb832008-06-24 21:56:24 +00008633 When {lnum} is just below the last line the {text} will be
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008634 added below the last line.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008635
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00008636 If this succeeds, 0 is returned. If this fails (most likely
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008637 because {lnum} is invalid) 1 is returned.
8638
8639 Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00008640 :call setline(5, strftime("%c"))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008641
Bram Moolenaar446cb832008-06-24 21:56:24 +00008642< When {text} is a |List| then line {lnum} and following lines
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00008643 will be set to the items in the list. Example: >
8644 :call setline(5, ['aaa', 'bbb', 'ccc'])
8645< This is equivalent to: >
Bram Moolenaar53bfca22012-04-13 23:04:47 +02008646 :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00008647 : call setline(n, l)
8648 :endfor
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008649
Bram Moolenaar071d4272004-06-13 20:20:40 +00008650< Note: The '[ and '] marks are not set.
8651
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008652 Can also be used as a |method|, the base is passed as the
8653 second argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008654 GetText()->setline(lnum)
8655
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008656setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()*
Bram Moolenaar17c7c012006-01-26 22:25:15 +00008657 Create or replace or add to the location list for window {nr}.
Bram Moolenaar7571d552016-08-18 22:54:46 +02008658 {nr} can be the window number or the |window-ID|.
Bram Moolenaar888ccac2016-06-04 18:49:36 +02008659 When {nr} is zero the current window is used.
8660
8661 For a location list window, the displayed location list is
8662 modified. For an invalid window number {nr}, -1 is returned.
Bram Moolenaar6ee10162007-07-26 20:58:42 +00008663 Otherwise, same as |setqflist()|.
8664 Also see |location-list|.
8665
Bram Moolenaard823fa92016-08-12 16:29:27 +02008666 If the optional {what} dictionary argument is supplied, then
8667 only the items listed in {what} are set. Refer to |setqflist()|
8668 for the list of supported keys in {what}.
8669
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008670 Can also be used as a |method|, the base is passed as the
8671 second argument: >
8672 GetLoclist()->setloclist(winnr)
8673
Bram Moolenaaraff74912019-03-30 18:11:49 +01008674setmatches({list} [, {win}]) *setmatches()*
Bram Moolenaar99fa7212020-04-26 15:59:55 +02008675 Restores a list of matches saved by |getmatches()| for the
8676 current window. Returns 0 if successful, otherwise -1. All
Bram Moolenaarfd133322019-03-29 12:20:27 +01008677 current matches are cleared before the list is restored. See
8678 example for |getmatches()|.
Bram Moolenaaraff74912019-03-30 18:11:49 +01008679 If {win} is specified, use the window with this number or
8680 window ID instead of the current window.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008681
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008682 Can also be used as a |method|: >
8683 GetMatches()->setmatches()
8684<
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008685 *setpos()*
8686setpos({expr}, {list})
8687 Set the position for {expr}. Possible values:
8688 . the cursor
8689 'x mark x
8690
Bram Moolenaar493c1782014-05-28 14:34:46 +02008691 {list} must be a |List| with four or five numbers:
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008692 [bufnum, lnum, col, off]
Bram Moolenaar493c1782014-05-28 14:34:46 +02008693 [bufnum, lnum, col, off, curswant]
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008694
Bram Moolenaar58b85342016-08-14 19:54:54 +02008695 "bufnum" is the buffer number. Zero can be used for the
Bram Moolenaarf13e00b2017-01-28 18:23:54 +01008696 current buffer. When setting an uppercase mark "bufnum" is
8697 used for the mark position. For other marks it specifies the
8698 buffer to set the mark in. You can use the |bufnr()| function
8699 to turn a file name into a buffer number.
8700 For setting the cursor and the ' mark "bufnum" is ignored,
8701 since these are associated with a window, not a buffer.
Bram Moolenaardb552d602006-03-23 22:59:57 +00008702 Does not change the jumplist.
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008703
8704 "lnum" and "col" are the position in the buffer. The first
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008705 column is 1. Use a zero "lnum" to delete a mark. If "col" is
8706 smaller than 1 then 1 is used.
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008707
8708 The "off" number is only used when 'virtualedit' is set. Then
8709 it is the offset in screen columns from the start of the
Bram Moolenaard46bbc72007-05-12 14:38:41 +00008710 character. E.g., a position within a <Tab> or after the last
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008711 character.
8712
Bram Moolenaar493c1782014-05-28 14:34:46 +02008713 The "curswant" number is only used when setting the cursor
8714 position. It sets the preferred column for when moving the
8715 cursor vertically. When the "curswant" number is missing the
8716 preferred column is not set. When it is present and setting a
8717 mark position it is not used.
8718
Bram Moolenaardfb18412013-12-11 18:53:29 +01008719 Note that for '< and '> changing the line number may result in
8720 the marks to be effectively be swapped, so that '< is always
8721 before '>.
8722
Bram Moolenaar08250432008-02-13 11:42:46 +00008723 Returns 0 when the position could be set, -1 otherwise.
8724 An error message is given if {expr} is invalid.
8725
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02008726 Also see |getpos()| and |getcurpos()|.
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008727
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008728 This does not restore the preferred column for moving
Bram Moolenaar493c1782014-05-28 14:34:46 +02008729 vertically; if you set the cursor position with this, |j| and
8730 |k| motions will jump to previous columns! Use |cursor()| to
8731 also set the preferred column. Also see the "curswant" key in
8732 |winrestview()|.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008733
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008734 Can also be used as a |method|: >
8735 GetPosition()->setpos('.')
8736
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008737setqflist({list} [, {action} [, {what}]]) *setqflist()*
Bram Moolenaarae338332017-08-11 20:25:26 +02008738 Create or replace or add to the quickfix list.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008739
Bram Moolenaarb17893a2020-03-14 08:19:51 +01008740 If the optional {what} dictionary argument is supplied, then
8741 only the items listed in {what} are set. The first {list}
8742 argument is ignored. See below for the supported items in
8743 {what}.
8744
8745 When {what} is not present, the items in {list} or used. Each
Bram Moolenaarae338332017-08-11 20:25:26 +02008746 item must be a dictionary. Non-dictionary items in {list} are
8747 ignored. Each dictionary item can contain the following
8748 entries:
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008749
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008750 bufnr buffer number; must be the number of a valid
Bram Moolenaar446cb832008-06-24 21:56:24 +00008751 buffer
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008752 filename name of a file; only used when "bufnr" is not
Bram Moolenaar446cb832008-06-24 21:56:24 +00008753 present or it is invalid.
Bram Moolenaard76ce852018-05-01 15:02:04 +02008754 module name of a module; if given it will be used in
8755 quickfix error window instead of the filename.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008756 lnum line number in the file
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008757 pattern search pattern used to locate the error
Bram Moolenaar582fd852005-03-28 20:58:01 +00008758 col column number
8759 vcol when non-zero: "col" is visual column
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00008760 when zero: "col" is byte index
Bram Moolenaar582fd852005-03-28 20:58:01 +00008761 nr error number
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008762 text description of the error
Bram Moolenaar582fd852005-03-28 20:58:01 +00008763 type single-character error type, 'E', 'W', etc.
Bram Moolenaarf1d21c82017-04-22 21:20:46 +02008764 valid recognized error message
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008765
Bram Moolenaar582fd852005-03-28 20:58:01 +00008766 The "col", "vcol", "nr", "type" and "text" entries are
8767 optional. Either "lnum" or "pattern" entry can be used to
8768 locate a matching error line.
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008769 If the "filename" and "bufnr" entries are not present or
8770 neither the "lnum" or "pattern" entries are present, then the
8771 item will not be handled as an error line.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008772 If both "pattern" and "lnum" are present then "pattern" will
8773 be used.
Bram Moolenaarf1d21c82017-04-22 21:20:46 +02008774 If the "valid" entry is not supplied, then the valid flag is
8775 set when "bufnr" is a valid buffer or "filename" exists.
Bram Moolenaar00a927d2010-05-14 23:24:24 +02008776 If you supply an empty {list}, the quickfix list will be
8777 cleared.
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008778 Note that the list is not exactly the same as what
8779 |getqflist()| returns.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008780
Bram Moolenaarb6fa30c2017-03-29 14:19:25 +02008781 {action} values: *E927*
8782 'a' The items from {list} are added to the existing
8783 quickfix list. If there is no existing list, then a
8784 new list is created.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008785
Bram Moolenaarb6fa30c2017-03-29 14:19:25 +02008786 'r' The items from the current quickfix list are replaced
8787 with the items from {list}. This can also be used to
8788 clear the list: >
8789 :call setqflist([], 'r')
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008790<
Bram Moolenaarb6fa30c2017-03-29 14:19:25 +02008791 'f' All the quickfix lists in the quickfix stack are
8792 freed.
8793
Bram Moolenaar511972d2016-06-04 18:09:59 +02008794 If {action} is not present or is set to ' ', then a new list
Bram Moolenaar55b69262017-08-13 13:42:01 +02008795 is created. The new quickfix list is added after the current
8796 quickfix list in the stack and all the following lists are
8797 freed. To add a new quickfix list at the end of the stack,
Bram Moolenaar36538222017-09-02 19:51:44 +02008798 set "nr" in {what} to "$".
Bram Moolenaar35c54e52005-05-20 21:25:31 +00008799
Bram Moolenaarb17893a2020-03-14 08:19:51 +01008800 The following items can be specified in dictionary {what}:
Bram Moolenaar15142e22018-04-30 22:19:58 +02008801 context quickfix list context. See |quickfix-context|
Bram Moolenaar36538222017-09-02 19:51:44 +02008802 efm errorformat to use when parsing text from
8803 "lines". If this is not present, then the
8804 'errorformat' option value is used.
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008805 See |quickfix-parse|
Bram Moolenaara539f4f2017-08-30 20:33:55 +02008806 id quickfix list identifier |quickfix-ID|
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008807 idx index of the current entry in the quickfix
8808 list specified by 'id' or 'nr'. If set to '$',
8809 then the last entry in the list is set as the
8810 current entry. See |quickfix-index|
Bram Moolenaar6a8958d2017-06-22 21:33:20 +02008811 items list of quickfix entries. Same as the {list}
8812 argument.
Bram Moolenaar2c809b72017-09-01 18:34:02 +02008813 lines use 'errorformat' to parse a list of lines and
8814 add the resulting entries to the quickfix list
8815 {nr} or {id}. Only a |List| value is supported.
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008816 See |quickfix-parse|
Bram Moolenaar875feea2017-06-11 16:07:51 +02008817 nr list number in the quickfix stack; zero
Bram Moolenaar36538222017-09-02 19:51:44 +02008818 means the current quickfix list and "$" means
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008819 the last quickfix list.
8820 title quickfix list title text. See |quickfix-title|
Bram Moolenaard823fa92016-08-12 16:29:27 +02008821 Unsupported keys in {what} are ignored.
8822 If the "nr" item is not present, then the current quickfix list
Bram Moolenaar86f100dc2017-06-28 21:26:27 +02008823 is modified. When creating a new quickfix list, "nr" can be
8824 set to a value one greater than the quickfix stack size.
Bram Moolenaara539f4f2017-08-30 20:33:55 +02008825 When modifying a quickfix list, to guarantee that the correct
Bram Moolenaar36538222017-09-02 19:51:44 +02008826 list is modified, "id" should be used instead of "nr" to
Bram Moolenaara539f4f2017-08-30 20:33:55 +02008827 specify the list.
Bram Moolenaard823fa92016-08-12 16:29:27 +02008828
Bram Moolenaar15142e22018-04-30 22:19:58 +02008829 Examples (See also |setqflist-examples|): >
Bram Moolenaar2c809b72017-09-01 18:34:02 +02008830 :call setqflist([], 'r', {'title': 'My search'})
8831 :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
Bram Moolenaar15142e22018-04-30 22:19:58 +02008832 :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
Bram Moolenaard823fa92016-08-12 16:29:27 +02008833<
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008834 Returns zero for success, -1 for failure.
8835
8836 This function can be used to create a quickfix list
8837 independent of the 'errorformat' setting. Use a command like
Bram Moolenaar94237492017-04-23 18:40:21 +02008838 `:cc 1` to jump to the first position.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008839
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008840 Can also be used as a |method|, the base is passed as the
8841 second argument: >
8842 GetErrorlist()->setqflist()
8843<
Bram Moolenaar071d4272004-06-13 20:20:40 +00008844 *setreg()*
Bram Moolenaare0fa3742016-02-20 15:47:01 +01008845setreg({regname}, {value} [, {options}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00008846 Set the register {regname} to {value}.
Bram Moolenaar0e05de42020-03-25 22:23:46 +01008847 If {regname} is "" or "@", the unnamed register '"' is used.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008848 {value} may be any value returned by |getreg()|, including
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008849 a |List|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008850 If {options} contains "a" or {regname} is upper case,
8851 then the value is appended.
Bram Moolenaarc6485bc2010-07-28 17:02:55 +02008852 {options} can also contain a register type specification:
Bram Moolenaar071d4272004-06-13 20:20:40 +00008853 "c" or "v" |characterwise| mode
8854 "l" or "V" |linewise| mode
8855 "b" or "<CTRL-V>" |blockwise-visual| mode
8856 If a number immediately follows "b" or "<CTRL-V>" then this is
8857 used as the width of the selection - if it is not specified
8858 then the width of the block is set to the number of characters
Bram Moolenaard46bbc72007-05-12 14:38:41 +00008859 in the longest line (counting a <Tab> as 1 character).
Bram Moolenaar071d4272004-06-13 20:20:40 +00008860
8861 If {options} contains no register settings, then the default
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008862 is to use character mode unless {value} ends in a <NL> for
8863 string {value} and linewise mode for list {value}. Blockwise
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008864 mode is never selected automatically.
8865 Returns zero for success, non-zero for failure.
8866
8867 *E883*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008868 Note: you may not use |List| containing more than one item to
8869 set search and expression registers. Lists containing no
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008870 items act like empty strings.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008871
8872 Examples: >
8873 :call setreg(v:register, @*)
8874 :call setreg('*', @%, 'ac')
8875 :call setreg('a', "1\n2\n3", 'b5')
8876
8877< This example shows using the functions to save and restore a
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008878 register: >
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008879 :let var_a = getreg('a', 1, 1)
Bram Moolenaar071d4272004-06-13 20:20:40 +00008880 :let var_amode = getregtype('a')
8881 ....
8882 :call setreg('a', var_a, var_amode)
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008883< Note: you may not reliably restore register value
8884 without using the third argument to |getreg()| as without it
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008885 newlines are represented as newlines AND Nul bytes are
8886 represented as newlines as well, see |NL-used-for-Nul|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008887
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008888 You can also change the type of a register by appending
Bram Moolenaar071d4272004-06-13 20:20:40 +00008889 nothing: >
8890 :call setreg('a', '', 'al')
8891
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008892< Can also be used as a |method|, the base is passed as the
8893 second argument: >
8894 GetText()->setreg('a')
8895
Bram Moolenaar06b5d512010-05-22 15:37:44 +02008896settabvar({tabnr}, {varname}, {val}) *settabvar()*
8897 Set tab-local variable {varname} to {val} in tab page {tabnr}.
8898 |t:var|
Bram Moolenaarb4230122019-05-30 18:40:53 +02008899 Note that autocommands are blocked, side effects may not be
8900 triggered, e.g. when setting 'filetype'.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02008901 Note that the variable name without "t:" must be used.
8902 Tabs are numbered starting with one.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02008903 This function is not available in the |sandbox|.
8904
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008905 Can also be used as a |method|, the base is passed as the
8906 third argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008907 GetValue()->settabvar(tab, name)
8908
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008909settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()*
8910 Set option or local variable {varname} in window {winnr} to
8911 {val}.
8912 Tabs are numbered starting with one. For the current tabpage
8913 use |setwinvar()|.
Bram Moolenaar7571d552016-08-18 22:54:46 +02008914 {winnr} can be the window number or the |window-ID|.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008915 When {winnr} is zero the current window is used.
Bram Moolenaarb4230122019-05-30 18:40:53 +02008916 Note that autocommands are blocked, side effects may not be
8917 triggered, e.g. when setting 'filetype' or 'syntax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008918 This also works for a global or local buffer option, but it
8919 doesn't work for a global or local buffer variable.
8920 For a local buffer option the global value is unchanged.
8921 Note that the variable name without "w:" must be used.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008922 Examples: >
8923 :call settabwinvar(1, 1, "&list", 0)
8924 :call settabwinvar(3, 2, "myvar", "foobar")
8925< This function is not available in the |sandbox|.
8926
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008927 Can also be used as a |method|, the base is passed as the
8928 fourth argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008929 GetValue()->settabvar(tab, winnr, name)
8930
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008931settagstack({nr}, {dict} [, {action}]) *settagstack()*
8932 Modify the tag stack of the window {nr} using {dict}.
8933 {nr} can be the window number or the |window-ID|.
8934
8935 For a list of supported items in {dict}, refer to
Bram Moolenaar271fa082020-01-02 14:02:16 +01008936 |gettagstack()|. "curidx" takes effect before changing the tag
8937 stack.
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008938 *E962*
Bram Moolenaar271fa082020-01-02 14:02:16 +01008939 How the tag stack is modified depends on the {action}
8940 argument:
8941 - If {action} is not present or is set to 'r', then the tag
8942 stack is replaced.
8943 - If {action} is set to 'a', then new entries from {dict} are
8944 pushed (added) onto the tag stack.
8945 - If {action} is set to 't', then all the entries from the
8946 current entry in the tag stack or "curidx" in {dict} are
8947 removed and then new entries are pushed to the stack.
8948
8949 The current index is set to one after the length of the tag
8950 stack after the modification.
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008951
8952 Returns zero for success, -1 for failure.
8953
Bram Moolenaard1caa942020-04-10 22:10:56 +02008954 Examples (for more examples see |tagstack-examples||):
8955 Empty the tag stack of window 3: >
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008956 call settagstack(3, {'items' : []})
8957
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008958< Save and restore the tag stack: >
8959 let stack = gettagstack(1003)
8960 " do something else
8961 call settagstack(1003, stack)
8962 unlet stack
8963<
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008964 Can also be used as a |method|, the base is passed as the
8965 second argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008966 GetStack()->settagstack(winnr)
8967
8968setwinvar({winnr}, {varname}, {val}) *setwinvar()*
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008969 Like |settabwinvar()| for the current tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008970 Examples: >
8971 :call setwinvar(1, "&list", 0)
8972 :call setwinvar(2, "myvar", "foobar")
Bram Moolenaar071d4272004-06-13 20:20:40 +00008973
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008974< Can also be used as a |method|, the base is passed as the
8975 third argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008976 GetValue()->setwinvar(winnr, name)
8977
Bram Moolenaaraf9aeb92013-02-13 17:35:04 +01008978sha256({string}) *sha256()*
Bram Moolenaar2b8388b2015-02-28 13:11:45 +01008979 Returns a String with 64 hex characters, which is the SHA256
Bram Moolenaaraf9aeb92013-02-13 17:35:04 +01008980 checksum of {string}.
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008981
8982 Can also be used as a |method|: >
8983 GetText()->sha256()
8984
8985< {only available when compiled with the |+cryptv| feature}
Bram Moolenaaraf9aeb92013-02-13 17:35:04 +01008986
Bram Moolenaar05bb9532008-07-04 09:44:11 +00008987shellescape({string} [, {special}]) *shellescape()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008988 Escape {string} for use as a shell command argument.
Bram Moolenaar25e42232019-08-04 15:04:10 +02008989 On MS-Windows, when 'shellslash' is not set, it will enclose
8990 {string} in double quotes and double all double quotes within
8991 {string}.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02008992 Otherwise it will enclose {string} in single quotes and
8993 replace all "'" with "'\''".
Bram Moolenaar875feea2017-06-11 16:07:51 +02008994
Bram Moolenaar05bb9532008-07-04 09:44:11 +00008995 When the {special} argument is present and it's a non-zero
8996 Number or a non-empty String (|non-zero-arg|), then special
Bram Moolenaare37d50a2008-08-06 17:06:04 +00008997 items such as "!", "%", "#" and "<cword>" will be preceded by
8998 a backslash. This backslash will be removed again by the |:!|
Bram Moolenaar05bb9532008-07-04 09:44:11 +00008999 command.
Bram Moolenaar875feea2017-06-11 16:07:51 +02009000
Bram Moolenaare37d50a2008-08-06 17:06:04 +00009001 The "!" character will be escaped (again with a |non-zero-arg|
9002 {special}) when 'shell' contains "csh" in the tail. That is
9003 because for csh and tcsh "!" is used for history replacement
9004 even when inside single quotes.
Bram Moolenaar875feea2017-06-11 16:07:51 +02009005
9006 With a |non-zero-arg| {special} the <NL> character is also
9007 escaped. When 'shell' containing "csh" in the tail it's
Bram Moolenaare37d50a2008-08-06 17:06:04 +00009008 escaped a second time.
Bram Moolenaar875feea2017-06-11 16:07:51 +02009009
Bram Moolenaar05bb9532008-07-04 09:44:11 +00009010 Example of use with a |:!| command: >
9011 :exe '!dir ' . shellescape(expand('<cfile>'), 1)
9012< This results in a directory listing for the file under the
9013 cursor. Example of use with |system()|: >
9014 :call system("chmod +w -- " . shellescape(expand("%")))
Bram Moolenaar26df0922014-02-23 23:39:13 +01009015< See also |::S|.
Bram Moolenaar60a495f2006-10-03 12:44:42 +00009016
Bram Moolenaaraad222c2019-09-06 22:46:09 +02009017 Can also be used as a |method|: >
9018 GetCommand()->shellescape()
Bram Moolenaar60a495f2006-10-03 12:44:42 +00009019
Bram Moolenaarf9514162018-11-22 03:08:29 +01009020shiftwidth([{col}]) *shiftwidth()*
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02009021 Returns the effective value of 'shiftwidth'. This is the
9022 'shiftwidth' value unless it is zero, in which case it is the
Bram Moolenaar009d84a2016-01-28 14:12:00 +01009023 'tabstop' value. This function was introduced with patch
Bram Moolenaarf9514162018-11-22 03:08:29 +01009024 7.3.694 in 2012, everybody should have it by now (however it
9025 did not allow for the optional {col} argument until 8.1.542).
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02009026
Bram Moolenaarf9514162018-11-22 03:08:29 +01009027 When there is one argument {col} this is used as column number
9028 for which to return the 'shiftwidth' value. This matters for the
9029 'vartabstop' feature. If the 'vartabstop' setting is enabled and
9030 no {col} argument is given, column 1 will be assumed.
Bram Moolenaarf0d58ef2018-11-16 16:13:44 +01009031
Bram Moolenaaraad222c2019-09-06 22:46:09 +02009032 Can also be used as a |method|: >
9033 GetColumn()->shiftwidth()
9034
Bram Moolenaared997ad2019-07-21 16:42:00 +02009035sign_ functions are documented here: |sign-functions-details|
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02009036
Bram Moolenaar162b7142018-12-21 15:17:36 +01009037
Bram Moolenaar071d4272004-06-13 20:20:40 +00009038simplify({filename}) *simplify()*
9039 Simplify the file name as much as possible without changing
9040 the meaning. Shortcuts (on MS-Windows) or symbolic links (on
9041 Unix) are not resolved. If the first path component in
9042 {filename} designates the current directory, this will be
9043 valid for the result as well. A trailing path separator is
9044 not removed either.
9045 Example: >
9046 simplify("./dir/.././/file/") == "./file/"
9047< Note: The combination "dir/.." is only removed if "dir" is
9048 a searchable directory or does not exist. On Unix, it is also
9049 removed when "dir" is a symbolic link within the same
9050 directory. In order to resolve all the involved symbolic
9051 links before simplifying the path name, use |resolve()|.
9052
Bram Moolenaar7035fd92020-04-08 20:03:52 +02009053 Can also be used as a |method|: >
9054 GetName()->simplify()
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009055
Bram Moolenaar446cb832008-06-24 21:56:24 +00009056sin({expr}) *sin()*
9057 Return the sine of {expr}, measured in radians, as a |Float|.
9058 {expr} must evaluate to a |Float| or a |Number|.
9059 Examples: >
9060 :echo sin(100)
9061< -0.506366 >
9062 :echo sin(-4.01)
9063< 0.763301
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009064
9065 Can also be used as a |method|: >
9066 Compute()->sin()
9067<
Bram Moolenaar446cb832008-06-24 21:56:24 +00009068 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009069
Bram Moolenaar446cb832008-06-24 21:56:24 +00009070
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009071sinh({expr}) *sinh()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02009072 Return the hyperbolic sine of {expr} as a |Float| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009073 [-inf, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02009074 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009075 Examples: >
9076 :echo sinh(0.5)
9077< 0.521095 >
9078 :echo sinh(-0.9)
9079< -1.026517
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009080
9081 Can also be used as a |method|: >
9082 Compute()->sinh()
9083<
Bram Moolenaardb84e452010-08-15 13:50:43 +02009084 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009085
9086
Bram Moolenaar5f894962011-06-19 02:55:37 +02009087sort({list} [, {func} [, {dict}]]) *sort()* *E702*
Bram Moolenaar327aa022014-03-25 18:24:23 +01009088 Sort the items in {list} in-place. Returns {list}.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009089
Bram Moolenaar327aa022014-03-25 18:24:23 +01009090 If you want a list to remain unmodified make a copy first: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009091 :let sortedlist = sort(copy(mylist))
Bram Moolenaar822ff862014-06-12 21:46:14 +02009092
Bram Moolenaar946e27a2014-06-25 18:50:27 +02009093< When {func} is omitted, is empty or zero, then sort() uses the
9094 string representation of each item to sort on. Numbers sort
9095 after Strings, |Lists| after Numbers. For sorting text in the
9096 current buffer use |:sort|.
Bram Moolenaar327aa022014-03-25 18:24:23 +01009097
Bram Moolenaar34401cc2014-08-29 15:12:19 +02009098 When {func} is given and it is '1' or 'i' then case is
Bram Moolenaar946e27a2014-06-25 18:50:27 +02009099 ignored.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009100
Bram Moolenaar946e27a2014-06-25 18:50:27 +02009101 When {func} is given and it is 'n' then all items will be
9102 sorted numerical (Implementation detail: This uses the
9103 strtod() function to parse numbers, Strings, Lists, Dicts and
9104 Funcrefs will be considered as being 0).
9105
Bram Moolenaarb00da1d2015-12-03 16:33:12 +01009106 When {func} is given and it is 'N' then all items will be
9107 sorted numerical. This is like 'n' but a string containing
9108 digits will be used as the number they represent.
9109
Bram Moolenaar13d5aee2016-01-21 23:36:05 +01009110 When {func} is given and it is 'f' then all items will be
9111 sorted numerical. All values must be a Number or a Float.
9112
Bram Moolenaar32466aa2006-02-24 23:53:04 +00009113 When {func} is a |Funcref| or a function name, this function
9114 is called to compare items. The function is invoked with two
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01009115 items as argument and must return zero if they are equal, 1 or
9116 bigger if the first one sorts after the second one, -1 or
9117 smaller if the first one sorts before the second one.
Bram Moolenaar327aa022014-03-25 18:24:23 +01009118
9119 {dict} is for functions with the "dict" attribute. It will be
9120 used to set the local variable "self". |Dictionary-function|
9121
Bram Moolenaar8bb1c3e2014-07-04 16:43:17 +02009122 The sort is stable, items which compare equal (as number or as
9123 string) will keep their relative position. E.g., when sorting
Bram Moolenaardb6ea062014-07-10 22:01:47 +02009124 on numbers, text strings will sort next to each other, in the
Bram Moolenaar8bb1c3e2014-07-04 16:43:17 +02009125 same order as they were originally.
9126
Bram Moolenaarac92e252019-08-03 21:58:38 +02009127 Can also be used as a |method|: >
9128 mylist->sort()
9129
9130< Also see |uniq()|.
Bram Moolenaar327aa022014-03-25 18:24:23 +01009131
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01009132 Example: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009133 func MyCompare(i1, i2)
9134 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
9135 endfunc
9136 let sortedlist = sort(mylist, "MyCompare")
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01009137< A shorter compare version for this specific simple case, which
9138 ignores overflow: >
9139 func MyCompare(i1, i2)
9140 return a:i1 - a:i2
9141 endfunc
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009142<
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02009143sound_clear() *sound_clear()*
9144 Stop playing all sounds.
Bram Moolenaar9b283522019-06-17 22:19:33 +02009145 {only available when compiled with the |+sound| feature}
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02009146
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009147 *sound_playevent()*
9148sound_playevent({name} [, {callback}])
9149 Play a sound identified by {name}. Which event names are
9150 supported depends on the system. Often the XDG sound names
9151 are used. On Ubuntu they may be found in
9152 /usr/share/sounds/freedesktop/stereo. Example: >
9153 call sound_playevent('bell')
Bram Moolenaar9b283522019-06-17 22:19:33 +02009154< On MS-Windows, {name} can be SystemAsterisk, SystemDefault,
9155 SystemExclamation, SystemExit, SystemHand, SystemQuestion,
9156 SystemStart, SystemWelcome, etc.
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009157
Bram Moolenaar9b283522019-06-17 22:19:33 +02009158 When {callback} is specified it is invoked when the sound is
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009159 finished. The first argument is the sound ID, the second
9160 argument is the status:
9161 0 sound was played to the end
Bram Moolenaar12ee7ff2019-06-10 22:47:40 +02009162 1 sound was interrupted
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02009163 2 error occurred after sound started
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009164 Example: >
9165 func Callback(id, status)
9166 echomsg "sound " .. a:id .. " finished with " .. a:status
9167 endfunc
9168 call sound_playevent('bell', 'Callback')
9169
Bram Moolenaar9b283522019-06-17 22:19:33 +02009170< MS-Windows: {callback} doesn't work for this function.
9171
9172 Returns the sound ID, which can be passed to `sound_stop()`.
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009173 Returns zero if the sound could not be played.
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009174
9175 Can also be used as a |method|: >
9176 GetSoundName()->sound_playevent()
9177
9178< {only available when compiled with the |+sound| feature}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009179
9180 *sound_playfile()*
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02009181sound_playfile({path} [, {callback}])
9182 Like `sound_playevent()` but play sound file {path}. {path}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009183 must be a full path. On Ubuntu you may find files to play
9184 with this command: >
9185 :!find /usr/share/sounds -type f | grep -v index.theme
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009186
9187< Can also be used as a |method|: >
9188 GetSoundPath()->sound_playfile()
9189
Bram Moolenaar12ee7ff2019-06-10 22:47:40 +02009190< {only available when compiled with the |+sound| feature}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009191
9192
9193sound_stop({id}) *sound_stop()*
9194 Stop playing sound {id}. {id} must be previously returned by
9195 `sound_playevent()` or `sound_playfile()`.
Bram Moolenaar9b283522019-06-17 22:19:33 +02009196
9197 On MS-Windows, this does not work for event sound started by
9198 `sound_playevent()`. To stop event sounds, use `sound_clear()`.
9199
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009200 Can also be used as a |method|: >
9201 soundid->sound_stop()
9202
9203< {only available when compiled with the |+sound| feature}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009204
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +00009205 *soundfold()*
9206soundfold({word})
9207 Return the sound-folded equivalent of {word}. Uses the first
Bram Moolenaar446cb832008-06-24 21:56:24 +00009208 language in 'spelllang' for the current window that supports
Bram Moolenaar42eeac32005-06-29 22:40:58 +00009209 soundfolding. 'spell' must be set. When no sound folding is
9210 possible the {word} is returned unmodified.
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +00009211 This can be used for making spelling suggestions. Note that
9212 the method can be quite slow.
9213
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009214 Can also be used as a |method|: >
9215 GetWord()->soundfold()
9216<
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009217 *spellbadword()*
Bram Moolenaar1e015462005-09-25 22:16:38 +00009218spellbadword([{sentence}])
9219 Without argument: The result is the badly spelled word under
9220 or after the cursor. The cursor is moved to the start of the
9221 bad word. When no bad word is found in the cursor line the
9222 result is an empty string and the cursor doesn't move.
9223
9224 With argument: The result is the first word in {sentence} that
9225 is badly spelled. If there are no spelling mistakes the
9226 result is an empty string.
9227
9228 The return value is a list with two items:
9229 - The badly spelled word or an empty string.
9230 - The type of the spelling error:
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009231 "bad" spelling mistake
Bram Moolenaar1e015462005-09-25 22:16:38 +00009232 "rare" rare word
9233 "local" word only valid in another region
9234 "caps" word should start with Capital
9235 Example: >
9236 echo spellbadword("the quik brown fox")
9237< ['quik', 'bad'] ~
9238
9239 The spelling information for the current window is used. The
9240 'spell' option must be set and the value of 'spelllang' is
9241 used.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009242
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009243 Can also be used as a |method|: >
9244 GetText()->spellbadword()
9245<
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009246 *spellsuggest()*
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00009247spellsuggest({word} [, {max} [, {capital}]])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00009248 Return a |List| with spelling suggestions to replace {word}.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009249 When {max} is given up to this number of suggestions are
9250 returned. Otherwise up to 25 suggestions are returned.
9251
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00009252 When the {capital} argument is given and it's non-zero only
9253 suggestions with a leading capital will be given. Use this
9254 after a match with 'spellcapcheck'.
9255
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009256 {word} can be a badly spelled word followed by other text.
9257 This allows for joining two words that were split. The
Bram Moolenaarf461c8e2005-06-25 23:04:51 +00009258 suggestions also include the following text, thus you can
9259 replace a line.
9260
9261 {word} may also be a good word. Similar words will then be
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00009262 returned. {word} itself is not included in the suggestions,
9263 although it may appear capitalized.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009264
9265 The spelling information for the current window is used. The
Bram Moolenaar42eeac32005-06-29 22:40:58 +00009266 'spell' option must be set and the values of 'spelllang' and
9267 'spellsuggest' are used.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009268
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009269 Can also be used as a |method|: >
9270 GetWord()->spellsuggest()
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009271
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009272split({expr} [, {pattern} [, {keepempty}]]) *split()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00009273 Make a |List| out of {expr}. When {pattern} is omitted or
9274 empty each white-separated sequence of characters becomes an
9275 item.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009276 Otherwise the string is split where {pattern} matches,
Bram Moolenaar97d62492012-11-15 21:28:22 +01009277 removing the matched characters. 'ignorecase' is not used
9278 here, add \c to ignore case. |/\c|
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009279 When the first or last item is empty it is omitted, unless the
9280 {keepempty} argument is given and it's non-zero.
Bram Moolenaar5c06f8b2005-05-31 22:14:58 +00009281 Other empty items are kept when {pattern} matches at least one
9282 character or when {keepempty} is non-zero.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009283 Example: >
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009284 :let words = split(getline('.'), '\W\+')
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009285< To split a string in individual characters: >
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00009286 :for c in split(mystring, '\zs')
Bram Moolenaar12969c02015-09-08 23:36:10 +02009287< If you want to keep the separator you can also use '\zs' at
9288 the end of the pattern: >
Bram Moolenaar0cb032e2005-04-23 20:52:00 +00009289 :echo split('abc:def:ghi', ':\zs')
9290< ['abc:', 'def:', 'ghi'] ~
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009291 Splitting a table where the first element can be empty: >
9292 :let items = split(line, ':', 1)
9293< The opposite function is |join()|.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009294
Bram Moolenaara74e4942019-08-04 17:35:53 +02009295 Can also be used as a |method|: >
9296 GetString()->split()
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009297
Bram Moolenaar446cb832008-06-24 21:56:24 +00009298sqrt({expr}) *sqrt()*
9299 Return the non-negative square root of Float {expr} as a
9300 |Float|.
9301 {expr} must evaluate to a |Float| or a |Number|. When {expr}
9302 is negative the result is NaN (Not a Number).
9303 Examples: >
9304 :echo sqrt(100)
9305< 10.0 >
9306 :echo sqrt(-4.01)
9307< nan
Bram Moolenaarc236c162008-07-13 17:41:49 +00009308 "nan" may be different, it depends on system libraries.
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009309
9310 Can also be used as a |method|: >
9311 Compute()->sqrt()
9312<
Bram Moolenaar446cb832008-06-24 21:56:24 +00009313 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009314
Bram Moolenaar446cb832008-06-24 21:56:24 +00009315
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01009316srand([{expr}]) *srand()*
9317 Initialize seed used by |rand()|:
9318 - If {expr} is not given, seed values are initialized by
Bram Moolenaarf8c1f922019-11-28 22:13:14 +01009319 reading from /dev/urandom, if possible, or using time(NULL)
9320 a.k.a. epoch time otherwise; this only has second accuracy.
9321 - If {expr} is given it must be a Number. It is used to
9322 initialize the seed values. This is useful for testing or
9323 when a predictable sequence is intended.
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01009324
9325 Examples: >
9326 :let seed = srand()
9327 :let seed = srand(userinput)
9328 :echo rand(seed)
9329
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009330state([{what}]) *state()*
9331 Return a string which contains characters indicating the
9332 current state. Mostly useful in callbacks that want to do
9333 work that may not always be safe. Roughly this works like:
9334 - callback uses state() to check if work is safe to do.
Bram Moolenaar589edb32019-09-20 14:38:13 +02009335 Yes: then do it right away.
9336 No: add to work queue and add a |SafeState| and/or
9337 |SafeStateAgain| autocommand (|SafeState| triggers at
9338 toplevel, |SafeStateAgain| triggers after handling
9339 messages and callbacks).
9340 - When SafeState or SafeStateAgain is triggered and executes
9341 your autocommand, check with `state()` if the work can be
9342 done now, and if yes remove it from the queue and execute.
9343 Remove the autocommand if the queue is now empty.
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009344 Also see |mode()|.
9345
9346 When {what} is given only characters in this string will be
9347 added. E.g, this checks if the screen has scrolled: >
Bram Moolenaar589edb32019-09-20 14:38:13 +02009348 if state('s') == ''
9349 " screen has not scrolled
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009350<
Bram Moolenaard103ee72019-09-18 21:15:31 +02009351 These characters indicate the state, generally indicating that
9352 something is busy:
Bram Moolenaar589edb32019-09-20 14:38:13 +02009353 m halfway a mapping, :normal command, feedkeys() or
9354 stuffed command
9355 o operator pending or waiting for a command argument,
9356 e.g. after |f|
9357 a Insert mode autocomplete active
9358 x executing an autocommand
Bram Moolenaar2e693a82019-10-16 22:35:02 +02009359 w blocked on waiting, e.g. ch_evalexpr(), ch_read() and
9360 ch_readraw() when reading json.
Bram Moolenaar589edb32019-09-20 14:38:13 +02009361 S not triggering SafeState or SafeStateAgain
9362 c callback invoked, including timer (repeats for
9363 recursiveness up to "ccc")
9364 s screen has scrolled for messages
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009365
Bram Moolenaar81edd172016-04-14 13:51:37 +02009366str2float({expr}) *str2float()*
Bram Moolenaar446cb832008-06-24 21:56:24 +00009367 Convert String {expr} to a Float. This mostly works the same
9368 as when using a floating point number in an expression, see
9369 |floating-point-format|. But it's a bit more permissive.
9370 E.g., "1e40" is accepted, while in an expression you need to
Bram Moolenaard47d5222018-12-09 20:43:55 +01009371 write "1.0e40". The hexadecimal form "0x123" is also
9372 accepted, but not others, like binary or octal.
Bram Moolenaar446cb832008-06-24 21:56:24 +00009373 Text after the number is silently ignored.
9374 The decimal point is always '.', no matter what the locale is
9375 set to. A comma ends the number: "12,345.67" is converted to
9376 12.0. You can strip out thousands separators with
9377 |substitute()|: >
9378 let f = str2float(substitute(text, ',', '', 'g'))
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009379<
9380 Can also be used as a |method|: >
9381 let f = text->substitute(',', '', 'g')->str2float()
9382<
9383 {only available when compiled with the |+float| feature}
Bram Moolenaar446cb832008-06-24 21:56:24 +00009384
Bram Moolenaar9d401282019-04-06 13:18:12 +02009385str2list({expr} [, {utf8}]) *str2list()*
9386 Return a list containing the number values which represent
9387 each character in String {expr}. Examples: >
9388 str2list(" ") returns [32]
9389 str2list("ABC") returns [65, 66, 67]
9390< |list2str()| does the opposite.
9391
9392 When {utf8} is omitted or zero, the current 'encoding' is used.
9393 With {utf8} set to 1, always treat the String as utf-8
9394 characters. With utf-8 composing characters are handled
9395 properly: >
9396 str2list("á") returns [97, 769]
Bram Moolenaar446cb832008-06-24 21:56:24 +00009397
Bram Moolenaara74e4942019-08-04 17:35:53 +02009398< Can also be used as a |method|: >
9399 GetString()->str2list()
9400
9401
Bram Moolenaar60a8de22019-09-15 14:33:22 +02009402str2nr({expr} [, {base} [, {quoted}]]) *str2nr()*
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009403 Convert string {expr} to a number.
Bram Moolenaarfa735342016-01-03 22:14:44 +01009404 {base} is the conversion base, it can be 2, 8, 10 or 16.
Bram Moolenaar60a8de22019-09-15 14:33:22 +02009405 When {quoted} is present and non-zero then embedded single
9406 quotes are ignored, thus "1'000'000" is a million.
Bram Moolenaara74e4942019-08-04 17:35:53 +02009407
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009408 When {base} is omitted base 10 is used. This also means that
9409 a leading zero doesn't cause octal conversion to be used, as
Bram Moolenaara74e4942019-08-04 17:35:53 +02009410 with the default String to Number conversion. Example: >
Bram Moolenaar2e693a82019-10-16 22:35:02 +02009411 let nr = str2nr('0123')
Bram Moolenaara74e4942019-08-04 17:35:53 +02009412<
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009413 When {base} is 16 a leading "0x" or "0X" is ignored. With a
Bram Moolenaarfa735342016-01-03 22:14:44 +01009414 different base the result will be zero. Similarly, when
9415 {base} is 8 a leading "0" is ignored, and when {base} is 2 a
9416 leading "0b" or "0B" is ignored.
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009417 Text after the number is silently ignored.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009418
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009419 Can also be used as a |method|: >
9420 GetText()->str2nr()
9421
9422strcharpart({src}, {start} [, {len}]) *strcharpart()*
9423 Like |strpart()| but using character index and length instead
9424 of byte index and length.
9425 When a character index is used where a character does not
9426 exist it is assumed to be one character. For example: >
9427 strcharpart('abc', -1, 2)
9428< results in 'a'.
9429
9430 Can also be used as a |method|: >
9431 GetText()->strcharpart(5)
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009432
Bram Moolenaar979243b2015-06-26 19:35:49 +02009433strchars({expr} [, {skipcc}]) *strchars()*
Bram Moolenaar72597a52010-07-18 15:31:08 +02009434 The result is a Number, which is the number of characters
Bram Moolenaar979243b2015-06-26 19:35:49 +02009435 in String {expr}.
9436 When {skipcc} is omitted or zero, composing characters are
9437 counted separately.
9438 When {skipcc} set to 1, Composing characters are ignored.
Bram Moolenaardc536092010-07-18 15:45:49 +02009439 Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009440
Bram Moolenaar86ae7202015-07-10 19:31:35 +02009441 {skipcc} is only available after 7.4.755. For backward
9442 compatibility, you can define a wrapper function: >
9443 if has("patch-7.4.755")
9444 function s:strchars(str, skipcc)
9445 return strchars(a:str, a:skipcc)
9446 endfunction
9447 else
9448 function s:strchars(str, skipcc)
9449 if a:skipcc
9450 return strlen(substitute(a:str, ".", "x", "g"))
9451 else
9452 return strchars(a:str)
9453 endif
9454 endfunction
9455 endif
9456<
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009457 Can also be used as a |method|: >
9458 GetText()->strchars()
Bram Moolenaar86ae7202015-07-10 19:31:35 +02009459
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009460strdisplaywidth({expr} [, {col}]) *strdisplaywidth()*
Bram Moolenaardc536092010-07-18 15:45:49 +02009461 The result is a Number, which is the number of display cells
Bram Moolenaar4c92e752019-02-17 21:18:32 +01009462 String {expr} occupies on the screen when it starts at {col}
9463 (first column is zero). When {col} is omitted zero is used.
9464 Otherwise it is the screen column where to start. This
9465 matters for Tab characters.
Bram Moolenaar4d32c2d2010-07-18 22:10:01 +02009466 The option settings of the current window are used. This
9467 matters for anything that's displayed differently, such as
9468 'tabstop' and 'display'.
Bram Moolenaardc536092010-07-18 15:45:49 +02009469 When {expr} contains characters with East Asian Width Class
9470 Ambiguous, this function's return value depends on 'ambiwidth'.
9471 Also see |strlen()|, |strwidth()| and |strchars()|.
Bram Moolenaar72597a52010-07-18 15:31:08 +02009472
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009473 Can also be used as a |method|: >
9474 GetText()->strdisplaywidth()
9475
Bram Moolenaar071d4272004-06-13 20:20:40 +00009476strftime({format} [, {time}]) *strftime()*
9477 The result is a String, which is a formatted date and time, as
9478 specified by the {format} string. The given {time} is used,
9479 or the current time if no time is given. The accepted
9480 {format} depends on your system, thus this is not portable!
9481 See the manual page of the C function strftime() for the
9482 format. The maximum length of the result is 80 characters.
Bram Moolenaar10455d42019-11-21 15:36:18 +01009483 See also |localtime()|, |getftime()| and |strptime()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009484 The language can be changed with the |:language| command.
9485 Examples: >
9486 :echo strftime("%c") Sun Apr 27 11:49:23 1997
9487 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25
9488 :echo strftime("%y%m%d %T") 970427 11:53:55
9489 :echo strftime("%H:%M") 11:55
9490 :echo strftime("%c", getftime("file.c"))
9491 Show mod time of file.c.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009492< Not available on all systems. To check use: >
9493 :if exists("*strftime")
9494
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009495< Can also be used as a |method|: >
9496 GetFormat()->strftime()
9497
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02009498strgetchar({str}, {index}) *strgetchar()*
9499 Get character {index} from {str}. This uses a character
9500 index, not a byte index. Composing characters are considered
9501 separate characters here.
9502 Also see |strcharpart()| and |strchars()|.
9503
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009504 Can also be used as a |method|: >
9505 GetText()->strgetchar(5)
9506
Bram Moolenaar8f999f12005-01-25 22:12:55 +00009507stridx({haystack}, {needle} [, {start}]) *stridx()*
9508 The result is a Number, which gives the byte index in
9509 {haystack} of the first occurrence of the String {needle}.
Bram Moolenaar677ee682005-01-27 14:41:15 +00009510 If {start} is specified, the search starts at index {start}.
9511 This can be used to find a second match: >
Bram Moolenaar81af9252010-12-10 20:35:50 +01009512 :let colon1 = stridx(line, ":")
9513 :let colon2 = stridx(line, ":", colon1 + 1)
Bram Moolenaar677ee682005-01-27 14:41:15 +00009514< The search is done case-sensitive.
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009515 For pattern searches use |match()|.
Bram Moolenaar8f999f12005-01-25 22:12:55 +00009516 -1 is returned if the {needle} does not occur in {haystack}.
Bram Moolenaar677ee682005-01-27 14:41:15 +00009517 See also |strridx()|.
9518 Examples: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00009519 :echo stridx("An Example", "Example") 3
9520 :echo stridx("Starting point", "Start") 0
9521 :echo stridx("Starting point", "start") -1
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009522< *strstr()* *strchr()*
Bram Moolenaar05159a02005-02-26 23:04:13 +00009523 stridx() works similar to the C function strstr(). When used
9524 with a single character it works similar to strchr().
9525
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009526 Can also be used as a |method|: >
9527 GetHaystack()->stridx(needle)
Bram Moolenaar2e693a82019-10-16 22:35:02 +02009528<
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009529 *string()*
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009530string({expr}) Return {expr} converted to a String. If {expr} is a Number,
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01009531 Float, String, Blob or a composition of them, then the result
9532 can be parsed back with |eval()|.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009533 {expr} type result ~
Bram Moolenaar4f3f6682016-03-26 23:01:59 +01009534 String 'string' (single quotes are doubled)
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009535 Number 123
Bram Moolenaar446cb832008-06-24 21:56:24 +00009536 Float 123.123456 or 1.123456e8
Bram Moolenaard8b02732005-01-14 21:48:43 +00009537 Funcref function('name')
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01009538 Blob 0z00112233.44556677.8899
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009539 List [item, item]
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +00009540 Dictionary {key: value, key: value}
Bram Moolenaar4f3f6682016-03-26 23:01:59 +01009541
9542 When a List or Dictionary has a recursive reference it is
9543 replaced by "[...]" or "{...}". Using eval() on the result
9544 will then fail.
9545
Bram Moolenaarac92e252019-08-03 21:58:38 +02009546 Can also be used as a |method|: >
9547 mylist->string()
9548
9549< Also see |strtrans()|.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009550
Bram Moolenaar071d4272004-06-13 20:20:40 +00009551 *strlen()*
9552strlen({expr}) The result is a Number, which is the length of the String
Bram Moolenaare344bea2005-09-01 20:46:49 +00009553 {expr} in bytes.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009554 If the argument is a Number it is first converted to a String.
9555 For other types an error is given.
Bram Moolenaar641e48c2015-06-25 16:09:26 +02009556 If you want to count the number of multi-byte characters use
9557 |strchars()|.
9558 Also see |len()|, |strdisplaywidth()| and |strwidth()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009559
Bram Moolenaara74e4942019-08-04 17:35:53 +02009560 Can also be used as a |method|: >
9561 GetString()->strlen()
9562
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009563strpart({src}, {start} [, {len}]) *strpart()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00009564 The result is a String, which is part of {src}, starting from
Bram Moolenaar9372a112005-12-06 19:59:18 +00009565 byte {start}, with the byte length {len}.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02009566 To count characters instead of bytes use |strcharpart()|.
9567
9568 When bytes are selected which do not exist, this doesn't
9569 result in an error, the bytes are simply omitted.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009570 If {len} is missing, the copy continues from {start} till the
9571 end of the {src}. >
9572 strpart("abcdefg", 3, 2) == "de"
9573 strpart("abcdefg", -2, 4) == "ab"
9574 strpart("abcdefg", 5, 4) == "fg"
Bram Moolenaar446cb832008-06-24 21:56:24 +00009575 strpart("abcdefg", 3) == "defg"
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02009576
Bram Moolenaar071d4272004-06-13 20:20:40 +00009577< Note: To get the first character, {start} must be 0. For
9578 example, to get three bytes under and after the cursor: >
Bram Moolenaar61660ea2006-04-07 21:40:07 +00009579 strpart(getline("."), col(".") - 1, 3)
Bram Moolenaar071d4272004-06-13 20:20:40 +00009580<
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009581 Can also be used as a |method|: >
9582 GetText()->strpart(5)
9583
Bram Moolenaar10455d42019-11-21 15:36:18 +01009584strptime({format}, {timestring}) *strptime()*
9585 The result is a Number, which is a unix timestamp representing
9586 the date and time in {timestring}, which is expected to match
9587 the format specified in {format}.
9588
9589 The accepted {format} depends on your system, thus this is not
9590 portable! See the manual page of the C function strptime()
9591 for the format. Especially avoid "%c". The value of $TZ also
9592 matters.
9593
9594 If the {timestring} cannot be parsed with {format} zero is
9595 returned. If you do not know the format of {timestring} you
9596 can try different {format} values until you get a non-zero
9597 result.
9598
9599 See also |strftime()|.
9600 Examples: >
9601 :echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
9602< 862156163 >
9603 :echo strftime("%c", strptime("%y%m%d %T", "970427 11:53:55"))
9604< Sun Apr 27 11:53:55 1997 >
9605 :echo strftime("%c", strptime("%Y%m%d%H%M%S", "19970427115355") + 3600)
9606< Sun Apr 27 12:53:55 1997
9607
9608 Not available on all systems. To check use: >
9609 :if exists("*strptime")
9610
9611
Bram Moolenaar677ee682005-01-27 14:41:15 +00009612strridx({haystack}, {needle} [, {start}]) *strridx()*
9613 The result is a Number, which gives the byte index in
9614 {haystack} of the last occurrence of the String {needle}.
9615 When {start} is specified, matches beyond this index are
9616 ignored. This can be used to find a match before a previous
9617 match: >
9618 :let lastcomma = strridx(line, ",")
9619 :let comma2 = strridx(line, ",", lastcomma - 1)
9620< The search is done case-sensitive.
Bram Moolenaar8f999f12005-01-25 22:12:55 +00009621 For pattern searches use |match()|.
9622 -1 is returned if the {needle} does not occur in {haystack}.
Bram Moolenaard4755bb2004-09-02 19:12:26 +00009623 If the {needle} is empty the length of {haystack} is returned.
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00009624 See also |stridx()|. Examples: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00009625 :echo strridx("an angry armadillo", "an") 3
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009626< *strrchr()*
Bram Moolenaar05159a02005-02-26 23:04:13 +00009627 When used with a single character it works similar to the C
9628 function strrchr().
9629
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009630 Can also be used as a |method|: >
9631 GetHaystack()->strridx(needle)
9632
Bram Moolenaar071d4272004-06-13 20:20:40 +00009633strtrans({expr}) *strtrans()*
9634 The result is a String, which is {expr} with all unprintable
9635 characters translated into printable characters |'isprint'|.
9636 Like they are shown in a window. Example: >
9637 echo strtrans(@a)
9638< This displays a newline in register a as "^@" instead of
9639 starting a new line.
9640
Bram Moolenaara74e4942019-08-04 17:35:53 +02009641 Can also be used as a |method|: >
9642 GetString()->strtrans()
9643
Bram Moolenaar72597a52010-07-18 15:31:08 +02009644strwidth({expr}) *strwidth()*
9645 The result is a Number, which is the number of display cells
9646 String {expr} occupies. A Tab character is counted as one
Bram Moolenaardc536092010-07-18 15:45:49 +02009647 cell, alternatively use |strdisplaywidth()|.
Bram Moolenaar72597a52010-07-18 15:31:08 +02009648 When {expr} contains characters with East Asian Width Class
9649 Ambiguous, this function's return value depends on 'ambiwidth'.
Bram Moolenaardc536092010-07-18 15:45:49 +02009650 Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
Bram Moolenaar72597a52010-07-18 15:31:08 +02009651
Bram Moolenaara74e4942019-08-04 17:35:53 +02009652 Can also be used as a |method|: >
9653 GetString()->strwidth()
9654
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009655submatch({nr} [, {list}]) *submatch()* *E935*
Bram Moolenaar251e1912011-06-19 05:09:16 +02009656 Only for an expression in a |:substitute| command or
9657 substitute() function.
9658 Returns the {nr}'th submatch of the matched text. When {nr}
9659 is 0 the whole matched text is returned.
Bram Moolenaar41571762014-04-02 19:00:58 +02009660 Note that a NL in the string can stand for a line break of a
9661 multi-line match or a NUL character in the text.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009662 Also see |sub-replace-expression|.
Bram Moolenaar41571762014-04-02 19:00:58 +02009663
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009664 If {list} is present and non-zero then submatch() returns
9665 a list of strings, similar to |getline()| with two arguments.
Bram Moolenaar41571762014-04-02 19:00:58 +02009666 NL characters in the text represent NUL characters in the
9667 text.
9668 Only returns more than one item for |:substitute|, inside
9669 |substitute()| this list will always contain one or zero
9670 items, since there are no real line breaks.
9671
Bram Moolenaar6100d022016-10-02 16:51:57 +02009672 When substitute() is used recursively only the submatches in
9673 the current (deepest) call can be obtained.
9674
Bram Moolenaar2f058492017-11-30 20:27:52 +01009675 Examples: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00009676 :s/\d\+/\=submatch(0) + 1/
Bram Moolenaar2f058492017-11-30 20:27:52 +01009677 :echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +00009678< This finds the first number in the line and adds one to it.
9679 A line break is included as a newline character.
9680
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009681 Can also be used as a |method|: >
9682 GetNr()->submatch()
9683
Bram Moolenaar071d4272004-06-13 20:20:40 +00009684substitute({expr}, {pat}, {sub}, {flags}) *substitute()*
9685 The result is a String, which is a copy of {expr}, in which
Bram Moolenaar251e1912011-06-19 05:09:16 +02009686 the first match of {pat} is replaced with {sub}.
9687 When {flags} is "g", all matches of {pat} in {expr} are
9688 replaced. Otherwise {flags} should be "".
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009689
Bram Moolenaar251e1912011-06-19 05:09:16 +02009690 This works like the ":substitute" command (without any flags).
9691 But the matching with {pat} is always done like the 'magic'
9692 option is set and 'cpoptions' is empty (to make scripts
Bram Moolenaar2df58b42012-11-28 18:21:11 +01009693 portable). 'ignorecase' is still relevant, use |/\c| or |/\C|
9694 if you want to ignore or match case and ignore 'ignorecase'.
9695 'smartcase' is not used. See |string-match| for how {pat} is
9696 used.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009697
9698 A "~" in {sub} is not replaced with the previous {sub}.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009699 Note that some codes in {sub} have a special meaning
Bram Moolenaar58b85342016-08-14 19:54:54 +02009700 |sub-replace-special|. For example, to replace something with
Bram Moolenaar071d4272004-06-13 20:20:40 +00009701 "\n" (two characters), use "\\\\n" or '\\n'.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009702
Bram Moolenaar071d4272004-06-13 20:20:40 +00009703 When {pat} does not match in {expr}, {expr} is returned
9704 unmodified.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009705
Bram Moolenaar071d4272004-06-13 20:20:40 +00009706 Example: >
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009707 :let &path = substitute(&path, ",\\=[^,]*$", "", "")
Bram Moolenaar071d4272004-06-13 20:20:40 +00009708< This removes the last component of the 'path' option. >
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009709 :echo substitute("testing", ".*", "\\U\\0", "")
Bram Moolenaar071d4272004-06-13 20:20:40 +00009710< results in "TESTING".
Bram Moolenaar251e1912011-06-19 05:09:16 +02009711
9712 When {sub} starts with "\=", the remainder is interpreted as
9713 an expression. See |sub-replace-expression|. Example: >
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009714 :echo substitute(s, '%\(\x\x\)',
Bram Moolenaar20f90cf2011-05-19 12:22:51 +02009715 \ '\=nr2char("0x" . submatch(1))', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +00009716
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009717< When {sub} is a Funcref that function is called, with one
9718 optional argument. Example: >
9719 :echo substitute(s, '%\(\x\x\)', SubNr, 'g')
9720< The optional argument is a list which contains the whole
Bram Moolenaar58b85342016-08-14 19:54:54 +02009721 matched string and up to nine submatches, like what
9722 |submatch()| returns. Example: >
9723 :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009724
Bram Moolenaara74e4942019-08-04 17:35:53 +02009725< Can also be used as a |method|: >
9726 GetString()->substitute(pat, sub, flags)
9727
Bram Moolenaar20aac6c2018-09-02 21:07:30 +02009728swapinfo({fname}) *swapinfo()*
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009729 The result is a dictionary, which holds information about the
9730 swapfile {fname}. The available fields are:
Bram Moolenaar95bafa22018-10-02 13:26:25 +02009731 version Vim version
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009732 user user name
9733 host host name
9734 fname original file name
Bram Moolenaar95bafa22018-10-02 13:26:25 +02009735 pid PID of the Vim process that created the swap
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009736 file
9737 mtime last modification time in seconds
9738 inode Optional: INODE number of the file
Bram Moolenaar47ad5652018-08-21 21:09:07 +02009739 dirty 1 if file was modified, 0 if not
Bram Moolenaarfc65cab2018-08-28 22:58:02 +02009740 Note that "user" and "host" are truncated to at most 39 bytes.
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009741 In case of failure an "error" item is added with the reason:
9742 Cannot open file: file not found or in accessible
9743 Cannot read file: cannot read first block
Bram Moolenaar47ad5652018-08-21 21:09:07 +02009744 Not a swap file: does not contain correct block ID
9745 Magic number mismatch: Info in first block is invalid
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009746
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009747 Can also be used as a |method|: >
9748 GetFilename()->swapinfo()
9749
Bram Moolenaar110bd602018-09-16 18:46:59 +02009750swapname({expr}) *swapname()*
9751 The result is the swap file path of the buffer {expr}.
9752 For the use of {expr}, see |bufname()| above.
9753 If buffer {expr} is the current buffer, the result is equal to
9754 |:swapname| (unless no swap file).
9755 If buffer {expr} has no swap file, returns an empty string.
9756
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009757 Can also be used as a |method|: >
9758 GetBufname()->swapname()
9759
Bram Moolenaar47136d72004-10-12 20:02:24 +00009760synID({lnum}, {col}, {trans}) *synID()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00009761 The result is a Number, which is the syntax ID at the position
Bram Moolenaar47136d72004-10-12 20:02:24 +00009762 {lnum} and {col} in the current window.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009763 The syntax ID can be used with |synIDattr()| and
9764 |synIDtrans()| to obtain syntax information about text.
Bram Moolenaarce0842a2005-07-18 21:58:11 +00009765
Bram Moolenaar47136d72004-10-12 20:02:24 +00009766 {col} is 1 for the leftmost column, {lnum} is 1 for the first
Bram Moolenaarce0842a2005-07-18 21:58:11 +00009767 line. 'synmaxcol' applies, in a longer line zero is returned.
Bram Moolenaarca635012015-09-25 20:34:21 +02009768 Note that when the position is after the last character,
9769 that's where the cursor can be in Insert mode, synID() returns
9770 zero.
Bram Moolenaarce0842a2005-07-18 21:58:11 +00009771
Bram Moolenaar79815f12016-07-09 17:07:29 +02009772 When {trans} is |TRUE|, transparent items are reduced to the
Bram Moolenaar58b85342016-08-14 19:54:54 +02009773 item that they reveal. This is useful when wanting to know
Bram Moolenaar79815f12016-07-09 17:07:29 +02009774 the effective color. When {trans} is |FALSE|, the transparent
Bram Moolenaar071d4272004-06-13 20:20:40 +00009775 item is returned. This is useful when wanting to know which
9776 syntax item is effective (e.g. inside parens).
9777 Warning: This function can be very slow. Best speed is
9778 obtained by going through the file in forward direction.
9779
9780 Example (echoes the name of the syntax item under the cursor): >
9781 :echo synIDattr(synID(line("."), col("."), 1), "name")
9782<
Bram Moolenaar7510fe72010-07-25 12:46:44 +02009783
Bram Moolenaar071d4272004-06-13 20:20:40 +00009784synIDattr({synID}, {what} [, {mode}]) *synIDattr()*
9785 The result is a String, which is the {what} attribute of
9786 syntax ID {synID}. This can be used to obtain information
9787 about a syntax item.
9788 {mode} can be "gui", "cterm" or "term", to get the attributes
Bram Moolenaar58b85342016-08-14 19:54:54 +02009789 for that mode. When {mode} is omitted, or an invalid value is
Bram Moolenaar071d4272004-06-13 20:20:40 +00009790 used, the attributes for the currently active highlighting are
9791 used (GUI, cterm or term).
9792 Use synIDtrans() to follow linked highlight groups.
9793 {what} result
9794 "name" the name of the syntax item
9795 "fg" foreground color (GUI: color name used to set
9796 the color, cterm: color number as a string,
9797 term: empty string)
Bram Moolenaar6f507d62008-11-28 10:16:05 +00009798 "bg" background color (as with "fg")
Bram Moolenaar12682fd2010-03-10 13:43:49 +01009799 "font" font name (only available in the GUI)
9800 |highlight-font|
Bram Moolenaar6f507d62008-11-28 10:16:05 +00009801 "sp" special color (as with "fg") |highlight-guisp|
Bram Moolenaar071d4272004-06-13 20:20:40 +00009802 "fg#" like "fg", but for the GUI and the GUI is
9803 running the name in "#RRGGBB" form
9804 "bg#" like "fg#" for "bg"
Bram Moolenaar6f507d62008-11-28 10:16:05 +00009805 "sp#" like "fg#" for "sp"
Bram Moolenaar071d4272004-06-13 20:20:40 +00009806 "bold" "1" if bold
9807 "italic" "1" if italic
9808 "reverse" "1" if reverse
9809 "inverse" "1" if inverse (= reverse)
Bram Moolenaar12682fd2010-03-10 13:43:49 +01009810 "standout" "1" if standout
Bram Moolenaar071d4272004-06-13 20:20:40 +00009811 "underline" "1" if underlined
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009812 "undercurl" "1" if undercurled
Bram Moolenaarcf4b00c2017-09-02 18:33:56 +02009813 "strike" "1" if strikethrough
Bram Moolenaar071d4272004-06-13 20:20:40 +00009814
9815 Example (echoes the color of the syntax item under the
9816 cursor): >
9817 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
9818<
Bram Moolenaara74e4942019-08-04 17:35:53 +02009819 Can also be used as a |method|: >
9820 :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
9821
9822
Bram Moolenaar071d4272004-06-13 20:20:40 +00009823synIDtrans({synID}) *synIDtrans()*
9824 The result is a Number, which is the translated syntax ID of
9825 {synID}. This is the syntax group ID of what is being used to
9826 highlight the character. Highlight links given with
9827 ":highlight link" are followed.
9828
Bram Moolenaara74e4942019-08-04 17:35:53 +02009829 Can also be used as a |method|: >
9830 :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
9831
Bram Moolenaar483c5d82010-10-20 18:45:33 +02009832synconcealed({lnum}, {col}) *synconcealed()*
Bram Moolenaar4d785892017-06-22 22:00:50 +02009833 The result is a List with currently three items:
9834 1. The first item in the list is 0 if the character at the
9835 position {lnum} and {col} is not part of a concealable
9836 region, 1 if it is.
9837 2. The second item in the list is a string. If the first item
9838 is 1, the second item contains the text which will be
9839 displayed in place of the concealed text, depending on the
9840 current setting of 'conceallevel' and 'listchars'.
Bram Moolenaarcc0750d2017-06-24 22:29:24 +02009841 3. The third and final item in the list is a number
9842 representing the specific syntax region matched in the
9843 line. When the character is not concealed the value is
9844 zero. This allows detection of the beginning of a new
9845 concealable region if there are two consecutive regions
9846 with the same replacement character. For an example, if
9847 the text is "123456" and both "23" and "45" are concealed
Bram Moolenaar95bafa22018-10-02 13:26:25 +02009848 and replaced by the character "X", then:
Bram Moolenaarcc0750d2017-06-24 22:29:24 +02009849 call returns ~
Bram Moolenaarc572da52017-08-27 16:52:01 +02009850 synconcealed(lnum, 1) [0, '', 0]
9851 synconcealed(lnum, 2) [1, 'X', 1]
9852 synconcealed(lnum, 3) [1, 'X', 1]
9853 synconcealed(lnum, 4) [1, 'X', 2]
9854 synconcealed(lnum, 5) [1, 'X', 2]
9855 synconcealed(lnum, 6) [0, '', 0]
Bram Moolenaar483c5d82010-10-20 18:45:33 +02009856
9857
Bram Moolenaar9d188ab2008-01-10 21:24:39 +00009858synstack({lnum}, {col}) *synstack()*
9859 Return a |List|, which is the stack of syntax items at the
9860 position {lnum} and {col} in the current window. Each item in
9861 the List is an ID like what |synID()| returns.
Bram Moolenaar9d188ab2008-01-10 21:24:39 +00009862 The first item in the List is the outer region, following are
9863 items contained in that one. The last one is what |synID()|
9864 returns, unless not the whole item is highlighted or it is a
9865 transparent item.
9866 This function is useful for debugging a syntax file.
9867 Example that shows the syntax stack under the cursor: >
9868 for id in synstack(line("."), col("."))
9869 echo synIDattr(id, "name")
9870 endfor
Bram Moolenaar0bc380a2010-07-10 13:52:13 +02009871< When the position specified with {lnum} and {col} is invalid
9872 nothing is returned. The position just after the last
9873 character in a line and the first column in an empty line are
9874 valid positions.
Bram Moolenaar9d188ab2008-01-10 21:24:39 +00009875
Bram Moolenaarc0197e22004-09-13 20:26:32 +00009876system({expr} [, {input}]) *system()* *E677*
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009877 Get the output of the shell command {expr} as a string. See
9878 |systemlist()| to get the output as a List.
Bram Moolenaar57ebe6e2014-04-05 18:55:46 +02009879
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009880 When {input} is given and is a string this string is written
9881 to a file and passed as stdin to the command. The string is
9882 written as-is, you need to take care of using the correct line
Bram Moolenaar57ebe6e2014-04-05 18:55:46 +02009883 separators yourself.
9884 If {input} is given and is a |List| it is written to the file
9885 in a way |writefile()| does with {binary} set to "b" (i.e.
9886 with a newline between each list item with newlines inside
Bram Moolenaar12c44922017-01-08 13:26:03 +01009887 list items converted to NULs).
9888 When {input} is given and is a number that is a valid id for
9889 an existing buffer then the content of the buffer is written
9890 to the file line by line, each line terminated by a NL and
9891 NULs characters where the text has a NL.
Bram Moolenaar069c1e72016-07-15 21:25:08 +02009892
9893 Pipes are not used, the 'shelltemp' option is not used.
Bram Moolenaar57ebe6e2014-04-05 18:55:46 +02009894
Bram Moolenaar04186092016-08-29 21:55:35 +02009895 When prepended by |:silent| the terminal will not be set to
Bram Moolenaar52a72462014-08-29 15:53:52 +02009896 cooked mode. This is meant to be used for commands that do
9897 not need the user to type. It avoids stray characters showing
9898 up on the screen which require |CTRL-L| to remove. >
9899 :silent let f = system('ls *.vim')
9900<
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009901 Note: Use |shellescape()| or |::S| with |expand()| or
9902 |fnamemodify()| to escape special characters in a command
9903 argument. Newlines in {expr} may cause the command to fail.
9904 The characters in 'shellquote' and 'shellxquote' may also
Bram Moolenaar26df0922014-02-23 23:39:13 +01009905 cause trouble.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009906 This is not to be used for interactive commands.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009907
Bram Moolenaar05bb9532008-07-04 09:44:11 +00009908 The result is a String. Example: >
9909 :let files = system("ls " . shellescape(expand('%:h')))
Bram Moolenaar26df0922014-02-23 23:39:13 +01009910 :let files = system('ls ' . expand('%:h:S'))
Bram Moolenaar071d4272004-06-13 20:20:40 +00009911
9912< To make the result more system-independent, the shell output
9913 is filtered to replace <CR> with <NL> for Macintosh, and
9914 <CR><NL> with <NL> for DOS-like systems.
Bram Moolenaar9d98fe92013-08-03 18:35:36 +02009915 To avoid the string being truncated at a NUL, all NUL
9916 characters are replaced with SOH (0x01).
9917
Bram Moolenaar071d4272004-06-13 20:20:40 +00009918 The command executed is constructed using several options:
9919 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
9920 ({tmp} is an automatically generated file name).
Bram Moolenaar6f345a12019-12-17 21:27:18 +01009921 For Unix, braces are put around {expr} to allow for
Bram Moolenaar071d4272004-06-13 20:20:40 +00009922 concatenated commands.
9923
Bram Moolenaar433f7c82006-03-21 21:29:36 +00009924 The command will be executed in "cooked" mode, so that a
9925 CTRL-C will interrupt the command (on Unix at least).
9926
Bram Moolenaar071d4272004-06-13 20:20:40 +00009927 The resulting error code can be found in |v:shell_error|.
9928 This function will fail in |restricted-mode|.
Bram Moolenaar4770d092006-01-12 23:22:24 +00009929
9930 Note that any wrong value in the options mentioned above may
9931 make the function fail. It has also been reported to fail
9932 when using a security agent application.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009933 Unlike ":!cmd" there is no automatic check for changed files.
9934 Use |:checktime| to force a check.
9935
Bram Moolenaara74e4942019-08-04 17:35:53 +02009936 Can also be used as a |method|: >
9937 :echo GetCmd()->system()
9938
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009939
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009940systemlist({expr} [, {input}]) *systemlist()*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009941 Same as |system()|, but returns a |List| with lines (parts of
9942 output separated by NL) with NULs transformed into NLs. Output
9943 is the same as |readfile()| will output with {binary} argument
Bram Moolenaar5be4cee2019-09-27 19:34:08 +02009944 set to "b", except that there is no extra empty item when the
9945 result ends in a NL.
9946 Note that on MS-Windows you may get trailing CR characters.
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009947
Bram Moolenaar5be4cee2019-09-27 19:34:08 +02009948 To see the difference between "echo hello" and "echo -n hello"
9949 use |system()| and |split()|: >
9950 echo system('echo hello')->split('\n', 1)
9951<
Bram Moolenaar975b5272016-03-15 23:10:59 +01009952 Returns an empty string on error.
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009953
Bram Moolenaara74e4942019-08-04 17:35:53 +02009954 Can also be used as a |method|: >
9955 :echo GetCmd()->systemlist()
9956
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009957
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009958tabpagebuflist([{arg}]) *tabpagebuflist()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00009959 The result is a |List|, where each item is the number of the
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009960 buffer associated with each window in the current tab page.
Bram Moolenaardc1f1642016-08-16 18:33:43 +02009961 {arg} specifies the number of the tab page to be used. When
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009962 omitted the current tab page is used.
9963 When {arg} is invalid the number zero is returned.
9964 To get a list of all buffers in all tabs use this: >
Bram Moolenaar61d35bd2012-03-28 20:51:51 +02009965 let buflist = []
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009966 for i in range(tabpagenr('$'))
Bram Moolenaar61d35bd2012-03-28 20:51:51 +02009967 call extend(buflist, tabpagebuflist(i + 1))
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009968 endfor
9969< Note that a buffer may appear in more than one window.
9970
Bram Moolenaarce90e362019-09-08 18:58:44 +02009971 Can also be used as a |method|: >
9972 GetTabpage()->tabpagebuflist()
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009973
9974tabpagenr([{arg}]) *tabpagenr()*
Bram Moolenaar7e8fd632006-02-18 22:14:51 +00009975 The result is a Number, which is the number of the current
9976 tab page. The first tab page has number 1.
9977 When the optional argument is "$", the number of the last tab
9978 page is returned (the tab page count).
9979 The number can be used with the |:tab| command.
9980
9981
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +01009982tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()*
Bram Moolenaard04f4402010-08-15 13:30:34 +02009983 Like |winnr()| but for tab page {tabarg}.
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009984 {tabarg} specifies the number of tab page to be used.
9985 {arg} is used like with |winnr()|:
9986 - When omitted the current window number is returned. This is
9987 the window which will be used when going to this tab page.
9988 - When "$" the number of windows is returned.
9989 - When "#" the previous window nr is returned.
9990 Useful examples: >
9991 tabpagewinnr(1) " current window of tab page 1
9992 tabpagewinnr(4, '$') " number of windows in tab page 4
9993< When {tabarg} is invalid zero is returned.
9994
Bram Moolenaarce90e362019-09-08 18:58:44 +02009995 Can also be used as a |method|: >
9996 GetTabpage()->tabpagewinnr()
9997<
Bram Moolenaarfa1d1402006-03-25 21:59:56 +00009998 *tagfiles()*
9999tagfiles() Returns a |List| with the file names used to search for tags
10000 for the current buffer. This is the 'tags' option expanded.
10001
10002
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010003taglist({expr} [, {filename}]) *taglist()*
Bram Moolenaare2cc9702005-03-15 22:43:58 +000010004 Returns a list of tags matching the regular expression {expr}.
Bram Moolenaarc6aafba2017-03-21 17:09:10 +010010005
10006 If {filename} is passed it is used to prioritize the results
10007 in the same way that |:tselect| does. See |tag-priority|.
10008 {filename} should be the full path of the file.
10009
Bram Moolenaard8c00872005-07-22 21:52:15 +000010010 Each list item is a dictionary with at least the following
10011 entries:
Bram Moolenaar280f1262006-01-30 00:14:18 +000010012 name Name of the tag.
10013 filename Name of the file where the tag is
Bram Moolenaaref2f6562007-05-06 13:32:59 +000010014 defined. It is either relative to the
10015 current directory or a full path.
Bram Moolenaare2cc9702005-03-15 22:43:58 +000010016 cmd Ex command used to locate the tag in
10017 the file.
Bram Moolenaar280f1262006-01-30 00:14:18 +000010018 kind Type of the tag. The value for this
Bram Moolenaare2cc9702005-03-15 22:43:58 +000010019 entry depends on the language specific
Bram Moolenaaref2f6562007-05-06 13:32:59 +000010020 kind values. Only available when
10021 using a tags file generated by
10022 Exuberant ctags or hdrtag.
Bram Moolenaar280f1262006-01-30 00:14:18 +000010023 static A file specific tag. Refer to
Bram Moolenaare2cc9702005-03-15 22:43:58 +000010024 |static-tag| for more information.
Bram Moolenaaref2f6562007-05-06 13:32:59 +000010025 More entries may be present, depending on the content of the
10026 tags file: access, implementation, inherits and signature.
10027 Refer to the ctags documentation for information about these
10028 fields. For C code the fields "struct", "class" and "enum"
10029 may appear, they give the name of the entity the tag is
10030 contained in.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +000010031
Bram Moolenaar214641f2017-03-05 17:04:09 +010010032 The ex-command "cmd" can be either an ex search pattern, a
Bram Moolenaar4317d9b2005-03-18 20:25:31 +000010033 line number or a line number followed by a byte number.
Bram Moolenaare2cc9702005-03-15 22:43:58 +000010034
10035 If there are no matching tags, then an empty list is returned.
10036
10037 To get an exact tag match, the anchors '^' and '$' should be
Bram Moolenaara3e6bc92013-01-30 14:18:00 +010010038 used in {expr}. This also make the function work faster.
10039 Refer to |tag-regexp| for more information about the tag
10040 search regular expression pattern.
Bram Moolenaare2cc9702005-03-15 22:43:58 +000010041
10042 Refer to |'tags'| for information about how the tags file is
10043 located by Vim. Refer to |tags-file-format| for the format of
10044 the tags file generated by the different ctags tools.
10045
Bram Moolenaarce90e362019-09-08 18:58:44 +020010046 Can also be used as a |method|: >
10047 GetTagpattern()->taglist()
10048
Bram Moolenaardb7c6862010-05-21 16:33:48 +020010049tan({expr}) *tan()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +020010050 Return the tangent of {expr}, measured in radians, as a |Float|
Bram Moolenaardb7c6862010-05-21 16:33:48 +020010051 in the range [-inf, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +020010052 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +020010053 Examples: >
10054 :echo tan(10)
10055< 0.648361 >
10056 :echo tan(-4.01)
10057< -1.181502
Bram Moolenaar93cf85f2019-08-17 21:36:28 +020010058
10059 Can also be used as a |method|: >
10060 Compute()->tan()
10061<
Bram Moolenaardb84e452010-08-15 13:50:43 +020010062 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +020010063
10064
10065tanh({expr}) *tanh()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +020010066 Return the hyperbolic tangent of {expr} as a |Float| in the
Bram Moolenaardb7c6862010-05-21 16:33:48 +020010067 range [-1, 1].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +020010068 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +020010069 Examples: >
10070 :echo tanh(0.5)
10071< 0.462117 >
10072 :echo tanh(-1)
10073< -0.761594
Bram Moolenaar93cf85f2019-08-17 21:36:28 +020010074
10075 Can also be used as a |method|: >
10076 Compute()->tanh()
10077<
Bram Moolenaardb84e452010-08-15 13:50:43 +020010078 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +020010079
10080
Bram Moolenaar574860b2016-05-24 17:33:34 +020010081tempname() *tempname()* *temp-file-name*
10082 The result is a String, which is the name of a file that
Bram Moolenaar58b85342016-08-14 19:54:54 +020010083 doesn't exist. It can be used for a temporary file. The name
Bram Moolenaar574860b2016-05-24 17:33:34 +020010084 is different for at least 26 consecutive calls. Example: >
10085 :let tmpfile = tempname()
10086 :exe "redir > " . tmpfile
10087< For Unix, the file will be in a private directory |tempfile|.
10088 For MS-Windows forward slashes are used when the 'shellslash'
10089 option is set or when 'shellcmdflag' starts with '-'.
10090
Bram Moolenaared997ad2019-07-21 16:42:00 +020010091
Bram Moolenaar6bf2c622019-07-04 17:12:09 +020010092term_ functions are documented here: |terminal-function-details|
Bram Moolenaar574860b2016-05-24 17:33:34 +020010093
Bram Moolenaar54775062019-07-31 21:07:14 +020010094test_ functions are documented here: |test-functions-details|
Bram Moolenaar8e8df252016-05-25 21:23:21 +020010095
Bram Moolenaar574860b2016-05-24 17:33:34 +020010096
Bram Moolenaar8e97bd72016-08-06 22:05:07 +020010097 *timer_info()*
10098timer_info([{id}])
10099 Return a list with information about timers.
10100 When {id} is given only information about this timer is
10101 returned. When timer {id} does not exist an empty list is
10102 returned.
10103 When {id} is omitted information about all timers is returned.
10104
10105 For each timer the information is stored in a Dictionary with
10106 these items:
10107 "id" the timer ID
10108 "time" time the timer was started with
10109 "remaining" time until the timer fires
10110 "repeat" number of times the timer will still fire;
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010111 -1 means forever
Bram Moolenaar8e97bd72016-08-06 22:05:07 +020010112 "callback" the callback
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010113 "paused" 1 if the timer is paused, 0 otherwise
10114
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010115 Can also be used as a |method|: >
10116 GetTimer()->timer_info()
10117
10118< {only available when compiled with the |+timers| feature}
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010119
10120timer_pause({timer}, {paused}) *timer_pause()*
10121 Pause or unpause a timer. A paused timer does not invoke its
Bram Moolenaardc1f1642016-08-16 18:33:43 +020010122 callback when its time expires. Unpausing a timer may cause
10123 the callback to be invoked almost immediately if enough time
10124 has passed.
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010125
10126 Pausing a timer is useful to avoid the callback to be called
10127 for a short time.
10128
10129 If {paused} evaluates to a non-zero Number or a non-empty
10130 String, then the timer is paused, otherwise it is unpaused.
10131 See |non-zero-arg|.
10132
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010133 Can also be used as a |method|: >
10134 GetTimer()->timer_pause(1)
10135
10136< {only available when compiled with the |+timers| feature}
Bram Moolenaar8e97bd72016-08-06 22:05:07 +020010137
Bram Moolenaardc1f1642016-08-16 18:33:43 +020010138 *timer_start()* *timer* *timers*
Bram Moolenaar975b5272016-03-15 23:10:59 +010010139timer_start({time}, {callback} [, {options}])
10140 Create a timer and return the timer ID.
10141
10142 {time} is the waiting time in milliseconds. This is the
10143 minimum time before invoking the callback. When the system is
10144 busy or Vim is not waiting for input the time will be longer.
10145
10146 {callback} is the function to call. It can be the name of a
Bram Moolenaarf37506f2016-08-31 22:22:10 +020010147 function or a |Funcref|. It is called with one argument, which
Bram Moolenaar975b5272016-03-15 23:10:59 +010010148 is the timer ID. The callback is only invoked when Vim is
10149 waiting for input.
10150
10151 {options} is a dictionary. Supported entries:
10152 "repeat" Number of times to repeat calling the
Bram Moolenaarabd468e2016-09-08 22:22:43 +020010153 callback. -1 means forever. When not present
10154 the callback will be called once.
Bram Moolenaarc577d812017-07-08 22:37:34 +020010155 If the timer causes an error three times in a
10156 row the repeat is cancelled. This avoids that
10157 Vim becomes unusable because of all the error
10158 messages.
Bram Moolenaar975b5272016-03-15 23:10:59 +010010159
10160 Example: >
10161 func MyHandler(timer)
10162 echo 'Handler called'
10163 endfunc
10164 let timer = timer_start(500, 'MyHandler',
10165 \ {'repeat': 3})
10166< This will invoke MyHandler() three times at 500 msec
10167 intervals.
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010168
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010169 Can also be used as a |method|: >
10170 GetMsec()->timer_start(callback)
10171
10172< Not available in the |sandbox|.
Bram Moolenaar975b5272016-03-15 23:10:59 +010010173 {only available when compiled with the |+timers| feature}
10174
Bram Moolenaar03602ec2016-03-20 20:57:45 +010010175timer_stop({timer}) *timer_stop()*
Bram Moolenaar06d2d382016-05-20 17:24:11 +020010176 Stop a timer. The timer callback will no longer be invoked.
10177 {timer} is an ID returned by timer_start(), thus it must be a
Bram Moolenaar8e97bd72016-08-06 22:05:07 +020010178 Number. If {timer} does not exist there is no error.
Bram Moolenaar03602ec2016-03-20 20:57:45 +010010179
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010180 Can also be used as a |method|: >
10181 GetTimer()->timer_stop()
10182
10183< {only available when compiled with the |+timers| feature}
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010184
10185timer_stopall() *timer_stopall()*
10186 Stop all timers. The timer callbacks will no longer be
Bram Moolenaar809ce4d2019-07-13 21:21:40 +020010187 invoked. Useful if a timer is misbehaving. If there are no
10188 timers there is no error.
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010189
10190 {only available when compiled with the |+timers| feature}
10191
Bram Moolenaar071d4272004-06-13 20:20:40 +000010192tolower({expr}) *tolower()*
10193 The result is a copy of the String given, with all uppercase
10194 characters turned into lowercase (just like applying |gu| to
10195 the string).
10196
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010197 Can also be used as a |method|: >
10198 GetText()->tolower()
10199
Bram Moolenaar071d4272004-06-13 20:20:40 +000010200toupper({expr}) *toupper()*
10201 The result is a copy of the String given, with all lowercase
10202 characters turned into uppercase (just like applying |gU| to
10203 the string).
10204
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010205 Can also be used as a |method|: >
10206 GetText()->toupper()
10207
Bram Moolenaar8299df92004-07-10 09:47:34 +000010208tr({src}, {fromstr}, {tostr}) *tr()*
10209 The result is a copy of the {src} string with all characters
10210 which appear in {fromstr} replaced by the character in that
10211 position in the {tostr} string. Thus the first character in
10212 {fromstr} is translated into the first character in {tostr}
10213 and so on. Exactly like the unix "tr" command.
10214 This code also deals with multibyte characters properly.
10215
10216 Examples: >
10217 echo tr("hello there", "ht", "HT")
10218< returns "Hello THere" >
10219 echo tr("<blob>", "<>", "{}")
10220< returns "{blob}"
10221
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010222 Can also be used as a |method|: >
10223 GetText()->tr(from, to)
10224
Bram Moolenaard473c8c2018-08-11 18:00:22 +020010225trim({text} [, {mask}]) *trim()*
Bram Moolenaar295ac5a2018-03-22 23:04:02 +010010226 Return {text} as a String where any character in {mask} is
Bram Moolenaar388a5d42020-05-26 21:20:45 +020010227 removed from the beginning and end of {text}.
Bram Moolenaar295ac5a2018-03-22 23:04:02 +010010228 If {mask} is not given, {mask} is all characters up to 0x20,
10229 which includes Tab, space, NL and CR, plus the non-breaking
10230 space character 0xa0.
10231 This code deals with multibyte characters properly.
10232
10233 Examples: >
Bram Moolenaarab943432018-03-29 18:27:07 +020010234 echo trim(" some text ")
10235< returns "some text" >
10236 echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL"
Bram Moolenaar295ac5a2018-03-22 23:04:02 +010010237< returns "RESERVE_TAIL" >
Bram Moolenaarab943432018-03-29 18:27:07 +020010238 echo trim("rm<Xrm<>X>rrm", "rm<>")
10239< returns "Xrm<>X" (characters in the middle are not removed)
Bram Moolenaar295ac5a2018-03-22 23:04:02 +010010240
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010241 Can also be used as a |method|: >
10242 GetText()->trim()
10243
Bram Moolenaar446cb832008-06-24 21:56:24 +000010244trunc({expr}) *trunc()*
Bram Moolenaarc236c162008-07-13 17:41:49 +000010245 Return the largest integral value with magnitude less than or
Bram Moolenaar446cb832008-06-24 21:56:24 +000010246 equal to {expr} as a |Float| (truncate towards zero).
10247 {expr} must evaluate to a |Float| or a |Number|.
10248 Examples: >
10249 echo trunc(1.456)
10250< 1.0 >
10251 echo trunc(-5.456)
10252< -5.0 >
10253 echo trunc(4.0)
10254< 4.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +020010255
10256 Can also be used as a |method|: >
10257 Compute()->trunc()
10258<
Bram Moolenaar446cb832008-06-24 21:56:24 +000010259 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010260
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000010261 *type()*
Bram Moolenaardf48fb42016-07-22 21:50:18 +020010262type({expr}) The result is a Number representing the type of {expr}.
10263 Instead of using the number directly, it is better to use the
10264 v:t_ variable that has the value:
10265 Number: 0 |v:t_number|
10266 String: 1 |v:t_string|
10267 Funcref: 2 |v:t_func|
10268 List: 3 |v:t_list|
10269 Dictionary: 4 |v:t_dict|
10270 Float: 5 |v:t_float|
10271 Boolean: 6 |v:t_bool| (v:false and v:true)
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010272 None: 7 |v:t_none| (v:null and v:none)
10273 Job: 8 |v:t_job|
10274 Channel: 9 |v:t_channel|
10275 Blob: 10 |v:t_blob|
Bram Moolenaardf48fb42016-07-22 21:50:18 +020010276 For backward compatibility, this method can be used: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000010277 :if type(myvar) == type(0)
10278 :if type(myvar) == type("")
10279 :if type(myvar) == type(function("tr"))
10280 :if type(myvar) == type([])
Bram Moolenaar748bf032005-02-02 23:04:36 +000010281 :if type(myvar) == type({})
Bram Moolenaar446cb832008-06-24 21:56:24 +000010282 :if type(myvar) == type(0.0)
Bram Moolenaar705ada12016-01-24 17:56:50 +010010283 :if type(myvar) == type(v:false)
Bram Moolenaar6463ca22016-02-13 17:04:46 +010010284 :if type(myvar) == type(v:none)
Bram Moolenaardf48fb42016-07-22 21:50:18 +020010285< To check if the v:t_ variables exist use this: >
10286 :if exists('v:t_number')
Bram Moolenaar071d4272004-06-13 20:20:40 +000010287
Bram Moolenaarac92e252019-08-03 21:58:38 +020010288< Can also be used as a |method|: >
10289 mylist->type()
10290
Bram Moolenaara17d4c12010-05-30 18:30:36 +020010291undofile({name}) *undofile()*
10292 Return the name of the undo file that would be used for a file
10293 with name {name} when writing. This uses the 'undodir'
10294 option, finding directories that exist. It does not check if
Bram Moolenaar860cae12010-06-05 23:22:07 +020010295 the undo file exists.
Bram Moolenaar945e2db2010-06-05 17:43:32 +020010296 {name} is always expanded to the full path, since that is what
10297 is used internally.
Bram Moolenaar80716072012-05-01 21:14:34 +020010298 If {name} is empty undofile() returns an empty string, since a
10299 buffer without a file name will not write an undo file.
Bram Moolenaara17d4c12010-05-30 18:30:36 +020010300 Useful in combination with |:wundo| and |:rundo|.
Bram Moolenaarb328cca2019-01-06 16:24:01 +010010301 When compiled without the |+persistent_undo| option this always
Bram Moolenaara17d4c12010-05-30 18:30:36 +020010302 returns an empty string.
10303
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010304 Can also be used as a |method|: >
10305 GetFilename()->undofile()
10306
Bram Moolenaara800b422010-06-27 01:15:55 +020010307undotree() *undotree()*
10308 Return the current state of the undo tree in a dictionary with
10309 the following items:
10310 "seq_last" The highest undo sequence number used.
10311 "seq_cur" The sequence number of the current position in
10312 the undo tree. This differs from "seq_last"
10313 when some changes were undone.
10314 "time_cur" Time last used for |:earlier| and related
10315 commands. Use |strftime()| to convert to
10316 something readable.
10317 "save_last" Number of the last file write. Zero when no
10318 write yet.
Bram Moolenaar730cde92010-06-27 05:18:54 +020010319 "save_cur" Number of the current position in the undo
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010320 tree.
Bram Moolenaara800b422010-06-27 01:15:55 +020010321 "synced" Non-zero when the last undo block was synced.
10322 This happens when waiting from input from the
10323 user. See |undo-blocks|.
10324 "entries" A list of dictionaries with information about
10325 undo blocks.
10326
10327 The first item in the "entries" list is the oldest undo item.
10328 Each List item is a Dictionary with these items:
10329 "seq" Undo sequence number. Same as what appears in
10330 |:undolist|.
10331 "time" Timestamp when the change happened. Use
10332 |strftime()| to convert to something readable.
10333 "newhead" Only appears in the item that is the last one
10334 that was added. This marks the last change
10335 and where further changes will be added.
10336 "curhead" Only appears in the item that is the last one
10337 that was undone. This marks the current
10338 position in the undo tree, the block that will
10339 be used by a redo command. When nothing was
10340 undone after the last change this item will
10341 not appear anywhere.
10342 "save" Only appears on the last block before a file
10343 write. The number is the write count. The
10344 first write has number 1, the last one the
10345 "save_last" mentioned above.
10346 "alt" Alternate entry. This is again a List of undo
10347 blocks. Each item may again have an "alt"
10348 item.
10349
Bram Moolenaar327aa022014-03-25 18:24:23 +010010350uniq({list} [, {func} [, {dict}]]) *uniq()* *E882*
10351 Remove second and succeeding copies of repeated adjacent
10352 {list} items in-place. Returns {list}. If you want a list
10353 to remain unmodified make a copy first: >
10354 :let newlist = uniq(copy(mylist))
10355< The default compare function uses the string representation of
10356 each item. For the use of {func} and {dict} see |sort()|.
10357
Bram Moolenaarac92e252019-08-03 21:58:38 +020010358 Can also be used as a |method|: >
10359 mylist->uniq()
10360
Bram Moolenaar677ee682005-01-27 14:41:15 +000010361values({dict}) *values()*
Bram Moolenaar58b85342016-08-14 19:54:54 +020010362 Return a |List| with all the values of {dict}. The |List| is
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +010010363 in arbitrary order. Also see |items()| and |keys()|.
Bram Moolenaar677ee682005-01-27 14:41:15 +000010364
Bram Moolenaarac92e252019-08-03 21:58:38 +020010365 Can also be used as a |method|: >
10366 mydict->values()
Bram Moolenaar677ee682005-01-27 14:41:15 +000010367
Bram Moolenaar071d4272004-06-13 20:20:40 +000010368virtcol({expr}) *virtcol()*
10369 The result is a Number, which is the screen column of the file
10370 position given with {expr}. That is, the last screen position
10371 occupied by the character at that position, when the screen
10372 would be of unlimited width. When there is a <Tab> at the
10373 position, the returned Number will be the column at the end of
10374 the <Tab>. For example, for a <Tab> in column 1, with 'ts'
Bram Moolenaar61d35bd2012-03-28 20:51:51 +020010375 set to 8, it returns 8. |conceal| is ignored.
Bram Moolenaar477933c2007-07-17 14:32:23 +000010376 For the byte position use |col()|.
10377 For the use of {expr} see |col()|.
10378 When 'virtualedit' is used {expr} can be [lnum, col, off], where
Bram Moolenaar0b238792006-03-02 22:49:12 +000010379 "off" is the offset in screen columns from the start of the
Bram Moolenaard46bbc72007-05-12 14:38:41 +000010380 character. E.g., a position within a <Tab> or after the last
Bram Moolenaar97293012011-07-18 19:40:27 +020010381 character. When "off" is omitted zero is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010382 When Virtual editing is active in the current mode, a position
10383 beyond the end of the line can be returned. |'virtualedit'|
10384 The accepted positions are:
10385 . the cursor position
10386 $ the end of the cursor line (the result is the
10387 number of displayed characters in the cursor line
10388 plus one)
10389 'x position of mark x (if the mark is not set, 0 is
10390 returned)
Bram Moolenaare3faf442014-12-14 01:27:49 +010010391 v In Visual mode: the start of the Visual area (the
10392 cursor is the end). When not in Visual mode
10393 returns the cursor position. Differs from |'<| in
10394 that it's updated right away.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010395 Note that only marks in the current file can be used.
10396 Examples: >
10397 virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5
10398 virtcol("$") with text "foo^Lbar", returns 9
Bram Moolenaar446cb832008-06-24 21:56:24 +000010399 virtcol("'t") with text " there", with 't at 'h', returns 6
Bram Moolenaar58b85342016-08-14 19:54:54 +020010400< The first column is 1. 0 is returned for an error.
Bram Moolenaaref2f6562007-05-06 13:32:59 +000010401 A more advanced example that echoes the maximum length of
10402 all lines: >
10403 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
10404
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010405< Can also be used as a |method|: >
10406 GetPos()->virtcol()
Bram Moolenaar071d4272004-06-13 20:20:40 +000010407
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010408
10409visualmode([{expr}]) *visualmode()*
Bram Moolenaar071d4272004-06-13 20:20:40 +000010410 The result is a String, which describes the last Visual mode
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000010411 used in the current buffer. Initially it returns an empty
10412 string, but once Visual mode has been used, it returns "v",
10413 "V", or "<CTRL-V>" (a single CTRL-V character) for
10414 character-wise, line-wise, or block-wise Visual mode
10415 respectively.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010416 Example: >
10417 :exe "normal " . visualmode()
10418< This enters the same Visual mode as before. It is also useful
10419 in scripts if you wish to act differently depending on the
10420 Visual mode that was used.
Bram Moolenaar446cb832008-06-24 21:56:24 +000010421 If Visual mode is active, use |mode()| to get the Visual mode
10422 (e.g., in a |:vmap|).
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010423 If {expr} is supplied and it evaluates to a non-zero Number or
Bram Moolenaar05bb9532008-07-04 09:44:11 +000010424 a non-empty String, then the Visual mode will be cleared and
Bram Moolenaare381d3d2016-07-07 14:50:41 +020010425 the old value is returned. See |non-zero-arg|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010426
Bram Moolenaar8738fc12013-02-20 17:59:11 +010010427wildmenumode() *wildmenumode()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +020010428 Returns |TRUE| when the wildmenu is active and |FALSE|
Bram Moolenaar8738fc12013-02-20 17:59:11 +010010429 otherwise. See 'wildmenu' and 'wildmode'.
10430 This can be used in mappings to handle the 'wildcharm' option
10431 gracefully. (Makes only sense with |mapmode-c| mappings).
10432
10433 For example to make <c-j> work like <down> in wildmode, use: >
10434 :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
10435<
10436 (Note, this needs the 'wildcharm' option set appropriately).
10437
Bram Moolenaar868b7b62019-05-29 21:44:40 +020010438win_execute({id}, {command} [, {silent}]) *win_execute()*
10439 Like `execute()` but in the context of window {id}.
10440 The window will temporarily be made the current window,
Bram Moolenaarb4230122019-05-30 18:40:53 +020010441 without triggering autocommands. When executing {command}
10442 autocommands will be triggered, this may have unexpected side
10443 effects. Use |:noautocmd| if needed.
Bram Moolenaar868b7b62019-05-29 21:44:40 +020010444 Example: >
Bram Moolenaarb4230122019-05-30 18:40:53 +020010445 call win_execute(winid, 'set syntax=python')
10446< Doing the same with `setwinvar()` would not trigger
10447 autocommands and not actually show syntax highlighting.
Bram Moolenaar61da1bf2019-06-06 12:14:49 +020010448 *E994*
10449 Not all commands are allowed in popup windows.
Bram Moolenaar56c860c2019-08-17 20:09:31 +020010450 When window {id} does not exist then no error is given.
Bram Moolenaar8738fc12013-02-20 17:59:11 +010010451
Bram Moolenaar2e693a82019-10-16 22:35:02 +020010452 Can also be used as a |method|, the base is passed as the
10453 second argument: >
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010454 GetCommand()->win_execute(winid)
10455
Bram Moolenaar9cdf86b2016-03-13 19:04:51 +010010456win_findbuf({bufnr}) *win_findbuf()*
Bram Moolenaar7571d552016-08-18 22:54:46 +020010457 Returns a list with |window-ID|s for windows that contain
10458 buffer {bufnr}. When there is none the list is empty.
Bram Moolenaar9cdf86b2016-03-13 19:04:51 +010010459
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010460 Can also be used as a |method|: >
10461 GetBufnr()->win_findbuf()
10462
Bram Moolenaar86edef62016-03-13 18:07:30 +010010463win_getid([{win} [, {tab}]]) *win_getid()*
Bram Moolenaar7571d552016-08-18 22:54:46 +020010464 Get the |window-ID| for the specified window.
Bram Moolenaar86edef62016-03-13 18:07:30 +010010465 When {win} is missing use the current window.
10466 With {win} this is the window number. The top window has
Bram Moolenaarba3ff532018-11-04 14:45:49 +010010467 number 1.
Bram Moolenaar86edef62016-03-13 18:07:30 +010010468 Without {tab} use the current tab, otherwise the tab with
10469 number {tab}. The first tab has number one.
10470 Return zero if the window cannot be found.
10471
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010472 Can also be used as a |method|: >
10473 GetWinnr()->win_getid()
10474
Bram Moolenaar00f3b4e2020-02-14 14:32:22 +010010475
10476win_gettype([{nr}]) *win_gettype()*
10477 Return the type of the window:
10478 "popup" popup window |popup|
10479 "command" command-line window |cmdwin|
10480 (empty) normal window
10481 "unknown" window {nr} not found
10482
10483 When {nr} is omitted return the type of the current window.
10484 When {nr} is given return the type of this window by number or
10485 |window-ID|.
10486
10487 Also see the 'buftype' option. When running a terminal in a
10488 popup window then 'buftype' is "terminal" and win_gettype()
10489 returns "popup".
10490
10491
Bram Moolenaar86edef62016-03-13 18:07:30 +010010492win_gotoid({expr}) *win_gotoid()*
10493 Go to window with ID {expr}. This may also change the current
10494 tabpage.
10495 Return 1 if successful, 0 if the window cannot be found.
10496
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010497 Can also be used as a |method|: >
10498 GetWinid()->win_gotoid()
10499
Bram Moolenaar03413f42016-04-12 21:07:15 +020010500win_id2tabwin({expr}) *win_id2tabwin()*
Bram Moolenaar86edef62016-03-13 18:07:30 +010010501 Return a list with the tab number and window number of window
10502 with ID {expr}: [tabnr, winnr].
10503 Return [0, 0] if the window cannot be found.
10504
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010505 Can also be used as a |method|: >
10506 GetWinid()->win_id2tabwin()
10507
Bram Moolenaar86edef62016-03-13 18:07:30 +010010508win_id2win({expr}) *win_id2win()*
10509 Return the window number of window with ID {expr}.
10510 Return 0 if the window cannot be found in the current tabpage.
10511
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010512 Can also be used as a |method|: >
10513 GetWinid()->win_id2win()
10514
Bram Moolenaar22044dc2017-12-02 15:43:37 +010010515win_screenpos({nr}) *win_screenpos()*
10516 Return the screen position of window {nr} as a list with two
10517 numbers: [row, col]. The first window always has position
Bram Moolenaar7132ddc2018-07-15 17:01:11 +020010518 [1, 1], unless there is a tabline, then it is [2, 1].
Bram Moolenaar22044dc2017-12-02 15:43:37 +010010519 {nr} can be the window number or the |window-ID|.
10520 Return [0, 0] if the window cannot be found in the current
10521 tabpage.
10522
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010523 Can also be used as a |method|: >
10524 GetWinid()->win_screenpos()
10525<
Bram Moolenaard20dcb32019-09-10 21:22:58 +020010526win_splitmove({nr}, {target} [, {options}]) *win_splitmove()*
10527 Move the window {nr} to a new split of the window {target}.
10528 This is similar to moving to {target}, creating a new window
10529 using |:split| but having the same contents as window {nr}, and
10530 then closing {nr}.
10531
10532 Both {nr} and {target} can be window numbers or |window-ID|s.
Bram Moolenaar29634562020-01-09 21:46:04 +010010533 Both must be in the current tab page.
Bram Moolenaard20dcb32019-09-10 21:22:58 +020010534
10535 Returns zero for success, non-zero for failure.
10536
10537 {options} is a Dictionary with the following optional entries:
10538 "vertical" When TRUE, the split is created vertically,
10539 like with |:vsplit|.
10540 "rightbelow" When TRUE, the split is made below or to the
10541 right (if vertical). When FALSE, it is done
10542 above or to the left (if vertical). When not
10543 present, the values of 'splitbelow' and
10544 'splitright' are used.
10545
10546 Can also be used as a |method|: >
10547 GetWinid()->win_splitmove(target)
10548<
Bram Moolenaar4132eb52020-02-14 16:53:00 +010010549
Bram Moolenaar071d4272004-06-13 20:20:40 +000010550 *winbufnr()*
10551winbufnr({nr}) The result is a Number, which is the number of the buffer
Bram Moolenaar888ccac2016-06-04 18:49:36 +020010552 associated with window {nr}. {nr} can be the window number or
Bram Moolenaar7571d552016-08-18 22:54:46 +020010553 the |window-ID|.
Bram Moolenaar888ccac2016-06-04 18:49:36 +020010554 When {nr} is zero, the number of the buffer in the current
10555 window is returned.
10556 When window {nr} doesn't exist, -1 is returned.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010557 Example: >
10558 :echo "The file in the current window is " . bufname(winbufnr(0))
10559<
Bram Moolenaare49fbff2019-08-21 22:50:07 +020010560 Can also be used as a |method|: >
10561 FindWindow()->winbufnr()->bufname()
10562<
Bram Moolenaar071d4272004-06-13 20:20:40 +000010563 *wincol()*
10564wincol() The result is a Number, which is the virtual column of the
10565 cursor in the window. This is counting screen cells from the
10566 left side of the window. The leftmost column is one.
10567
Bram Moolenaar0c1e3742019-12-27 13:49:24 +010010568 *windowsversion()*
10569windowsversion()
10570 The result is a String. For MS-Windows it indicates the OS
10571 version. E.g, Windows 10 is "10.0", Windows 8 is "6.2",
10572 Windows XP is "5.1". For non-MS-Windows systems the result is
10573 an empty string.
10574
Bram Moolenaar071d4272004-06-13 20:20:40 +000010575winheight({nr}) *winheight()*
10576 The result is a Number, which is the height of window {nr}.
Bram Moolenaar7571d552016-08-18 22:54:46 +020010577 {nr} can be the window number or the |window-ID|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010578 When {nr} is zero, the height of the current window is
10579 returned. When window {nr} doesn't exist, -1 is returned.
10580 An existing window always has a height of zero or more.
Bram Moolenaar37c64c72017-09-19 22:06:03 +020010581 This excludes any window toolbar line.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010582 Examples: >
10583 :echo "The current window has " . winheight(0) . " lines."
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010584
10585< Can also be used as a |method|: >
10586 GetWinid()->winheight()
Bram Moolenaar071d4272004-06-13 20:20:40 +000010587<
Bram Moolenaar0f6b4f02018-08-21 16:56:34 +020010588winlayout([{tabnr}]) *winlayout()*
10589 The result is a nested List containing the layout of windows
10590 in a tabpage.
10591
10592 Without {tabnr} use the current tabpage, otherwise the tabpage
10593 with number {tabnr}. If the tabpage {tabnr} is not found,
10594 returns an empty list.
10595
10596 For a leaf window, it returns:
10597 ['leaf', {winid}]
10598 For horizontally split windows, which form a column, it
10599 returns:
10600 ['col', [{nested list of windows}]]
10601 For vertically split windows, which form a row, it returns:
10602 ['row', [{nested list of windows}]]
10603
10604 Example: >
10605 " Only one window in the tab page
10606 :echo winlayout()
10607 ['leaf', 1000]
10608 " Two horizontally split windows
10609 :echo winlayout()
10610 ['col', [['leaf', 1000], ['leaf', 1001]]]
Bram Moolenaarb17893a2020-03-14 08:19:51 +010010611 " The second tab page, with three horizontally split
10612 " windows, with two vertically split windows in the
10613 " middle window
Bram Moolenaar0f6b4f02018-08-21 16:56:34 +020010614 :echo winlayout(2)
Bram Moolenaarb17893a2020-03-14 08:19:51 +010010615 ['col', [['leaf', 1002], ['row', [['leaf', 1003],
10616 ['leaf', 1001]]], ['leaf', 1000]]]
Bram Moolenaar0f6b4f02018-08-21 16:56:34 +020010617<
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010618 Can also be used as a |method|: >
10619 GetTabnr()->winlayout()
10620<
Bram Moolenaar071d4272004-06-13 20:20:40 +000010621 *winline()*
10622winline() The result is a Number, which is the screen line of the cursor
Bram Moolenaar58b85342016-08-14 19:54:54 +020010623 in the window. This is counting screen lines from the top of
Bram Moolenaar071d4272004-06-13 20:20:40 +000010624 the window. The first line is one.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +000010625 If the cursor was moved the view on the file will be updated
10626 first, this may cause a scroll.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010627
10628 *winnr()*
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000010629winnr([{arg}]) The result is a Number, which is the number of the current
10630 window. The top window has number 1.
Bram Moolenaar560979e2020-02-04 22:53:05 +010010631 Returns zero for a popup window.
Bram Moolenaar46ad2882019-04-08 20:01:47 +020010632
10633 The optional argument {arg} supports the following values:
10634 $ the number of the last window (the window
10635 count).
10636 # the number of the last accessed window (where
10637 |CTRL-W_p| goes to). If there is no previous
10638 window or it is in another tab page 0 is
10639 returned.
10640 {N}j the number of the Nth window below the
10641 current window (where |CTRL-W_j| goes to).
10642 {N}k the number of the Nth window above the current
10643 window (where |CTRL-W_k| goes to).
10644 {N}h the number of the Nth window left of the
10645 current window (where |CTRL-W_h| goes to).
10646 {N}l the number of the Nth window right of the
10647 current window (where |CTRL-W_l| goes to).
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000010648 The number can be used with |CTRL-W_w| and ":wincmd w"
10649 |:wincmd|.
Bram Moolenaar690afe12017-01-28 18:34:47 +010010650 Also see |tabpagewinnr()| and |win_getid()|.
Bram Moolenaar46ad2882019-04-08 20:01:47 +020010651 Examples: >
10652 let window_count = winnr('$')
10653 let prev_window = winnr('#')
10654 let wnum = winnr('3k')
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010655
10656< Can also be used as a |method|: >
10657 GetWinval()->winnr()
Bram Moolenaar46ad2882019-04-08 20:01:47 +020010658<
Bram Moolenaar071d4272004-06-13 20:20:40 +000010659 *winrestcmd()*
10660winrestcmd() Returns a sequence of |:resize| commands that should restore
10661 the current window sizes. Only works properly when no windows
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010662 are opened or closed and the current window and tab page is
10663 unchanged.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010664 Example: >
10665 :let cmd = winrestcmd()
10666 :call MessWithWindowSizes()
10667 :exe cmd
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010668<
10669 *winrestview()*
10670winrestview({dict})
10671 Uses the |Dictionary| returned by |winsaveview()| to restore
10672 the view of the current window.
Bram Moolenaar82c25852014-05-28 16:47:16 +020010673 Note: The {dict} does not have to contain all values, that are
10674 returned by |winsaveview()|. If values are missing, those
10675 settings won't be restored. So you can use: >
10676 :call winrestview({'curswant': 4})
10677<
10678 This will only set the curswant value (the column the cursor
10679 wants to move on vertical movements) of the cursor to column 5
10680 (yes, that is 5), while all other settings will remain the
10681 same. This is useful, if you set the cursor position manually.
10682
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010683 If you have changed the values the result is unpredictable.
10684 If the window size changed the result won't be the same.
10685
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010686 Can also be used as a |method|: >
10687 GetView()->winrestview()
10688<
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010689 *winsaveview()*
10690winsaveview() Returns a |Dictionary| that contains information to restore
10691 the view of the current window. Use |winrestview()| to
10692 restore the view.
10693 This is useful if you have a mapping that jumps around in the
10694 buffer and you want to go back to the original view.
10695 This does not save fold information. Use the 'foldenable'
Bram Moolenaardb552d602006-03-23 22:59:57 +000010696 option to temporarily switch off folding, so that folds are
Bram Moolenaar07d87792014-07-19 14:04:47 +020010697 not opened when moving around. This may have side effects.
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010698 The return value includes:
10699 lnum cursor line number
Bram Moolenaar82c25852014-05-28 16:47:16 +020010700 col cursor column (Note: the first column
10701 zero, as opposed to what getpos()
10702 returns)
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010703 coladd cursor column offset for 'virtualedit'
10704 curswant column for vertical movement
10705 topline first line in the window
10706 topfill filler lines, only in diff mode
10707 leftcol first column displayed
10708 skipcol columns skipped
10709 Note that no option values are saved.
10710
Bram Moolenaar071d4272004-06-13 20:20:40 +000010711
10712winwidth({nr}) *winwidth()*
10713 The result is a Number, which is the width of window {nr}.
Bram Moolenaar7571d552016-08-18 22:54:46 +020010714 {nr} can be the window number or the |window-ID|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010715 When {nr} is zero, the width of the current window is
10716 returned. When window {nr} doesn't exist, -1 is returned.
10717 An existing window always has a width of zero or more.
10718 Examples: >
10719 :echo "The current window has " . winwidth(0) . " columns."
10720 :if winwidth(0) <= 50
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010721 : 50 wincmd |
Bram Moolenaar071d4272004-06-13 20:20:40 +000010722 :endif
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010723< For getting the terminal or screen size, see the 'columns'
10724 option.
Bram Moolenaar22fcfad2016-07-01 18:17:26 +020010725
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010726 Can also be used as a |method|: >
10727 GetWinid()->winwidth()
10728
Bram Moolenaar22fcfad2016-07-01 18:17:26 +020010729
Bram Moolenaared767a22016-01-03 22:49:16 +010010730wordcount() *wordcount()*
10731 The result is a dictionary of byte/chars/word statistics for
10732 the current buffer. This is the same info as provided by
10733 |g_CTRL-G|
10734 The return value includes:
10735 bytes Number of bytes in the buffer
10736 chars Number of chars in the buffer
10737 words Number of words in the buffer
10738 cursor_bytes Number of bytes before cursor position
10739 (not in Visual mode)
10740 cursor_chars Number of chars before cursor position
10741 (not in Visual mode)
10742 cursor_words Number of words before cursor position
10743 (not in Visual mode)
10744 visual_bytes Number of bytes visually selected
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010745 (only in Visual mode)
Bram Moolenaared767a22016-01-03 22:49:16 +010010746 visual_chars Number of chars visually selected
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010747 (only in Visual mode)
Bram Moolenaarc572da52017-08-27 16:52:01 +020010748 visual_words Number of words visually selected
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010749 (only in Visual mode)
Bram Moolenaared767a22016-01-03 22:49:16 +010010750
10751
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +000010752 *writefile()*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010010753writefile({object}, {fname} [, {flags}])
10754 When {object} is a |List| write it to file {fname}. Each list
10755 item is separated with a NL. Each list item must be a String
10756 or Number.
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010757 When {flags} contains "b" then binary mode is used: There will
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +000010758 not be a NL after the last list item. An empty item at the
10759 end does cause the last line in the file to end in a NL.
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010760
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010010761 When {object} is a |Blob| write the bytes to file {fname}
10762 unmodified.
10763
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010764 When {flags} contains "a" then append mode is used, lines are
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020010765 appended to the file: >
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010766 :call writefile(["foo"], "event.log", "a")
10767 :call writefile(["bar"], "event.log", "a")
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010768<
10769 When {flags} contains "s" then fsync() is called after writing
10770 the file. This flushes the file to disk, if possible. This
10771 takes more time but avoids losing the file if the system
10772 crashes.
Bram Moolenaar74240d32017-12-10 15:26:15 +010010773 When {flags} does not contain "S" or "s" then fsync() is
10774 called if the 'fsync' option is set.
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010775 When {flags} contains "S" then fsync() is not called, even
10776 when 'fsync' is set.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010777
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010778 All NL characters are replaced with a NUL character.
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +000010779 Inserting CR characters needs to be done before passing {list}
10780 to writefile().
10781 An existing file is overwritten, if possible.
10782 When the write fails -1 is returned, otherwise 0. There is an
10783 error message if the file can't be created or when writing
10784 fails.
10785 Also see |readfile()|.
10786 To copy a file byte for byte: >
10787 :let fl = readfile("foo", "b")
10788 :call writefile(fl, "foocopy", "b")
Bram Moolenaard6e256c2011-12-14 15:32:50 +010010789
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010790< Can also be used as a |method|: >
10791 GetText()->writefile("thefile")
10792
Bram Moolenaard6e256c2011-12-14 15:32:50 +010010793
10794xor({expr}, {expr}) *xor()*
10795 Bitwise XOR on the two arguments. The arguments are converted
10796 to a number. A List, Dict or Float argument causes an error.
10797 Example: >
10798 :let bits = xor(bits, 0x80)
Bram Moolenaar2e693a82019-10-16 22:35:02 +020010799<
10800 Can also be used as a |method|: >
Bram Moolenaar073e4b92019-08-18 23:01:56 +020010801 :let bits = bits->xor(0x80)
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010010802<
Bram Moolenaard6e256c2011-12-14 15:32:50 +010010803
Bram Moolenaar071d4272004-06-13 20:20:40 +000010804 *feature-list*
Bram Moolenaarade0d392020-01-21 22:33:58 +010010805There are three types of features:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000108061. Features that are only supported when they have been enabled when Vim
10807 was compiled |+feature-list|. Example: >
10808 :if has("cindent")
108092. Features that are only supported when certain conditions have been met.
10810 Example: >
10811 :if has("gui_running")
10812< *has-patch*
Bram Moolenaar2f018892018-05-18 18:12:06 +0200108133. Beyond a certain version or at a certain version and including a specific
10814 patch. The "patch-7.4.248" feature means that the Vim version is 7.5 or
10815 later, or it is version 7.4 and patch 248 was included. Example: >
Bram Moolenaarbcb98982014-05-01 14:08:19 +020010816 :if has("patch-7.4.248")
Bram Moolenaar2f018892018-05-18 18:12:06 +020010817< Note that it's possible for patch 248 to be omitted even though 249 is
10818 included. Only happens when cherry-picking patches.
10819 Note that this form only works for patch 7.4.237 and later, before that
10820 you need to check for the patch and the v:version. Example (checking
10821 version 6.2.148 or later): >
10822 :if v:version > 602 || (v:version == 602 && has("patch148"))
Bram Moolenaar071d4272004-06-13 20:20:40 +000010823
Bram Moolenaard823fa92016-08-12 16:29:27 +020010824Hint: To find out if Vim supports backslashes in a file name (MS-Windows),
10825use: `if exists('+shellslash')`
10826
10827
Bram Moolenaar7cba6c02013-09-05 22:13:31 +020010828acl Compiled with |ACL| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010829all_builtin_terms Compiled with all builtin terminals enabled.
10830amiga Amiga version of Vim.
10831arabic Compiled with Arabic support |Arabic|.
10832arp Compiled with ARP support (Amiga).
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010833autocmd Compiled with autocommand support. (always true)
Bram Moolenaar91f84f62018-07-29 15:07:52 +020010834autochdir Compiled with support for 'autochdir'
Bram Moolenaare42a6d22017-11-12 19:21:51 +010010835autoservername Automatically enable |clientserver|
Bram Moolenaar071d4272004-06-13 20:20:40 +000010836balloon_eval Compiled with |balloon-eval| support.
Bram Moolenaar45360022005-07-21 21:08:21 +000010837balloon_multiline GUI supports multiline balloons.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010838beos BeOS version of Vim.
10839browse Compiled with |:browse| support, and browse() will
10840 work.
Bram Moolenaar30b65812012-07-12 22:01:11 +020010841browsefilter Compiled with support for |browsefilter|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010842bsd Compiled on an OS in the BSD family (excluding macOS).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010843builtin_terms Compiled with some builtin terminals.
10844byte_offset Compiled with support for 'o' in 'statusline'
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +010010845channel Compiled with support for |channel| and |job|
Bram Moolenaar071d4272004-06-13 20:20:40 +000010846cindent Compiled with 'cindent' support.
10847clientserver Compiled with remote invocation support |clientserver|.
10848clipboard Compiled with 'clipboard' support.
Bram Moolenaar4999a7f2019-08-10 22:21:48 +020010849clipboard_working Compiled with 'clipboard' support and it can be used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010850cmdline_compl Compiled with |cmdline-completion| support.
10851cmdline_hist Compiled with |cmdline-history| support.
10852cmdline_info Compiled with 'showcmd' and 'ruler' support.
10853comments Compiled with |'comments'| support.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010854compatible Compiled to be very Vi compatible.
Bram Moolenaaraa5df7e2019-02-03 14:53:10 +010010855conpty Platform where |ConPTY| can be used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010856cryptv Compiled with encryption support |encryption|.
10857cscope Compiled with |cscope| support.
Bram Moolenaar314dd792019-02-03 15:27:20 +010010858cursorbind Compiled with |'cursorbind'| (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010859debug Compiled with "DEBUG" defined.
10860dialog_con Compiled with console dialog support.
10861dialog_gui Compiled with GUI dialog support.
10862diff Compiled with |vimdiff| and 'diff' support.
10863digraphs Compiled with support for digraphs.
Bram Moolenaar58b85342016-08-14 19:54:54 +020010864directx Compiled with support for DirectX and 'renderoptions'.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010865dnd Compiled with support for the "~ register |quote_~|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010866ebcdic Compiled on a machine with ebcdic character set.
10867emacs_tags Compiled with support for Emacs tags.
10868eval Compiled with expression evaluation support. Always
10869 true, of course!
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010870ex_extra |+ex_extra| (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010871extra_search Compiled with support for |'incsearch'| and
10872 |'hlsearch'|
Bram Moolenaar4ceaa3a2019-12-03 22:49:09 +010010873farsi Support for Farsi was removed |farsi|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010874file_in_path Compiled with support for |gf| and |<cfile>|
Bram Moolenaar26a60b42005-02-22 08:49:11 +000010875filterpipe When 'shelltemp' is off pipes are used for shell
10876 read/write/filter commands
Bram Moolenaar071d4272004-06-13 20:20:40 +000010877find_in_path Compiled with support for include file searches
10878 |+find_in_path|.
Bram Moolenaar446cb832008-06-24 21:56:24 +000010879float Compiled with support for |Float|.
Bram Moolenaar5666fcd2019-12-26 14:35:26 +010010880fname_case Case in file names matters (for Amiga and MS-Windows
10881 this is not present).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010882folding Compiled with |folding| support.
10883footer Compiled with GUI footer support. |gui-footer|
10884fork Compiled to use fork()/exec() instead of system().
10885gettext Compiled with message translation |multi-lang|
10886gui Compiled with GUI enabled.
10887gui_athena Compiled with Athena GUI.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010888gui_gnome Compiled with Gnome support (gui_gtk is also defined).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010889gui_gtk Compiled with GTK+ GUI (any version).
10890gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined).
Bram Moolenaar98921892016-02-23 17:14:37 +010010891gui_gtk3 Compiled with GTK+ 3 GUI (gui_gtk is also defined).
Bram Moolenaarb3f74062020-02-26 16:16:53 +010010892gui_haiku Compiled with Haiku GUI.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010893gui_mac Compiled with Macintosh GUI.
10894gui_motif Compiled with Motif GUI.
10895gui_photon Compiled with Photon GUI.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010896gui_running Vim is running in the GUI, or it will start soon.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010897gui_win32 Compiled with MS Windows Win32 GUI.
10898gui_win32s idem, and Win32s system being used (Windows 3.1)
Bram Moolenaarb3f74062020-02-26 16:16:53 +010010899haiku Haiku version of Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010900hangul_input Compiled with Hangul input support. |hangul|
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010901hpux HP-UX version of Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010902iconv Can use iconv() for conversion.
10903insert_expand Compiled with support for CTRL-X expansion commands in
Bram Moolenaare49fbff2019-08-21 22:50:07 +020010904 Insert mode. (always true)
Bram Moolenaard1caa942020-04-10 22:10:56 +020010905job Compiled with support for |channel| and |job|
Bram Moolenaar352f5542020-04-13 19:04:21 +020010906ipv6 Compiled with support for IPv6 networking in |channel|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010907jumplist Compiled with |jumplist| support.
10908keymap Compiled with 'keymap' support.
Bram Moolenaar437bafe2016-08-01 15:40:54 +020010909lambda Compiled with |lambda| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010910langmap Compiled with 'langmap' support.
10911libcall Compiled with |libcall()| support.
Bram Moolenaar597a4222014-06-25 14:39:50 +020010912linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and
10913 'breakindent' support.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010914linux Linux version of Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010915lispindent Compiled with support for lisp indenting.
10916listcmds Compiled with commands for the buffer list |:files|
10917 and the argument list |arglist|.
10918localmap Compiled with local mappings and abbr. |:map-local|
Bram Moolenaar0ba04292010-07-14 23:23:17 +020010919lua Compiled with Lua interface |Lua|.
Bram Moolenaard0573012017-10-28 21:11:06 +020010920mac Any Macintosh version of Vim cf. osx
10921macunix Synonym for osxdarwin
Bram Moolenaar071d4272004-06-13 20:20:40 +000010922menu Compiled with support for |:menu|.
10923mksession Compiled with support for |:mksession|.
10924modify_fname Compiled with file name modifiers. |filename-modifiers|
Bram Moolenaara0d1fef2019-09-04 22:29:14 +020010925 (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010926mouse Compiled with support mouse.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010927mouse_dec Compiled with support for Dec terminal mouse.
10928mouse_gpm Compiled with support for gpm (Linux console mouse)
Bram Moolenaar4b8366b2019-05-04 17:34:34 +020010929mouse_gpm_enabled GPM mouse is working
Bram Moolenaar071d4272004-06-13 20:20:40 +000010930mouse_netterm Compiled with support for netterm mouse.
10931mouse_pterm Compiled with support for qnx pterm mouse.
Bram Moolenaar446cb832008-06-24 21:56:24 +000010932mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse)
Bram Moolenaar9b451252012-08-15 17:43:31 +020010933mouse_sgr Compiled with support for sgr mouse.
Bram Moolenaarf1568ec2011-12-14 21:17:39 +010010934mouse_urxvt Compiled with support for urxvt mouse.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010935mouse_xterm Compiled with support for xterm mouse.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010936mouseshape Compiled with support for 'mouseshape'.
Bram Moolenaar4c92e752019-02-17 21:18:32 +010010937multi_byte Compiled with support for 'encoding' (always true)
Bram Moolenaar42022d52008-12-09 09:57:49 +000010938multi_byte_encoding 'encoding' is set to a multi-byte encoding.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010939multi_byte_ime Compiled with support for IME input method.
10940multi_lang Compiled with support for multiple languages.
Bram Moolenaar325b7a22004-07-05 15:58:32 +000010941mzscheme Compiled with MzScheme interface |mzscheme|.
Bram Moolenaarb26e6322010-05-22 21:34:09 +020010942netbeans_enabled Compiled with support for |netbeans| and connected.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010943netbeans_intg Compiled with support for |netbeans|.
Bram Moolenaar22fcfad2016-07-01 18:17:26 +020010944num64 Compiled with 64-bit |Number| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010945ole Compiled with OLE automation support for Win32.
Bram Moolenaard0573012017-10-28 21:11:06 +020010946osx Compiled for macOS cf. mac
10947osxdarwin Compiled for macOS, with |mac-darwin-feature|
Bram Moolenaar91c49372016-05-08 09:50:29 +020010948packages Compiled with |packages| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010949path_extra Compiled with up/downwards search in 'path' and 'tags'
10950perl Compiled with Perl interface.
Bram Moolenaar55debbe2010-05-23 23:34:36 +020010951persistent_undo Compiled with support for persistent undo history.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010952postscript Compiled with PostScript file printing.
10953printer Compiled with |:hardcopy| support.
Bram Moolenaar05159a02005-02-26 23:04:13 +000010954profile Compiled with |:profile| support.
Bram Moolenaar84b242c2018-01-28 17:45:49 +010010955python Python 2.x interface available. |has-python|
10956python_compiled Compiled with Python 2.x interface. |has-python|
10957python_dynamic Python 2.x interface is dynamically loaded. |has-python|
10958python3 Python 3.x interface available. |has-python|
10959python3_compiled Compiled with Python 3.x interface. |has-python|
10960python3_dynamic Python 3.x interface is dynamically loaded. |has-python|
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +010010961pythonx Python 2.x and/or 3.x interface available. |python_x|
Bram Moolenaar071d4272004-06-13 20:20:40 +000010962qnx QNX version of Vim.
10963quickfix Compiled with |quickfix| support.
Bram Moolenaard68071d2006-05-02 22:08:30 +000010964reltime Compiled with |reltime()| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010965rightleft Compiled with 'rightleft' support.
10966ruby Compiled with Ruby interface |ruby|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010967scrollbind Compiled with 'scrollbind' support. (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010968showcmd Compiled with 'showcmd' support.
10969signs Compiled with |:sign| support.
10970smartindent Compiled with 'smartindent' support.
Bram Moolenaar427f5b62019-06-09 13:43:51 +020010971sound Compiled with sound support, e.g. `sound_playevent()`
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010972spell Compiled with spell checking support |spell|.
Bram Moolenaaref94eec2009-11-11 13:22:11 +000010973startuptime Compiled with |--startuptime| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010974statusline Compiled with support for 'statusline', 'rulerformat'
10975 and special formats of 'titlestring' and 'iconstring'.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010976sun SunOS version of Vim.
Bram Moolenaard09091d2019-01-17 16:07:22 +010010977sun_workshop Support for Sun |workshop| has been removed.
Bram Moolenaar82cf9b62005-06-07 21:09:25 +000010978syntax Compiled with syntax highlighting support |syntax|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010979syntax_items There are active syntax highlighting items for the
10980 current buffer.
10981system Compiled to use system() instead of fork()/exec().
10982tag_binary Compiled with binary searching in tags files
10983 |tag-binary-search|.
Bram Moolenaar723dd942019-04-04 13:11:03 +020010984tag_old_static Support for old static tags was removed, see
Bram Moolenaar071d4272004-06-13 20:20:40 +000010985 |tag-old-static|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010986tcl Compiled with Tcl interface.
Bram Moolenaar91c49372016-05-08 09:50:29 +020010987termguicolors Compiled with true color in terminal support.
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +020010988terminal Compiled with |terminal| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010989terminfo Compiled with terminfo instead of termcap.
10990termresponse Compiled with support for |t_RV| and |v:termresponse|.
10991textobjects Compiled with support for |text-objects|.
Bram Moolenaar98aefe72018-12-13 22:20:09 +010010992textprop Compiled with support for |text-properties|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010993tgetent Compiled with tgetent support, able to use a termcap
10994 or terminfo file.
Bram Moolenaar975b5272016-03-15 23:10:59 +010010995timers Compiled with |timer_start()| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010996title Compiled with window title support |'title'|.
10997toolbar Compiled with support for |gui-toolbar|.
Bram Moolenaar2cab0e12016-11-24 15:09:07 +010010998ttyin input is a terminal (tty)
10999ttyout output is a terminal (tty)
Bram Moolenaar37c64c72017-09-19 22:06:03 +020011000unix Unix version of Vim. *+unix*
Bram Moolenaar3df01732017-02-17 22:47:16 +010011001unnamedplus Compiled with support for "unnamedplus" in 'clipboard'
Bram Moolenaarac9fb182019-04-27 13:04:13 +020011002user_commands User-defined commands. (always true)
Bram Moolenaar4ceaa3a2019-12-03 22:49:09 +010011003vartabs Compiled with variable tabstop support |'vartabstop'|.
Bram Moolenaar22f1d0e2018-02-27 14:53:30 +010011004vcon Win32: Virtual console support is working, can use
11005 'termguicolors'. Also see |+vtp|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011006vertsplit Compiled with vertically split windows |:vsplit|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010011007 (always true)
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010011008vim_starting True while initial source'ing takes place. |startup|
Bram Moolenaar4f3f6682016-03-26 23:01:59 +010011009 *vim_starting*
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010011010viminfo Compiled with viminfo support.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020011011vimscript-1 Compiled Vim script version 1 support
11012vimscript-2 Compiled Vim script version 2 support
Bram Moolenaar911ead12019-04-21 00:03:35 +020011013vimscript-3 Compiled Vim script version 3 support
Bram Moolenaar39536dd2019-01-29 22:58:21 +010011014virtualedit Compiled with 'virtualedit' option. (always true)
Bram Moolenaar5b69c222019-01-11 14:50:06 +010011015visual Compiled with Visual mode. (always true)
11016visualextra Compiled with extra Visual mode commands. (always
11017 true) |blockwise-operators|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011018vms VMS version of Vim.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010011019vreplace Compiled with |gR| and |gr| commands. (always true)
Bram Moolenaar98ef2332018-03-18 14:44:37 +010011020vtp Compiled for vcon support |+vtp| (check vcon to find
Bram Moolenaar5a3a49e2018-03-20 18:35:53 +010011021 out if it works in the current console).
Bram Moolenaar071d4272004-06-13 20:20:40 +000011022wildignore Compiled with 'wildignore' option.
11023wildmenu Compiled with 'wildmenu' option.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010011024win16 old version for MS-Windows 3.1 (always false)
Bram Moolenaard58e9292011-02-09 17:07:58 +010011025win32 Win32 version of Vim (MS-Windows 95 and later, 32 or
11026 64 bits)
Bram Moolenaar071d4272004-06-13 20:20:40 +000011027win32unix Win32 version of Vim, using Unix files (Cygwin)
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010011028win64 Win64 version of Vim (MS-Windows 64 bit).
Bram Moolenaar39536dd2019-01-29 22:58:21 +010011029win95 Win32 version for MS-Windows 95/98/ME (always false)
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010011030winaltkeys Compiled with 'winaltkeys' option.
11031windows Compiled with support for more than one window.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010011032 (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000011033writebackup Compiled with 'writebackup' default on.
11034xfontset Compiled with X fontset support |xfontset|.
11035xim Compiled with X input method support |xim|.
Bram Moolenaar7cba6c02013-09-05 22:13:31 +020011036xpm Compiled with pixmap support.
11037xpm_w32 Compiled with pixmap support for Win32. (Only for
11038 backward compatibility. Use "xpm" instead.)
Bram Moolenaar071d4272004-06-13 20:20:40 +000011039xsmp Compiled with X session management support.
11040xsmp_interact Compiled with interactive X session management support.
11041xterm_clipboard Compiled with support for xterm clipboard.
11042xterm_save Compiled with support for saving and restoring the
11043 xterm screen.
11044x11 Compiled with X11 support.
11045
11046 *string-match*
11047Matching a pattern in a String
11048
11049A regexp pattern as explained at |pattern| is normally used to find a match in
11050the buffer lines. When a pattern is used to find a match in a String, almost
11051everything works in the same way. The difference is that a String is handled
11052like it is one line. When it contains a "\n" character, this is not seen as a
11053line break for the pattern. It can be matched with a "\n" in the pattern, or
11054with ".". Example: >
11055 :let a = "aaaa\nxxxx"
11056 :echo matchstr(a, "..\n..")
11057 aa
11058 xx
11059 :echo matchstr(a, "a.x")
11060 a
11061 x
11062
11063Don't forget that "^" will only match at the first character of the String and
11064"$" at the last character of the string. They don't match after or before a
11065"\n".
11066
11067==============================================================================
110685. Defining functions *user-functions*
11069
11070New functions can be defined. These can be called just like builtin
11071functions. The function executes a sequence of Ex commands. Normal mode
11072commands can be executed with the |:normal| command.
11073
Bram Moolenaar8a7d6542020-01-26 15:56:19 +010011074This section is about the legacy functions. For the Vim9 functions, which
11075execute much faster, support type checking and more, see |vim9.txt|.
11076
Bram Moolenaar071d4272004-06-13 20:20:40 +000011077The function name must start with an uppercase letter, to avoid confusion with
11078builtin functions. To prevent from using the same name in different scripts
11079avoid obvious, short names. A good habit is to start the function name with
11080the name of the script, e.g., "HTMLcolor()".
11081
Bram Moolenaar92d640f2005-09-05 22:11:52 +000011082It's also possible to use curly braces, see |curly-braces-names|. And the
11083|autoload| facility is useful to define a function only when it's called.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011084
11085 *local-function*
11086A function local to a script must start with "s:". A local script function
11087can only be called from within the script and from functions, user commands
11088and autocommands defined in the script. It is also possible to call the
Bram Moolenaare37d50a2008-08-06 17:06:04 +000011089function from a mapping defined in the script, but then |<SID>| must be used
Bram Moolenaar071d4272004-06-13 20:20:40 +000011090instead of "s:" when the mapping is expanded outside of the script.
Bram Moolenaarbcb98982014-05-01 14:08:19 +020011091There are only script-local functions, no buffer-local or window-local
11092functions.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011093
11094 *:fu* *:function* *E128* *E129* *E123*
11095:fu[nction] List all functions and their arguments.
11096
11097:fu[nction] {name} List function {name}.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011098 {name} can also be a |Dictionary| entry that is a
11099 |Funcref|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011100 :function dict.init
Bram Moolenaar92d640f2005-09-05 22:11:52 +000011101
11102:fu[nction] /{pattern} List functions with a name matching {pattern}.
11103 Example that lists all functions ending with "File": >
11104 :function /File$
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000011105<
11106 *:function-verbose*
11107When 'verbose' is non-zero, listing a function will also display where it was
11108last defined. Example: >
11109
11110 :verbose function SetFileTypeSH
11111 function SetFileTypeSH(name)
11112 Last set from /usr/share/vim/vim-7.0/filetype.vim
11113<
Bram Moolenaar8aff23a2005-08-19 20:40:30 +000011114See |:verbose-cmd| for more information.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000011115
Bram Moolenaarbcb98982014-05-01 14:08:19 +020011116 *E124* *E125* *E853* *E884*
Bram Moolenaar10ce39a2016-07-29 22:37:06 +020011117:fu[nction][!] {name}([arguments]) [range] [abort] [dict] [closure]
Bram Moolenaar01164a62017-11-02 22:58:42 +010011118 Define a new function by the name {name}. The body of
11119 the function follows in the next lines, until the
11120 matching |:endfunction|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010011121
Bram Moolenaar01164a62017-11-02 22:58:42 +010011122 The name must be made of alphanumeric characters and
11123 '_', and must start with a capital or "s:" (see
11124 above). Note that using "b:" or "g:" is not allowed.
11125 (since patch 7.4.260 E884 is given if the function
11126 name has a colon in the name, e.g. for "foo:bar()".
11127 Before that patch no error was given).
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011128
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011129 {name} can also be a |Dictionary| entry that is a
11130 |Funcref|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011131 :function dict.init(arg)
Bram Moolenaar58b85342016-08-14 19:54:54 +020011132< "dict" must be an existing dictionary. The entry
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011133 "init" is added if it didn't exist yet. Otherwise [!]
Bram Moolenaar58b85342016-08-14 19:54:54 +020011134 is required to overwrite an existing function. The
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011135 result is a |Funcref| to a numbered function. The
11136 function can only be used with a |Funcref| and will be
11137 deleted if there are no more references to it.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011138 *E127* *E122*
11139 When a function by this name already exists and [!] is
Bram Moolenaarded5f1b2018-11-10 17:33:29 +010011140 not used an error message is given. There is one
11141 exception: When sourcing a script again, a function
11142 that was previously defined in that script will be
11143 silently replaced.
11144 When [!] is used, an existing function is silently
11145 replaced. Unless it is currently being executed, that
11146 is an error.
Bram Moolenaarf8be4612017-06-23 20:52:40 +020011147 NOTE: Use ! wisely. If used without care it can cause
11148 an existing function to be replaced unexpectedly,
11149 which is hard to debug.
Bram Moolenaar388a5d42020-05-26 21:20:45 +020011150 NOTE: In Vim9 script script-local functions cannot be
11151 deleted or redefined.
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011152
11153 For the {arguments} see |function-argument|.
11154
Bram Moolenaar8d043172014-01-23 14:24:41 +010011155 *:func-range* *a:firstline* *a:lastline*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011156 When the [range] argument is added, the function is
11157 expected to take care of a range itself. The range is
11158 passed as "a:firstline" and "a:lastline". If [range]
11159 is excluded, ":{range}call" will call the function for
11160 each line in the range, with the cursor on the start
11161 of each line. See |function-range-example|.
Bram Moolenaar2df58b42012-11-28 18:21:11 +010011162 The cursor is still moved to the first line of the
11163 range, as is the case with all Ex commands.
Bram Moolenaar8d043172014-01-23 14:24:41 +010011164 *:func-abort*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011165 When the [abort] argument is added, the function will
11166 abort as soon as an error is detected.
Bram Moolenaar8d043172014-01-23 14:24:41 +010011167 *:func-dict*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +000011168 When the [dict] argument is added, the function must
Bram Moolenaar58b85342016-08-14 19:54:54 +020011169 be invoked through an entry in a |Dictionary|. The
Bram Moolenaar2fda12f2005-01-15 22:14:15 +000011170 local variable "self" will then be set to the
11171 dictionary. See |Dictionary-function|.
Bram Moolenaar10ce39a2016-07-29 22:37:06 +020011172 *:func-closure* *E932*
11173 When the [closure] argument is added, the function
11174 can access variables and arguments from the outer
11175 scope. This is usually called a closure. In this
11176 example Bar() uses "x" from the scope of Foo(). It
11177 remains referenced even after Foo() returns: >
11178 :function! Foo()
11179 : let x = 0
11180 : function! Bar() closure
11181 : let x += 1
11182 : return x
11183 : endfunction
Bram Moolenaarbc8801c2016-08-02 21:04:33 +020011184 : return funcref('Bar')
Bram Moolenaar10ce39a2016-07-29 22:37:06 +020011185 :endfunction
11186
11187 :let F = Foo()
11188 :echo F()
11189< 1 >
11190 :echo F()
11191< 2 >
11192 :echo F()
11193< 3
Bram Moolenaar071d4272004-06-13 20:20:40 +000011194
Bram Moolenaar446cb832008-06-24 21:56:24 +000011195 *function-search-undo*
Bram Moolenaar98692072006-02-04 00:57:42 +000011196 The last used search pattern and the redo command "."
Bram Moolenaar446cb832008-06-24 21:56:24 +000011197 will not be changed by the function. This also
11198 implies that the effect of |:nohlsearch| is undone
11199 when the function returns.
Bram Moolenaar98692072006-02-04 00:57:42 +000011200
Bram Moolenaarf8be4612017-06-23 20:52:40 +020011201 *:endf* *:endfunction* *E126* *E193* *W22*
Bram Moolenaar663bb232017-06-22 19:12:10 +020011202:endf[unction] [argument]
11203 The end of a function definition. Best is to put it
11204 on a line by its own, without [argument].
11205
11206 [argument] can be:
11207 | command command to execute next
11208 \n command command to execute next
11209 " comment always ignored
Bram Moolenaarf8be4612017-06-23 20:52:40 +020011210 anything else ignored, warning given when
11211 'verbose' is non-zero
Bram Moolenaar663bb232017-06-22 19:12:10 +020011212 The support for a following command was added in Vim
11213 8.0.0654, before that any argument was silently
11214 ignored.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011215
Bram Moolenaarf8be4612017-06-23 20:52:40 +020011216 To be able to define a function inside an `:execute`
11217 command, use line breaks instead of |:bar|: >
11218 :exe "func Foo()\necho 'foo'\nendfunc"
11219<
Bram Moolenaar437bafe2016-08-01 15:40:54 +020011220 *:delf* *:delfunction* *E130* *E131* *E933*
Bram Moolenaar663bb232017-06-22 19:12:10 +020011221:delf[unction][!] {name}
11222 Delete function {name}.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011223 {name} can also be a |Dictionary| entry that is a
11224 |Funcref|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011225 :delfunc dict.init
Bram Moolenaar58b85342016-08-14 19:54:54 +020011226< This will remove the "init" entry from "dict". The
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011227 function is deleted if there are no more references to
11228 it.
Bram Moolenaar663bb232017-06-22 19:12:10 +020011229 With the ! there is no error if the function does not
11230 exist.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011231 *:retu* *:return* *E133*
11232:retu[rn] [expr] Return from a function. When "[expr]" is given, it is
11233 evaluated and returned as the result of the function.
11234 If "[expr]" is not given, the number 0 is returned.
11235 When a function ends without an explicit ":return",
11236 the number 0 is returned.
11237 Note that there is no check for unreachable lines,
11238 thus there is no warning if commands follow ":return".
11239
11240 If the ":return" is used after a |:try| but before the
11241 matching |:finally| (if present), the commands
11242 following the ":finally" up to the matching |:endtry|
11243 are executed first. This process applies to all
11244 nested ":try"s inside the function. The function
11245 returns at the outermost ":endtry".
11246
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011247 *function-argument* *a:var*
Bram Moolenaar58b85342016-08-14 19:54:54 +020011248An argument can be defined by giving its name. In the function this can then
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011249be used as "a:name" ("a:" for argument).
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011250 *a:0* *a:1* *a:000* *E740* *...*
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011251Up to 20 arguments can be given, separated by commas. After the named
11252arguments an argument "..." can be specified, which means that more arguments
11253may optionally be following. In the function the extra arguments can be used
11254as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011255can be 0). "a:000" is set to a |List| that contains these arguments. Note
11256that "a:1" is the same as "a:000[0]".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011257 *E742*
11258The a: scope and the variables in it cannot be changed, they are fixed.
Bram Moolenaar069c1e72016-07-15 21:25:08 +020011259However, if a composite type is used, such as |List| or |Dictionary| , you can
11260change their contents. Thus you can pass a |List| to a function and have the
11261function add an item to it. If you want to make sure the function cannot
11262change a |List| or |Dictionary| use |:lockvar|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011263
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011264It is also possible to define a function without any arguments. You must
Bram Moolenaar01164a62017-11-02 22:58:42 +010011265still supply the () then.
11266
Bram Moolenaar98ef2332018-03-18 14:44:37 +010011267It is allowed to define another function inside a function body.
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011268
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011269 *optional-function-argument*
11270You can provide default values for positional named arguments. This makes
11271them optional for function calls. When a positional argument is not
11272specified at a call, the default expression is used to initialize it.
Bram Moolenaard1caa942020-04-10 22:10:56 +020011273This only works for functions declared with `:function` or `:def`, not for
11274lambda expressions |expr-lambda|.
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011275
11276Example: >
11277 function Something(key, value = 10)
Bram Moolenaar8aad88d2019-05-12 13:53:50 +020011278 echo a:key .. ": " .. a:value
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011279 endfunction
11280 call Something('empty') "empty: 10"
Bram Moolenaar8aad88d2019-05-12 13:53:50 +020011281 call Something('key', 20) "key: 20"
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011282
11283The argument default expressions are evaluated at the time of the function
11284call, not definition. Thus it is possible to use an expression which is
Bram Moolenaar68e65602019-05-26 21:33:31 +020011285invalid the moment the function is defined. The expressions are also only
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011286evaluated when arguments are not specified during a call.
11287
11288You can pass |v:none| to use the default expression. Note that this means you
11289cannot pass v:none as an ordinary value when an argument has a default
11290expression.
11291
11292Example: >
11293 function Something(a = 10, b = 20, c = 30)
11294 endfunction
11295 call Something(1, v:none, 3) " b = 20
11296<
11297 *E989*
11298Optional arguments with default expressions must occur after any mandatory
11299arguments. You can use "..." after all optional named arguments.
11300
11301It is possible for later argument defaults to refer to prior arguments,
11302but not the other way around. They must be prefixed with "a:", as with all
11303arguments.
11304
11305Example that works: >
11306 :function Okay(mandatory, optional = a:mandatory)
11307 :endfunction
11308Example that does NOT work: >
11309 :function NoGood(first = a:second, second = 10)
11310 :endfunction
11311<
Bram Moolenaard1caa942020-04-10 22:10:56 +020011312When not using "...", the number of arguments in a function call must be at
11313least equal to the number of mandatory named arguments. When using "...", the
11314number of arguments may be larger than the total of mandatory and optional
11315arguments.
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011316
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011317 *local-variables*
Bram Moolenaar069c1e72016-07-15 21:25:08 +020011318Inside a function local variables can be used. These will disappear when the
11319function returns. Global variables need to be accessed with "g:".
Bram Moolenaar071d4272004-06-13 20:20:40 +000011320
11321Example: >
11322 :function Table(title, ...)
11323 : echohl Title
11324 : echo a:title
11325 : echohl None
Bram Moolenaar677ee682005-01-27 14:41:15 +000011326 : echo a:0 . " items:"
11327 : for s in a:000
11328 : echon ' ' . s
11329 : endfor
Bram Moolenaar071d4272004-06-13 20:20:40 +000011330 :endfunction
11331
11332This function can then be called with: >
Bram Moolenaar677ee682005-01-27 14:41:15 +000011333 call Table("Table", "line1", "line2")
11334 call Table("Empty Table")
Bram Moolenaar071d4272004-06-13 20:20:40 +000011335
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011336To return more than one value, return a |List|: >
11337 :function Compute(n1, n2)
Bram Moolenaar071d4272004-06-13 20:20:40 +000011338 : if a:n2 == 0
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011339 : return ["fail", 0]
Bram Moolenaar071d4272004-06-13 20:20:40 +000011340 : endif
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011341 : return ["ok", a:n1 / a:n2]
Bram Moolenaar071d4272004-06-13 20:20:40 +000011342 :endfunction
11343
11344This function can then be called with: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011345 :let [success, div] = Compute(102, 6)
Bram Moolenaar071d4272004-06-13 20:20:40 +000011346 :if success == "ok"
11347 : echo div
11348 :endif
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011349<
Bram Moolenaar39f05632006-03-19 22:15:26 +000011350 *:cal* *:call* *E107* *E117*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011351:[range]cal[l] {name}([arguments])
11352 Call a function. The name of the function and its arguments
Bram Moolenaar68e65602019-05-26 21:33:31 +020011353 are as specified with `:function`. Up to 20 arguments can be
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011354 used. The returned value is discarded.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011355 Without a range and for functions that accept a range, the
11356 function is called once. When a range is given the cursor is
11357 positioned at the start of the first line before executing the
11358 function.
11359 When a range is given and the function doesn't handle it
11360 itself, the function is executed for each line in the range,
11361 with the cursor in the first column of that line. The cursor
11362 is left at the last line (possibly moved by the last function
Bram Moolenaar58b85342016-08-14 19:54:54 +020011363 call). The arguments are re-evaluated for each line. Thus
Bram Moolenaar071d4272004-06-13 20:20:40 +000011364 this works:
11365 *function-range-example* >
11366 :function Mynumber(arg)
11367 : echo line(".") . " " . a:arg
11368 :endfunction
11369 :1,5call Mynumber(getline("."))
11370<
11371 The "a:firstline" and "a:lastline" are defined anyway, they
11372 can be used to do something different at the start or end of
11373 the range.
11374
11375 Example of a function that handles the range itself: >
11376
11377 :function Cont() range
11378 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ '
11379 :endfunction
11380 :4,8call Cont()
11381<
11382 This function inserts the continuation character "\" in front
11383 of all the lines in the range, except the first one.
11384
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011385 When the function returns a composite value it can be further
11386 dereferenced, but the range will not be used then. Example: >
11387 :4,8call GetDict().method()
11388< Here GetDict() gets the range but method() does not.
11389
Bram Moolenaar071d4272004-06-13 20:20:40 +000011390 *E132*
11391The recursiveness of user functions is restricted with the |'maxfuncdepth'|
11392option.
11393
Bram Moolenaar25e42232019-08-04 15:04:10 +020011394It is also possible to use `:eval`. It does not support a range, but does
11395allow for method chaining, e.g.: >
11396 eval GetList()->Filter()->append('$')
11397
Bram Moolenaar088e8e32019-08-08 22:15:18 +020011398A function can also be called as part of evaluating an expression or when it
11399is used as a method: >
11400 let x = GetList()
11401 let y = GetList()->Filter()
11402
Bram Moolenaar7c626922005-02-07 22:01:03 +000011403
11404AUTOMATICALLY LOADING FUNCTIONS ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000011405 *autoload-functions*
11406When using many or large functions, it's possible to automatically define them
Bram Moolenaar7c626922005-02-07 22:01:03 +000011407only when they are used. There are two methods: with an autocommand and with
11408the "autoload" directory in 'runtimepath'.
11409
11410
11411Using an autocommand ~
11412
Bram Moolenaar05159a02005-02-26 23:04:13 +000011413This is introduced in the user manual, section |41.14|.
11414
Bram Moolenaar7c626922005-02-07 22:01:03 +000011415The autocommand is useful if you have a plugin that is a long Vim script file.
Bram Moolenaar68e65602019-05-26 21:33:31 +020011416You can define the autocommand and quickly quit the script with `:finish`.
Bram Moolenaar58b85342016-08-14 19:54:54 +020011417That makes Vim startup faster. The autocommand should then load the same file
Bram Moolenaar68e65602019-05-26 21:33:31 +020011418again, setting a variable to skip the `:finish` command.
Bram Moolenaar7c626922005-02-07 22:01:03 +000011419
11420Use the FuncUndefined autocommand event with a pattern that matches the
11421function(s) to be defined. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011422
11423 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
11424
11425The file "~/vim/bufnetfuncs.vim" should then define functions that start with
11426"BufNet". Also see |FuncUndefined|.
11427
Bram Moolenaar7c626922005-02-07 22:01:03 +000011428
11429Using an autoload script ~
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011430 *autoload* *E746*
Bram Moolenaar05159a02005-02-26 23:04:13 +000011431This is introduced in the user manual, section |41.15|.
11432
Bram Moolenaar7c626922005-02-07 22:01:03 +000011433Using a script in the "autoload" directory is simpler, but requires using
11434exactly the right file name. A function that can be autoloaded has a name
11435like this: >
11436
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011437 :call filename#funcname()
Bram Moolenaar7c626922005-02-07 22:01:03 +000011438
11439When such a function is called, and it is not defined yet, Vim will search the
11440"autoload" directories in 'runtimepath' for a script file called
11441"filename.vim". For example "~/.vim/autoload/filename.vim". That file should
11442then define the function like this: >
11443
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011444 function filename#funcname()
Bram Moolenaar7c626922005-02-07 22:01:03 +000011445 echo "Done!"
11446 endfunction
11447
Bram Moolenaar60a795a2005-09-16 21:55:43 +000011448The file name and the name used before the # in the function must match
Bram Moolenaar7c626922005-02-07 22:01:03 +000011449exactly, and the defined function must have the name exactly as it will be
11450called.
11451
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011452It is possible to use subdirectories. Every # in the function name works like
11453a path separator. Thus when calling a function: >
Bram Moolenaar7c626922005-02-07 22:01:03 +000011454
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011455 :call foo#bar#func()
Bram Moolenaar7c626922005-02-07 22:01:03 +000011456
11457Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'.
11458
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011459This also works when reading a variable that has not been set yet: >
11460
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011461 :let l = foo#bar#lvar
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011462
Bram Moolenaara5792f52005-11-23 21:25:05 +000011463However, when the autoload script was already loaded it won't be loaded again
11464for an unknown variable.
11465
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011466When assigning a value to such a variable nothing special happens. This can
11467be used to pass settings to the autoload script before it's loaded: >
11468
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011469 :let foo#bar#toggle = 1
11470 :call foo#bar#func()
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011471
Bram Moolenaar4399ef42005-02-12 14:29:27 +000011472Note that when you make a mistake and call a function that is supposed to be
11473defined in an autoload script, but the script doesn't actually define the
11474function, the script will be sourced every time you try to call the function.
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011475And you will get an error message every time.
11476
11477Also note that if you have two script files, and one calls a function in the
Bram Moolenaar446cb832008-06-24 21:56:24 +000011478other and vice versa, before the used function is defined, it won't work.
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011479Avoid using the autoload functionality at the toplevel.
Bram Moolenaar7c626922005-02-07 22:01:03 +000011480
Bram Moolenaar433f7c82006-03-21 21:29:36 +000011481Hint: If you distribute a bunch of scripts you can pack them together with the
11482|vimball| utility. Also read the user manual |distribute-script|.
11483
Bram Moolenaar071d4272004-06-13 20:20:40 +000011484==============================================================================
114856. Curly braces names *curly-braces-names*
11486
Bram Moolenaar84f72352012-03-11 15:57:40 +010011487In most places where you can use a variable, you can use a "curly braces name"
11488variable. This is a regular variable name with one or more expressions
11489wrapped in braces {} like this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011490 my_{adjective}_variable
11491
11492When Vim encounters this, it evaluates the expression inside the braces, puts
11493that in place of the expression, and re-interprets the whole as a variable
11494name. So in the above example, if the variable "adjective" was set to
11495"noisy", then the reference would be to "my_noisy_variable", whereas if
11496"adjective" was set to "quiet", then it would be to "my_quiet_variable".
11497
11498One application for this is to create a set of variables governed by an option
Bram Moolenaar58b85342016-08-14 19:54:54 +020011499value. For example, the statement >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011500 echo my_{&background}_message
11501
11502would output the contents of "my_dark_message" or "my_light_message" depending
11503on the current value of 'background'.
11504
11505You can use multiple brace pairs: >
11506 echo my_{adverb}_{adjective}_message
11507..or even nest them: >
11508 echo my_{ad{end_of_word}}_message
11509where "end_of_word" is either "verb" or "jective".
11510
11511However, the expression inside the braces must evaluate to a valid single
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000011512variable name, e.g. this is invalid: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011513 :let foo='a + b'
11514 :echo c{foo}d
11515.. since the result of expansion is "ca + bd", which is not a variable name.
11516
11517 *curly-braces-function-names*
11518You can call and define functions by an evaluated name in a similar way.
11519Example: >
11520 :let func_end='whizz'
11521 :call my_func_{func_end}(parameter)
11522
11523This would call the function "my_func_whizz(parameter)".
11524
Bram Moolenaar84f72352012-03-11 15:57:40 +010011525This does NOT work: >
11526 :let i = 3
11527 :let @{i} = '' " error
11528 :echo @{i} " error
11529
Bram Moolenaar071d4272004-06-13 20:20:40 +000011530==============================================================================
115317. Commands *expression-commands*
11532
11533:let {var-name} = {expr1} *:let* *E18*
11534 Set internal variable {var-name} to the result of the
11535 expression {expr1}. The variable will get the type
11536 from the {expr}. If {var-name} didn't exist yet, it
11537 is created.
11538
Bram Moolenaar13065c42005-01-08 16:08:21 +000011539:let {var-name}[{idx}] = {expr1} *E689*
11540 Set a list item to the result of the expression
11541 {expr1}. {var-name} must refer to a list and {idx}
11542 must be a valid index in that list. For nested list
11543 the index can be repeated.
Bram Moolenaar446cb832008-06-24 21:56:24 +000011544 This cannot be used to add an item to a |List|.
Bram Moolenaar58b85342016-08-14 19:54:54 +020011545 This cannot be used to set a byte in a String. You
Bram Moolenaar446cb832008-06-24 21:56:24 +000011546 can do that like this: >
11547 :let var = var[0:2] . 'X' . var[4:]
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010011548< When {var-name} is a |Blob| then {idx} can be the
11549 length of the blob, in which case one byte is
11550 appended.
11551
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011552 *E711* *E719*
11553:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710*
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011554 Set a sequence of items in a |List| to the result of
11555 the expression {expr1}, which must be a list with the
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000011556 correct number of items.
11557 {idx1} can be omitted, zero is used instead.
11558 {idx2} can be omitted, meaning the end of the list.
11559 When the selected range of items is partly past the
11560 end of the list, items will be added.
11561
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020011562 *:let+=* *:let-=* *:letstar=*
11563 *:let/=* *:let%=* *:let.=* *:let..=* *E734* *E985*
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011564:let {var} += {expr1} Like ":let {var} = {var} + {expr1}".
11565:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}".
Bram Moolenaarff697e62019-02-12 22:28:33 +010011566:let {var} *= {expr1} Like ":let {var} = {var} * {expr1}".
11567:let {var} /= {expr1} Like ":let {var} = {var} / {expr1}".
11568:let {var} %= {expr1} Like ":let {var} = {var} % {expr1}".
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011569:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}".
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020011570:let {var} ..= {expr1} Like ":let {var} = {var} .. {expr1}".
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011571 These fail if {var} was not set yet and when the type
11572 of {var} and {expr1} don't fit the operator.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020011573 `.=` is not supported with Vim script version 2 and
11574 later, see |vimscript-version|.
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011575
11576
Bram Moolenaar071d4272004-06-13 20:20:40 +000011577:let ${env-name} = {expr1} *:let-environment* *:let-$*
11578 Set environment variable {env-name} to the result of
11579 the expression {expr1}. The type is always String.
Bram Moolenaar56c860c2019-08-17 20:09:31 +020011580
11581 On some systems making an environment variable empty
11582 causes it to be deleted. Many systems do not make a
11583 difference between an environment variable that is not
11584 set and an environment variable that is empty.
11585
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011586:let ${env-name} .= {expr1}
11587 Append {expr1} to the environment variable {env-name}.
11588 If the environment variable didn't exist yet this
11589 works like "=".
Bram Moolenaar071d4272004-06-13 20:20:40 +000011590
11591:let @{reg-name} = {expr1} *:let-register* *:let-@*
11592 Write the result of the expression {expr1} in register
11593 {reg-name}. {reg-name} must be a single letter, and
11594 must be the name of a writable register (see
11595 |registers|). "@@" can be used for the unnamed
11596 register, "@/" for the search pattern.
11597 If the result of {expr1} ends in a <CR> or <NL>, the
11598 register will be linewise, otherwise it will be set to
11599 characterwise.
11600 This can be used to clear the last search pattern: >
11601 :let @/ = ""
11602< This is different from searching for an empty string,
11603 that would match everywhere.
11604
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011605:let @{reg-name} .= {expr1}
Bram Moolenaar58b85342016-08-14 19:54:54 +020011606 Append {expr1} to register {reg-name}. If the
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011607 register was empty it's like setting it to {expr1}.
11608
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011609:let &{option-name} = {expr1} *:let-option* *:let-&*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011610 Set option {option-name} to the result of the
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011611 expression {expr1}. A String or Number value is
11612 always converted to the type of the option.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011613 For an option local to a window or buffer the effect
11614 is just like using the |:set| command: both the local
Bram Moolenaara5fac542005-10-12 20:58:49 +000011615 value and the global value are changed.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011616 Example: >
11617 :let &path = &path . ',/usr/local/include'
Bram Moolenaar3df01732017-02-17 22:47:16 +010011618< This also works for terminal codes in the form t_xx.
11619 But only for alphanumerical names. Example: >
11620 :let &t_k1 = "\<Esc>[234;"
11621< When the code does not exist yet it will be created as
11622 a terminal key code, there is no error.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011623
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011624:let &{option-name} .= {expr1}
11625 For a string option: Append {expr1} to the value.
11626 Does not insert a comma like |:set+=|.
11627
11628:let &{option-name} += {expr1}
11629:let &{option-name} -= {expr1}
11630 For a number or boolean option: Add or subtract
11631 {expr1}.
11632
Bram Moolenaar071d4272004-06-13 20:20:40 +000011633:let &l:{option-name} = {expr1}
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011634:let &l:{option-name} .= {expr1}
11635:let &l:{option-name} += {expr1}
11636:let &l:{option-name} -= {expr1}
Bram Moolenaar071d4272004-06-13 20:20:40 +000011637 Like above, but only set the local value of an option
11638 (if there is one). Works like |:setlocal|.
11639
11640:let &g:{option-name} = {expr1}
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011641:let &g:{option-name} .= {expr1}
11642:let &g:{option-name} += {expr1}
11643:let &g:{option-name} -= {expr1}
Bram Moolenaar071d4272004-06-13 20:20:40 +000011644 Like above, but only set the global value of an option
11645 (if there is one). Works like |:setglobal|.
11646
Bram Moolenaar13065c42005-01-08 16:08:21 +000011647:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688*
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011648 {expr1} must evaluate to a |List|. The first item in
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011649 the list is assigned to {name1}, the second item to
11650 {name2}, etc.
11651 The number of names must match the number of items in
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011652 the |List|.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011653 Each name can be one of the items of the ":let"
11654 command as mentioned above.
11655 Example: >
11656 :let [s, item] = GetItem(s)
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011657< Detail: {expr1} is evaluated first, then the
11658 assignments are done in sequence. This matters if
11659 {name2} depends on {name1}. Example: >
11660 :let x = [0, 1]
11661 :let i = 0
11662 :let [i, x[i]] = [1, 2]
11663 :echo x
11664< The result is [0, 2].
11665
11666:let [{name1}, {name2}, ...] .= {expr1}
11667:let [{name1}, {name2}, ...] += {expr1}
11668:let [{name1}, {name2}, ...] -= {expr1}
11669 Like above, but append/add/subtract the value for each
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011670 |List| item.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011671
Bram Moolenaard1caa942020-04-10 22:10:56 +020011672:let [{name}, ..., ; {lastname}] = {expr1} *E452*
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011673 Like |:let-unpack| above, but the |List| may have more
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011674 items than there are names. A list of the remaining
11675 items is assigned to {lastname}. If there are no
11676 remaining items {lastname} is set to an empty list.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011677 Example: >
11678 :let [a, b; rest] = ["aval", "bval", 3, 4]
11679<
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011680:let [{name}, ..., ; {lastname}] .= {expr1}
11681:let [{name}, ..., ; {lastname}] += {expr1}
11682:let [{name}, ..., ; {lastname}] -= {expr1}
11683 Like above, but append/add/subtract the value for each
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011684 |List| item.
Bram Moolenaar4a748032010-09-30 21:47:56 +020011685
Bram Moolenaar24582002019-07-21 14:14:26 +020011686 *:let=<<* *:let-heredoc*
11687 *E990* *E991* *E172* *E221*
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011688:let {var-name} =<< [trim] {endmarker}
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011689text...
11690text...
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011691{endmarker}
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011692 Set internal variable {var-name} to a List containing
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011693 the lines of text bounded by the string {endmarker}.
11694 {endmarker} must not contain white space.
11695 {endmarker} cannot start with a lower case character.
11696 The last line should end only with the {endmarker}
11697 string without any other character. Watch out for
11698 white space after {endmarker}!
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011699
Bram Moolenaare7eb9272019-06-24 00:58:07 +020011700 Without "trim" any white space characters in the lines
11701 of text are preserved. If "trim" is specified before
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011702 {endmarker}, then indentation is stripped so you can
11703 do: >
Bram Moolenaare7eb9272019-06-24 00:58:07 +020011704 let text =<< trim END
11705 if ok
11706 echo 'done'
11707 endif
11708 END
11709< Results in: ["if ok", " echo 'done'", "endif"]
11710 The marker must line up with "let" and the indentation
11711 of the first line is removed from all the text lines.
11712 Specifically: all the leading indentation exactly
11713 matching the leading indentation of the first
11714 non-empty text line is stripped from the input lines.
11715 All leading indentation exactly matching the leading
11716 indentation before `let` is stripped from the line
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011717 containing {endmarker}. Note that the difference
11718 between space and tab matters here.
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011719
11720 If {var-name} didn't exist yet, it is created.
11721 Cannot be followed by another command, but can be
11722 followed by a comment.
11723
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011724 To avoid line continuation to be applied, consider
11725 adding 'C' to 'cpoptions': >
11726 set cpo+=C
11727 let var =<< END
11728 \ leading backslash
11729 END
11730 set cpo-=C
11731<
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011732 Examples: >
11733 let var1 =<< END
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011734 Sample text 1
11735 Sample text 2
11736 Sample text 3
11737 END
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011738
11739 let data =<< trim DATA
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011740 1 2 3 4
11741 5 6 7 8
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011742 DATA
11743<
Bram Moolenaar4a748032010-09-30 21:47:56 +020011744 *E121*
Bram Moolenaar58b85342016-08-14 19:54:54 +020011745:let {var-name} .. List the value of variable {var-name}. Multiple
Bram Moolenaardcaf10e2005-01-21 11:55:25 +000011746 variable names may be given. Special names recognized
11747 here: *E738*
Bram Moolenaarca003e12006-03-17 23:19:38 +000011748 g: global variables
11749 b: local buffer variables
11750 w: local window variables
Bram Moolenaar910f66f2006-04-05 20:41:53 +000011751 t: local tab page variables
Bram Moolenaarca003e12006-03-17 23:19:38 +000011752 s: script-local variables
11753 l: local function variables
Bram Moolenaardcaf10e2005-01-21 11:55:25 +000011754 v: Vim variables.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011755
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +000011756:let List the values of all variables. The type of the
11757 variable is indicated before the value:
11758 <nothing> String
11759 # Number
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000011760 * Funcref
Bram Moolenaar071d4272004-06-13 20:20:40 +000011761
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011762:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795*
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011763 Remove the internal variable {name}. Several variable
11764 names can be given, they are all removed. The name
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011765 may also be a |List| or |Dictionary| item.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011766 With [!] no error message is given for non-existing
11767 variables.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011768 One or more items from a |List| can be removed: >
Bram Moolenaar9cd15162005-01-16 22:02:49 +000011769 :unlet list[3] " remove fourth item
11770 :unlet list[3:] " remove fourth item to last
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011771< One item from a |Dictionary| can be removed at a time: >
Bram Moolenaar9cd15162005-01-16 22:02:49 +000011772 :unlet dict['two']
11773 :unlet dict.two
Bram Moolenaarc236c162008-07-13 17:41:49 +000011774< This is especially useful to clean up used global
11775 variables and script-local variables (these are not
11776 deleted when the script ends). Function-local
11777 variables are automatically deleted when the function
11778 ends.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011779
Bram Moolenaar137374f2018-05-13 15:59:50 +020011780:unl[et] ${env-name} ... *:unlet-environment* *:unlet-$*
11781 Remove environment variable {env-name}.
11782 Can mix {name} and ${env-name} in one :unlet command.
11783 No error message is given for a non-existing
11784 variable, also without !.
11785 If the system does not support deleting an environment
Bram Moolenaar9937a052019-06-15 15:45:06 +020011786 variable, it is made empty.
Bram Moolenaar137374f2018-05-13 15:59:50 +020011787
Bram Moolenaar1c196e72019-06-16 15:41:58 +020011788 *:cons* *:const*
Bram Moolenaar9937a052019-06-15 15:45:06 +020011789:cons[t] {var-name} = {expr1}
11790:cons[t] [{name1}, {name2}, ...] = {expr1}
Bram Moolenaar9937a052019-06-15 15:45:06 +020011791:cons[t] [{name}, ..., ; {lastname}] = {expr1}
11792:cons[t] {var-name} =<< [trim] {marker}
11793text...
11794text...
11795{marker}
11796 Similar to |:let|, but additionally lock the variable
11797 after setting the value. This is the same as locking
11798 the variable with |:lockvar| just after |:let|, thus: >
11799 :const x = 1
11800< is equivalent to: >
11801 :let x = 1
11802 :lockvar 1 x
11803< This is useful if you want to make sure the variable
11804 is not modified.
11805 *E995*
Bram Moolenaar9b283522019-06-17 22:19:33 +020011806 |:const| does not allow to for changing a variable: >
Bram Moolenaar9937a052019-06-15 15:45:06 +020011807 :let x = 1
11808 :const x = 2 " Error!
Bram Moolenaar1c196e72019-06-16 15:41:58 +020011809< *E996*
11810 Note that environment variables, option values and
11811 register values cannot be used here, since they cannot
11812 be locked.
11813
Bram Moolenaar85850f32019-07-19 22:05:51 +020011814:cons[t]
11815:cons[t] {var-name}
11816 If no argument is given or only {var-name} is given,
11817 the behavior is the same as |:let|.
11818
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011819:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv*
11820 Lock the internal variable {name}. Locking means that
11821 it can no longer be changed (until it is unlocked).
11822 A locked variable can be deleted: >
11823 :lockvar v
11824 :let v = 'asdf' " fails!
11825 :unlet v
Bram Moolenaare7877fe2017-02-20 22:35:33 +010011826< *E741* *E940*
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011827 If you try to change a locked variable you get an
Bram Moolenaare7877fe2017-02-20 22:35:33 +010011828 error message: "E741: Value is locked: {name}".
11829 If you try to lock or unlock a built-in variable you
11830 get an error message: "E940: Cannot lock or unlock
11831 variable {name}".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011832
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011833 [depth] is relevant when locking a |List| or
11834 |Dictionary|. It specifies how deep the locking goes:
11835 1 Lock the |List| or |Dictionary| itself,
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011836 cannot add or remove items, but can
11837 still change their values.
11838 2 Also lock the values, cannot change
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011839 the items. If an item is a |List| or
11840 |Dictionary|, cannot add or remove
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011841 items, but can still change the
11842 values.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011843 3 Like 2 but for the |List| /
11844 |Dictionary| in the |List| /
11845 |Dictionary|, one level deeper.
11846 The default [depth] is 2, thus when {name} is a |List|
11847 or |Dictionary| the values cannot be changed.
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011848 *E743*
11849 For unlimited depth use [!] and omit [depth].
11850 However, there is a maximum depth of 100 to catch
11851 loops.
11852
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011853 Note that when two variables refer to the same |List|
11854 and you lock one of them, the |List| will also be
Bram Moolenaar910f66f2006-04-05 20:41:53 +000011855 locked when used through the other variable.
11856 Example: >
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011857 :let l = [0, 1, 2, 3]
11858 :let cl = l
11859 :lockvar l
11860 :let cl[1] = 99 " won't work!
11861< You may want to make a copy of a list to avoid this.
11862 See |deepcopy()|.
11863
11864
11865:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo*
11866 Unlock the internal variable {name}. Does the
11867 opposite of |:lockvar|.
11868
Bram Moolenaar61da1bf2019-06-06 12:14:49 +020011869:if {expr1} *:if* *:end* *:endif* *:en* *E171* *E579* *E580*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011870:en[dif] Execute the commands until the next matching ":else"
11871 or ":endif" if {expr1} evaluates to non-zero.
11872
11873 From Vim version 4.5 until 5.0, every Ex command in
11874 between the ":if" and ":endif" is ignored. These two
11875 commands were just to allow for future expansions in a
Bram Moolenaar85084ef2016-01-17 22:26:33 +010011876 backward compatible way. Nesting was allowed. Note
Bram Moolenaar071d4272004-06-13 20:20:40 +000011877 that any ":else" or ":elseif" was ignored, the "else"
11878 part was not executed either.
11879
11880 You can use this to remain compatible with older
11881 versions: >
11882 :if version >= 500
11883 : version-5-specific-commands
11884 :endif
11885< The commands still need to be parsed to find the
11886 "endif". Sometimes an older Vim has a problem with a
11887 new command. For example, ":silent" is recognized as
11888 a ":substitute" command. In that case ":execute" can
11889 avoid problems: >
11890 :if version >= 600
11891 : execute "silent 1,$delete"
11892 :endif
11893<
11894 NOTE: The ":append" and ":insert" commands don't work
11895 properly in between ":if" and ":endif".
11896
11897 *:else* *:el* *E581* *E583*
11898:el[se] Execute the commands until the next matching ":else"
11899 or ":endif" if they previously were not being
11900 executed.
11901
11902 *:elseif* *:elsei* *E582* *E584*
11903:elsei[f] {expr1} Short for ":else" ":if", with the addition that there
11904 is no extra ":endif".
11905
11906:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw*
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011907 *E170* *E585* *E588* *E733*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011908:endw[hile] Repeat the commands between ":while" and ":endwhile",
11909 as long as {expr1} evaluates to non-zero.
11910 When an error is detected from a command inside the
11911 loop, execution continues after the "endwhile".
Bram Moolenaar12805862005-01-05 22:16:17 +000011912 Example: >
11913 :let lnum = 1
11914 :while lnum <= line("$")
11915 :call FixLine(lnum)
11916 :let lnum = lnum + 1
11917 :endwhile
11918<
Bram Moolenaar071d4272004-06-13 20:20:40 +000011919 NOTE: The ":append" and ":insert" commands don't work
Bram Moolenaard8b02732005-01-14 21:48:43 +000011920 properly inside a ":while" and ":for" loop.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011921
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011922:for {var} in {object} *:for* *E690* *E732*
Bram Moolenaar12805862005-01-05 22:16:17 +000011923:endfo[r] *:endfo* *:endfor*
11924 Repeat the commands between ":for" and ":endfor" for
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011925 each item in {object}. {object} can be a |List| or
11926 a |Blob|. Variable {var} is set to the value of each
11927 item. When an error is detected for a command inside
11928 the loop, execution continues after the "endfor".
11929 Changing {object} inside the loop affects what items
11930 are used. Make a copy if this is unwanted: >
Bram Moolenaarde8866b2005-01-06 23:24:37 +000011931 :for item in copy(mylist)
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011932<
11933 When {object} is a |List| and not making a copy, Vim
11934 stores a reference to the next item in the |List|
11935 before executing the commands with the current item.
11936 Thus the current item can be removed without effect.
11937 Removing any later item means it will not be found.
11938 Thus the following example works (an inefficient way
11939 to make a |List| empty): >
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010011940 for item in mylist
11941 call remove(mylist, 0)
11942 endfor
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011943< Note that reordering the |List| (e.g., with sort() or
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000011944 reverse()) may have unexpected effects.
Bram Moolenaar12805862005-01-05 22:16:17 +000011945
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011946 When {object} is a |Blob|, Vim always makes a copy to
11947 iterate over. Unlike with |List|, modifying the
11948 |Blob| does not affect the iteration.
11949
Bram Moolenaar12805862005-01-05 22:16:17 +000011950:for [{var1}, {var2}, ...] in {listlist}
11951:endfo[r]
11952 Like ":for" above, but each item in {listlist} must be
11953 a list, of which each item is assigned to {var1},
11954 {var2}, etc. Example: >
11955 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]]
11956 :echo getline(lnum)[col]
11957 :endfor
11958<
Bram Moolenaar071d4272004-06-13 20:20:40 +000011959 *:continue* *:con* *E586*
Bram Moolenaar12805862005-01-05 22:16:17 +000011960:con[tinue] When used inside a ":while" or ":for" loop, jumps back
11961 to the start of the loop.
11962 If it is used after a |:try| inside the loop but
11963 before the matching |:finally| (if present), the
11964 commands following the ":finally" up to the matching
11965 |:endtry| are executed first. This process applies to
11966 all nested ":try"s inside the loop. The outermost
11967 ":endtry" then jumps back to the start of the loop.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011968
11969 *:break* *:brea* *E587*
Bram Moolenaar12805862005-01-05 22:16:17 +000011970:brea[k] When used inside a ":while" or ":for" loop, skips to
11971 the command after the matching ":endwhile" or
11972 ":endfor".
11973 If it is used after a |:try| inside the loop but
11974 before the matching |:finally| (if present), the
11975 commands following the ":finally" up to the matching
11976 |:endtry| are executed first. This process applies to
11977 all nested ":try"s inside the loop. The outermost
11978 ":endtry" then jumps to the command after the loop.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011979
11980:try *:try* *:endt* *:endtry* *E600* *E601* *E602*
11981:endt[ry] Change the error handling for the commands between
11982 ":try" and ":endtry" including everything being
11983 executed across ":source" commands, function calls,
11984 or autocommand invocations.
11985
11986 When an error or interrupt is detected and there is
11987 a |:finally| command following, execution continues
11988 after the ":finally". Otherwise, or when the
11989 ":endtry" is reached thereafter, the next
11990 (dynamically) surrounding ":try" is checked for
11991 a corresponding ":finally" etc. Then the script
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +010011992 processing is terminated. Whether a function
11993 definition has an "abort" argument does not matter.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011994 Example: >
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +010011995 try | call Unknown() | finally | echomsg "cleanup" | endtry
11996 echomsg "not reached"
Bram Moolenaar071d4272004-06-13 20:20:40 +000011997<
11998 Moreover, an error or interrupt (dynamically) inside
11999 ":try" and ":endtry" is converted to an exception. It
12000 can be caught as if it were thrown by a |:throw|
12001 command (see |:catch|). In this case, the script
12002 processing is not terminated.
12003
12004 The value "Vim:Interrupt" is used for an interrupt
12005 exception. An error in a Vim command is converted
12006 to a value of the form "Vim({command}):{errmsg}",
12007 other errors are converted to a value of the form
12008 "Vim:{errmsg}". {command} is the full command name,
12009 and {errmsg} is the message that is displayed if the
12010 error exception is not caught, always beginning with
12011 the error number.
12012 Examples: >
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +010012013 try | sleep 100 | catch /^Vim:Interrupt$/ | endtry
12014 try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
Bram Moolenaar071d4272004-06-13 20:20:40 +000012015<
12016 *:cat* *:catch* *E603* *E604* *E605*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010012017:cat[ch] /{pattern}/ The following commands until the next |:catch|,
Bram Moolenaar071d4272004-06-13 20:20:40 +000012018 |:finally|, or |:endtry| that belongs to the same
12019 |:try| as the ":catch" are executed when an exception
12020 matching {pattern} is being thrown and has not yet
12021 been caught by a previous ":catch". Otherwise, these
12022 commands are skipped.
12023 When {pattern} is omitted all errors are caught.
12024 Examples: >
Bram Moolenaar647e24b2019-03-17 16:39:46 +010012025 :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C)
12026 :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors
12027 :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts
12028 :catch /^Vim(write):/ " catch all errors in :write
12029 :catch /^Vim\%((\a\+)\)\=:E123:/ " catch error E123
12030 :catch /my-exception/ " catch user exception
12031 :catch /.*/ " catch everything
12032 :catch " same as /.*/
Bram Moolenaar071d4272004-06-13 20:20:40 +000012033<
12034 Another character can be used instead of / around the
12035 {pattern}, so long as it does not have a special
12036 meaning (e.g., '|' or '"') and doesn't occur inside
12037 {pattern}.
Bram Moolenaar7e38ea22014-04-05 22:55:53 +020012038 Information about the exception is available in
12039 |v:exception|. Also see |throw-variables|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012040 NOTE: It is not reliable to ":catch" the TEXT of
12041 an error message because it may vary in different
12042 locales.
12043
12044 *:fina* *:finally* *E606* *E607*
12045:fina[lly] The following commands until the matching |:endtry|
12046 are executed whenever the part between the matching
12047 |:try| and the ":finally" is left: either by falling
12048 through to the ":finally" or by a |:continue|,
12049 |:break|, |:finish|, or |:return|, or by an error or
12050 interrupt or exception (see |:throw|).
12051
12052 *:th* *:throw* *E608*
12053:th[row] {expr1} The {expr1} is evaluated and thrown as an exception.
12054 If the ":throw" is used after a |:try| but before the
12055 first corresponding |:catch|, commands are skipped
12056 until the first ":catch" matching {expr1} is reached.
12057 If there is no such ":catch" or if the ":throw" is
12058 used after a ":catch" but before the |:finally|, the
12059 commands following the ":finally" (if present) up to
12060 the matching |:endtry| are executed. If the ":throw"
12061 is after the ":finally", commands up to the ":endtry"
12062 are skipped. At the ":endtry", this process applies
12063 again for the next dynamically surrounding ":try"
12064 (which may be found in a calling function or sourcing
12065 script), until a matching ":catch" has been found.
12066 If the exception is not caught, the command processing
12067 is terminated.
12068 Example: >
12069 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry
Bram Moolenaar662db672011-03-22 14:05:35 +010012070< Note that "catch" may need to be on a separate line
12071 for when an error causes the parsing to skip the whole
12072 line and not see the "|" that separates the commands.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012073
12074 *:ec* *:echo*
12075:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The
12076 first {expr1} starts on a new line.
12077 Also see |:comment|.
12078 Use "\n" to start a new line. Use "\r" to move the
12079 cursor to the first column.
12080 Uses the highlighting set by the |:echohl| command.
12081 Cannot be followed by a comment.
12082 Example: >
12083 :echo "the value of 'shell' is" &shell
Bram Moolenaaref2f6562007-05-06 13:32:59 +000012084< *:echo-redraw*
12085 A later redraw may make the message disappear again.
12086 And since Vim mostly postpones redrawing until it's
12087 finished with a sequence of commands this happens
12088 quite often. To avoid that a command from before the
12089 ":echo" causes a redraw afterwards (redraws are often
12090 postponed until you type something), force a redraw
12091 with the |:redraw| command. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000012092 :new | redraw | echo "there is a new window"
12093<
12094 *:echon*
12095:echon {expr1} .. Echoes each {expr1}, without anything added. Also see
12096 |:comment|.
12097 Uses the highlighting set by the |:echohl| command.
12098 Cannot be followed by a comment.
12099 Example: >
12100 :echon "the value of 'shell' is " &shell
12101<
12102 Note the difference between using ":echo", which is a
12103 Vim command, and ":!echo", which is an external shell
12104 command: >
12105 :!echo % --> filename
12106< The arguments of ":!" are expanded, see |:_%|. >
12107 :!echo "%" --> filename or "filename"
12108< Like the previous example. Whether you see the double
12109 quotes or not depends on your 'shell'. >
12110 :echo % --> nothing
12111< The '%' is an illegal character in an expression. >
12112 :echo "%" --> %
12113< This just echoes the '%' character. >
12114 :echo expand("%") --> filename
12115< This calls the expand() function to expand the '%'.
12116
12117 *:echoh* *:echohl*
12118:echoh[l] {name} Use the highlight group {name} for the following
12119 |:echo|, |:echon| and |:echomsg| commands. Also used
12120 for the |input()| prompt. Example: >
12121 :echohl WarningMsg | echo "Don't panic!" | echohl None
12122< Don't forget to set the group back to "None",
12123 otherwise all following echo's will be highlighted.
12124
12125 *:echom* *:echomsg*
12126:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the
12127 message in the |message-history|.
12128 Spaces are placed between the arguments as with the
12129 |:echo| command. But unprintable characters are
12130 displayed, not interpreted.
Bram Moolenaaref2f6562007-05-06 13:32:59 +000012131 The parsing works slightly different from |:echo|,
12132 more like |:execute|. All the expressions are first
12133 evaluated and concatenated before echoing anything.
Bram Moolenaar461a7fc2018-12-22 13:28:07 +010012134 If expressions does not evaluate to a Number or
12135 String, string() is used to turn it into a string.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012136 Uses the highlighting set by the |:echohl| command.
12137 Example: >
12138 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see."
Bram Moolenaaref2f6562007-05-06 13:32:59 +000012139< See |:echo-redraw| to avoid the message disappearing
12140 when the screen is redrawn.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012141 *:echoe* *:echoerr*
12142:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the
12143 message in the |message-history|. When used in a
12144 script or function the line number will be added.
12145 Spaces are placed between the arguments as with the
Bram Moolenaar461a7fc2018-12-22 13:28:07 +010012146 |:echomsg| command. When used inside a try conditional,
Bram Moolenaar071d4272004-06-13 20:20:40 +000012147 the message is raised as an error exception instead
12148 (see |try-echoerr|).
12149 Example: >
12150 :echoerr "This script just failed!"
12151< If you just want a highlighted message use |:echohl|.
12152 And to get a beep: >
12153 :exe "normal \<Esc>"
12154<
Bram Moolenaar09c6f262019-11-17 15:55:14 +010012155 *:eval*
12156:eval {expr} Evaluate {expr} and discard the result. Example: >
12157 :eval Getlist()->Filter()->append('$')
12158
12159< The expression is supposed to have a side effect,
12160 since the resulting value is not used. In the example
12161 the `append()` call appends the List with text to the
12162 buffer. This is similar to `:call` but works with any
12163 expression.
12164
12165 The command can be shortened to `:ev` or `:eva`, but
12166 these are hard to recognize and therefore not to be
12167 used.
12168
Bram Moolenaarbc93ceb2020-02-26 13:36:21 +010012169 The command cannot be followed by "|" and another
12170 command, since "|" is seen as part of the expression.
12171
Bram Moolenaar09c6f262019-11-17 15:55:14 +010012172
Bram Moolenaar071d4272004-06-13 20:20:40 +000012173 *:exe* *:execute*
12174:exe[cute] {expr1} .. Executes the string that results from the evaluation
Bram Moolenaar00a927d2010-05-14 23:24:24 +020012175 of {expr1} as an Ex command.
12176 Multiple arguments are concatenated, with a space in
12177 between. To avoid the extra space use the "."
12178 operator to concatenate strings into one argument.
12179 {expr1} is used as the processed command, command line
12180 editing keys are not recognized.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012181 Cannot be followed by a comment.
12182 Examples: >
Bram Moolenaar00a927d2010-05-14 23:24:24 +020012183 :execute "buffer" nextbuf
12184 :execute "normal" count . "w"
Bram Moolenaar071d4272004-06-13 20:20:40 +000012185<
12186 ":execute" can be used to append a command to commands
12187 that don't accept a '|'. Example: >
12188 :execute '!ls' | echo "theend"
12189
12190< ":execute" is also a nice way to avoid having to type
12191 control characters in a Vim script for a ":normal"
12192 command: >
12193 :execute "normal ixxx\<Esc>"
12194< This has an <Esc> character, see |expr-string|.
12195
Bram Moolenaar446cb832008-06-24 21:56:24 +000012196 Be careful to correctly escape special characters in
12197 file names. The |fnameescape()| function can be used
Bram Moolenaar05bb9532008-07-04 09:44:11 +000012198 for Vim commands, |shellescape()| for |:!| commands.
12199 Examples: >
Bram Moolenaar446cb832008-06-24 21:56:24 +000012200 :execute "e " . fnameescape(filename)
Bram Moolenaar251835e2014-02-24 02:51:51 +010012201 :execute "!ls " . shellescape(filename, 1)
Bram Moolenaar446cb832008-06-24 21:56:24 +000012202<
Bram Moolenaar071d4272004-06-13 20:20:40 +000012203 Note: The executed string may be any command-line, but
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +010012204 starting or ending "if", "while" and "for" does not
12205 always work, because when commands are skipped the
12206 ":execute" is not evaluated and Vim loses track of
12207 where blocks start and end. Also "break" and
12208 "continue" should not be inside ":execute".
12209 This example does not work, because the ":execute" is
12210 not evaluated and Vim does not see the "while", and
12211 gives an error for finding an ":endwhile": >
12212 :if 0
12213 : execute 'while i > 5'
12214 : echo "test"
12215 : endwhile
12216 :endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000012217<
12218 It is allowed to have a "while" or "if" command
12219 completely in the executed string: >
12220 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile'
12221<
12222
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010012223 *:exe-comment*
Bram Moolenaar071d4272004-06-13 20:20:40 +000012224 ":execute", ":echo" and ":echon" cannot be followed by
12225 a comment directly, because they see the '"' as the
12226 start of a string. But, you can use '|' followed by a
12227 comment. Example: >
12228 :echo "foo" | "this is a comment
12229
12230==============================================================================
122318. Exception handling *exception-handling*
12232
12233The Vim script language comprises an exception handling feature. This section
12234explains how it can be used in a Vim script.
12235
12236Exceptions may be raised by Vim on an error or on interrupt, see
12237|catch-errors| and |catch-interrupt|. You can also explicitly throw an
12238exception by using the ":throw" command, see |throw-catch|.
12239
12240
12241TRY CONDITIONALS *try-conditionals*
12242
12243Exceptions can be caught or can cause cleanup code to be executed. You can
12244use a try conditional to specify catch clauses (that catch exceptions) and/or
12245a finally clause (to be executed for cleanup).
12246 A try conditional begins with a |:try| command and ends at the matching
12247|:endtry| command. In between, you can use a |:catch| command to start
12248a catch clause, or a |:finally| command to start a finally clause. There may
12249be none or multiple catch clauses, but there is at most one finally clause,
12250which must not be followed by any catch clauses. The lines before the catch
12251clauses and the finally clause is called a try block. >
12252
12253 :try
Bram Moolenaar446cb832008-06-24 21:56:24 +000012254 : ...
12255 : ... TRY BLOCK
12256 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012257 :catch /{pattern}/
Bram Moolenaar446cb832008-06-24 21:56:24 +000012258 : ...
12259 : ... CATCH CLAUSE
12260 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012261 :catch /{pattern}/
Bram Moolenaar446cb832008-06-24 21:56:24 +000012262 : ...
12263 : ... CATCH CLAUSE
12264 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012265 :finally
Bram Moolenaar446cb832008-06-24 21:56:24 +000012266 : ...
12267 : ... FINALLY CLAUSE
12268 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012269 :endtry
12270
12271The try conditional allows to watch code for exceptions and to take the
12272appropriate actions. Exceptions from the try block may be caught. Exceptions
12273from the try block and also the catch clauses may cause cleanup actions.
12274 When no exception is thrown during execution of the try block, the control
12275is transferred to the finally clause, if present. After its execution, the
12276script continues with the line following the ":endtry".
12277 When an exception occurs during execution of the try block, the remaining
12278lines in the try block are skipped. The exception is matched against the
12279patterns specified as arguments to the ":catch" commands. The catch clause
12280after the first matching ":catch" is taken, other catch clauses are not
12281executed. The catch clause ends when the next ":catch", ":finally", or
12282":endtry" command is reached - whatever is first. Then, the finally clause
12283(if present) is executed. When the ":endtry" is reached, the script execution
12284continues in the following line as usual.
12285 When an exception that does not match any of the patterns specified by the
12286":catch" commands is thrown in the try block, the exception is not caught by
12287that try conditional and none of the catch clauses is executed. Only the
12288finally clause, if present, is taken. The exception pends during execution of
12289the finally clause. It is resumed at the ":endtry", so that commands after
12290the ":endtry" are not executed and the exception might be caught elsewhere,
12291see |try-nesting|.
12292 When during execution of a catch clause another exception is thrown, the
Bram Moolenaar58b85342016-08-14 19:54:54 +020012293remaining lines in that catch clause are not executed. The new exception is
Bram Moolenaar071d4272004-06-13 20:20:40 +000012294not matched against the patterns in any of the ":catch" commands of the same
12295try conditional and none of its catch clauses is taken. If there is, however,
12296a finally clause, it is executed, and the exception pends during its
12297execution. The commands following the ":endtry" are not executed. The new
12298exception might, however, be caught elsewhere, see |try-nesting|.
12299 When during execution of the finally clause (if present) an exception is
Bram Moolenaar58b85342016-08-14 19:54:54 +020012300thrown, the remaining lines in the finally clause are skipped. If the finally
Bram Moolenaar071d4272004-06-13 20:20:40 +000012301clause has been taken because of an exception from the try block or one of the
12302catch clauses, the original (pending) exception is discarded. The commands
12303following the ":endtry" are not executed, and the exception from the finally
12304clause is propagated and can be caught elsewhere, see |try-nesting|.
12305
12306The finally clause is also executed, when a ":break" or ":continue" for
12307a ":while" loop enclosing the complete try conditional is executed from the
12308try block or a catch clause. Or when a ":return" or ":finish" is executed
12309from the try block or a catch clause of a try conditional in a function or
12310sourced script, respectively. The ":break", ":continue", ":return", or
12311":finish" pends during execution of the finally clause and is resumed when the
12312":endtry" is reached. It is, however, discarded when an exception is thrown
12313from the finally clause.
12314 When a ":break" or ":continue" for a ":while" loop enclosing the complete
12315try conditional or when a ":return" or ":finish" is encountered in the finally
12316clause, the rest of the finally clause is skipped, and the ":break",
12317":continue", ":return" or ":finish" is executed as usual. If the finally
12318clause has been taken because of an exception or an earlier ":break",
12319":continue", ":return", or ":finish" from the try block or a catch clause,
12320this pending exception or command is discarded.
12321
12322For examples see |throw-catch| and |try-finally|.
12323
12324
12325NESTING OF TRY CONDITIONALS *try-nesting*
12326
12327Try conditionals can be nested arbitrarily. That is, a complete try
12328conditional can be put into the try block, a catch clause, or the finally
12329clause of another try conditional. If the inner try conditional does not
12330catch an exception thrown in its try block or throws a new exception from one
12331of its catch clauses or its finally clause, the outer try conditional is
12332checked according to the rules above. If the inner try conditional is in the
12333try block of the outer try conditional, its catch clauses are checked, but
Bram Moolenaar58b85342016-08-14 19:54:54 +020012334otherwise only the finally clause is executed. It does not matter for
Bram Moolenaar071d4272004-06-13 20:20:40 +000012335nesting, whether the inner try conditional is directly contained in the outer
12336one, or whether the outer one sources a script or calls a function containing
12337the inner try conditional.
12338
12339When none of the active try conditionals catches an exception, just their
12340finally clauses are executed. Thereafter, the script processing terminates.
12341An error message is displayed in case of an uncaught exception explicitly
12342thrown by a ":throw" command. For uncaught error and interrupt exceptions
12343implicitly raised by Vim, the error message(s) or interrupt message are shown
12344as usual.
12345
12346For examples see |throw-catch|.
12347
12348
12349EXAMINING EXCEPTION HANDLING CODE *except-examine*
12350
12351Exception handling code can get tricky. If you are in doubt what happens, set
12352'verbose' to 13 or use the ":13verbose" command modifier when sourcing your
12353script file. Then you see when an exception is thrown, discarded, caught, or
12354finished. When using a verbosity level of at least 14, things pending in
12355a finally clause are also shown. This information is also given in debug mode
12356(see |debug-scripts|).
12357
12358
12359THROWING AND CATCHING EXCEPTIONS *throw-catch*
12360
12361You can throw any number or string as an exception. Use the |:throw| command
12362and pass the value to be thrown as argument: >
12363 :throw 4711
12364 :throw "string"
12365< *throw-expression*
12366You can also specify an expression argument. The expression is then evaluated
12367first, and the result is thrown: >
12368 :throw 4705 + strlen("string")
12369 :throw strpart("strings", 0, 6)
12370
12371An exception might be thrown during evaluation of the argument of the ":throw"
12372command. Unless it is caught there, the expression evaluation is abandoned.
12373The ":throw" command then does not throw a new exception.
12374 Example: >
12375
12376 :function! Foo(arg)
12377 : try
12378 : throw a:arg
12379 : catch /foo/
12380 : endtry
12381 : return 1
12382 :endfunction
12383 :
12384 :function! Bar()
12385 : echo "in Bar"
12386 : return 4710
12387 :endfunction
12388 :
12389 :throw Foo("arrgh") + Bar()
12390
12391This throws "arrgh", and "in Bar" is not displayed since Bar() is not
12392executed. >
12393 :throw Foo("foo") + Bar()
12394however displays "in Bar" and throws 4711.
12395
12396Any other command that takes an expression as argument might also be
Bram Moolenaar58b85342016-08-14 19:54:54 +020012397abandoned by an (uncaught) exception during the expression evaluation. The
Bram Moolenaar071d4272004-06-13 20:20:40 +000012398exception is then propagated to the caller of the command.
12399 Example: >
12400
12401 :if Foo("arrgh")
12402 : echo "then"
12403 :else
12404 : echo "else"
12405 :endif
12406
12407Here neither of "then" or "else" is displayed.
12408
12409 *catch-order*
12410Exceptions can be caught by a try conditional with one or more |:catch|
12411commands, see |try-conditionals|. The values to be caught by each ":catch"
12412command can be specified as a pattern argument. The subsequent catch clause
12413gets executed when a matching exception is caught.
12414 Example: >
12415
12416 :function! Foo(value)
12417 : try
12418 : throw a:value
12419 : catch /^\d\+$/
12420 : echo "Number thrown"
12421 : catch /.*/
12422 : echo "String thrown"
12423 : endtry
12424 :endfunction
12425 :
12426 :call Foo(0x1267)
12427 :call Foo('string')
12428
12429The first call to Foo() displays "Number thrown", the second "String thrown".
12430An exception is matched against the ":catch" commands in the order they are
12431specified. Only the first match counts. So you should place the more
12432specific ":catch" first. The following order does not make sense: >
12433
12434 : catch /.*/
12435 : echo "String thrown"
12436 : catch /^\d\+$/
12437 : echo "Number thrown"
12438
12439The first ":catch" here matches always, so that the second catch clause is
12440never taken.
12441
12442 *throw-variables*
12443If you catch an exception by a general pattern, you may access the exact value
12444in the variable |v:exception|: >
12445
12446 : catch /^\d\+$/
12447 : echo "Number thrown. Value is" v:exception
12448
12449You may also be interested where an exception was thrown. This is stored in
12450|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the
12451exception most recently caught as long it is not finished.
12452 Example: >
12453
12454 :function! Caught()
12455 : if v:exception != ""
12456 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint
12457 : else
12458 : echo 'Nothing caught'
12459 : endif
12460 :endfunction
12461 :
12462 :function! Foo()
12463 : try
12464 : try
12465 : try
12466 : throw 4711
12467 : finally
12468 : call Caught()
12469 : endtry
12470 : catch /.*/
12471 : call Caught()
12472 : throw "oops"
12473 : endtry
12474 : catch /.*/
12475 : call Caught()
12476 : finally
12477 : call Caught()
12478 : endtry
12479 :endfunction
12480 :
12481 :call Foo()
12482
12483This displays >
12484
12485 Nothing caught
12486 Caught "4711" in function Foo, line 4
12487 Caught "oops" in function Foo, line 10
12488 Nothing caught
12489
12490A practical example: The following command ":LineNumber" displays the line
12491number in the script or function where it has been used: >
12492
12493 :function! LineNumber()
12494 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "")
12495 :endfunction
12496 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry
12497<
12498 *try-nested*
12499An exception that is not caught by a try conditional can be caught by
12500a surrounding try conditional: >
12501
12502 :try
12503 : try
12504 : throw "foo"
12505 : catch /foobar/
12506 : echo "foobar"
12507 : finally
12508 : echo "inner finally"
12509 : endtry
12510 :catch /foo/
12511 : echo "foo"
12512 :endtry
12513
12514The inner try conditional does not catch the exception, just its finally
12515clause is executed. The exception is then caught by the outer try
12516conditional. The example displays "inner finally" and then "foo".
12517
12518 *throw-from-catch*
12519You can catch an exception and throw a new one to be caught elsewhere from the
12520catch clause: >
12521
12522 :function! Foo()
12523 : throw "foo"
12524 :endfunction
12525 :
12526 :function! Bar()
12527 : try
12528 : call Foo()
12529 : catch /foo/
12530 : echo "Caught foo, throw bar"
12531 : throw "bar"
12532 : endtry
12533 :endfunction
12534 :
12535 :try
12536 : call Bar()
12537 :catch /.*/
12538 : echo "Caught" v:exception
12539 :endtry
12540
12541This displays "Caught foo, throw bar" and then "Caught bar".
12542
12543 *rethrow*
12544There is no real rethrow in the Vim script language, but you may throw
12545"v:exception" instead: >
12546
12547 :function! Bar()
12548 : try
12549 : call Foo()
12550 : catch /.*/
12551 : echo "Rethrow" v:exception
12552 : throw v:exception
12553 : endtry
12554 :endfunction
12555< *try-echoerr*
12556Note that this method cannot be used to "rethrow" Vim error or interrupt
12557exceptions, because it is not possible to fake Vim internal exceptions.
12558Trying so causes an error exception. You should throw your own exception
12559denoting the situation. If you want to cause a Vim error exception containing
12560the original error exception value, you can use the |:echoerr| command: >
12561
12562 :try
12563 : try
12564 : asdf
12565 : catch /.*/
12566 : echoerr v:exception
12567 : endtry
12568 :catch /.*/
12569 : echo v:exception
12570 :endtry
12571
12572This code displays
12573
Bram Moolenaar446cb832008-06-24 21:56:24 +000012574 Vim(echoerr):Vim:E492: Not an editor command: asdf ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000012575
12576
12577CLEANUP CODE *try-finally*
12578
12579Scripts often change global settings and restore them at their end. If the
12580user however interrupts the script by pressing CTRL-C, the settings remain in
Bram Moolenaar58b85342016-08-14 19:54:54 +020012581an inconsistent state. The same may happen to you in the development phase of
Bram Moolenaar071d4272004-06-13 20:20:40 +000012582a script when an error occurs or you explicitly throw an exception without
12583catching it. You can solve these problems by using a try conditional with
12584a finally clause for restoring the settings. Its execution is guaranteed on
12585normal control flow, on error, on an explicit ":throw", and on interrupt.
12586(Note that errors and interrupts from inside the try conditional are converted
Bram Moolenaar58b85342016-08-14 19:54:54 +020012587to exceptions. When not caught, they terminate the script after the finally
Bram Moolenaar071d4272004-06-13 20:20:40 +000012588clause has been executed.)
12589Example: >
12590
12591 :try
12592 : let s:saved_ts = &ts
12593 : set ts=17
12594 :
12595 : " Do the hard work here.
12596 :
12597 :finally
12598 : let &ts = s:saved_ts
12599 : unlet s:saved_ts
12600 :endtry
12601
12602This method should be used locally whenever a function or part of a script
12603changes global settings which need to be restored on failure or normal exit of
12604that function or script part.
12605
12606 *break-finally*
12607Cleanup code works also when the try block or a catch clause is left by
12608a ":continue", ":break", ":return", or ":finish".
12609 Example: >
12610
12611 :let first = 1
12612 :while 1
12613 : try
12614 : if first
12615 : echo "first"
12616 : let first = 0
12617 : continue
12618 : else
12619 : throw "second"
12620 : endif
12621 : catch /.*/
12622 : echo v:exception
12623 : break
12624 : finally
12625 : echo "cleanup"
12626 : endtry
12627 : echo "still in while"
12628 :endwhile
12629 :echo "end"
12630
12631This displays "first", "cleanup", "second", "cleanup", and "end". >
12632
12633 :function! Foo()
12634 : try
12635 : return 4711
12636 : finally
12637 : echo "cleanup\n"
12638 : endtry
12639 : echo "Foo still active"
12640 :endfunction
12641 :
12642 :echo Foo() "returned by Foo"
12643
12644This displays "cleanup" and "4711 returned by Foo". You don't need to add an
Bram Moolenaar58b85342016-08-14 19:54:54 +020012645extra ":return" in the finally clause. (Above all, this would override the
Bram Moolenaar071d4272004-06-13 20:20:40 +000012646return value.)
12647
12648 *except-from-finally*
12649Using either of ":continue", ":break", ":return", ":finish", or ":throw" in
12650a finally clause is possible, but not recommended since it abandons the
12651cleanup actions for the try conditional. But, of course, interrupt and error
12652exceptions might get raised from a finally clause.
12653 Example where an error in the finally clause stops an interrupt from
12654working correctly: >
12655
12656 :try
12657 : try
12658 : echo "Press CTRL-C for interrupt"
12659 : while 1
12660 : endwhile
12661 : finally
12662 : unlet novar
12663 : endtry
12664 :catch /novar/
12665 :endtry
12666 :echo "Script still running"
12667 :sleep 1
12668
12669If you need to put commands that could fail into a finally clause, you should
12670think about catching or ignoring the errors in these commands, see
12671|catch-errors| and |ignore-errors|.
12672
12673
12674CATCHING ERRORS *catch-errors*
12675
12676If you want to catch specific errors, you just have to put the code to be
12677watched in a try block and add a catch clause for the error message. The
12678presence of the try conditional causes all errors to be converted to an
12679exception. No message is displayed and |v:errmsg| is not set then. To find
12680the right pattern for the ":catch" command, you have to know how the format of
12681the error exception is.
12682 Error exceptions have the following format: >
12683
12684 Vim({cmdname}):{errmsg}
12685or >
12686 Vim:{errmsg}
12687
12688{cmdname} is the name of the command that failed; the second form is used when
Bram Moolenaar58b85342016-08-14 19:54:54 +020012689the command name is not known. {errmsg} is the error message usually produced
Bram Moolenaar071d4272004-06-13 20:20:40 +000012690when the error occurs outside try conditionals. It always begins with
12691a capital "E", followed by a two or three-digit error number, a colon, and
12692a space.
12693
12694Examples:
12695
12696The command >
12697 :unlet novar
12698normally produces the error message >
12699 E108: No such variable: "novar"
12700which is converted inside try conditionals to an exception >
12701 Vim(unlet):E108: No such variable: "novar"
12702
12703The command >
12704 :dwim
12705normally produces the error message >
12706 E492: Not an editor command: dwim
12707which is converted inside try conditionals to an exception >
12708 Vim:E492: Not an editor command: dwim
12709
12710You can catch all ":unlet" errors by a >
12711 :catch /^Vim(unlet):/
12712or all errors for misspelled command names by a >
12713 :catch /^Vim:E492:/
12714
12715Some error messages may be produced by different commands: >
12716 :function nofunc
12717and >
12718 :delfunction nofunc
12719both produce the error message >
12720 E128: Function name must start with a capital: nofunc
12721which is converted inside try conditionals to an exception >
12722 Vim(function):E128: Function name must start with a capital: nofunc
12723or >
12724 Vim(delfunction):E128: Function name must start with a capital: nofunc
12725respectively. You can catch the error by its number independently on the
12726command that caused it if you use the following pattern: >
12727 :catch /^Vim(\a\+):E128:/
12728
12729Some commands like >
12730 :let x = novar
12731produce multiple error messages, here: >
12732 E121: Undefined variable: novar
12733 E15: Invalid expression: novar
12734Only the first is used for the exception value, since it is the most specific
12735one (see |except-several-errors|). So you can catch it by >
12736 :catch /^Vim(\a\+):E121:/
12737
12738You can catch all errors related to the name "nofunc" by >
12739 :catch /\<nofunc\>/
12740
12741You can catch all Vim errors in the ":write" and ":read" commands by >
12742 :catch /^Vim(\(write\|read\)):E\d\+:/
12743
12744You can catch all Vim errors by the pattern >
12745 :catch /^Vim\((\a\+)\)\=:E\d\+:/
12746<
12747 *catch-text*
12748NOTE: You should never catch the error message text itself: >
12749 :catch /No such variable/
Bram Moolenaar2b8388b2015-02-28 13:11:45 +010012750only works in the English locale, but not when the user has selected
Bram Moolenaar071d4272004-06-13 20:20:40 +000012751a different language by the |:language| command. It is however helpful to
12752cite the message text in a comment: >
12753 :catch /^Vim(\a\+):E108:/ " No such variable
12754
12755
12756IGNORING ERRORS *ignore-errors*
12757
12758You can ignore errors in a specific Vim command by catching them locally: >
12759
12760 :try
12761 : write
12762 :catch
12763 :endtry
12764
12765But you are strongly recommended NOT to use this simple form, since it could
12766catch more than you want. With the ":write" command, some autocommands could
12767be executed and cause errors not related to writing, for instance: >
12768
12769 :au BufWritePre * unlet novar
12770
12771There could even be such errors you are not responsible for as a script
12772writer: a user of your script might have defined such autocommands. You would
12773then hide the error from the user.
12774 It is much better to use >
12775
12776 :try
12777 : write
12778 :catch /^Vim(write):/
12779 :endtry
12780
12781which only catches real write errors. So catch only what you'd like to ignore
12782intentionally.
12783
12784For a single command that does not cause execution of autocommands, you could
12785even suppress the conversion of errors to exceptions by the ":silent!"
12786command: >
12787 :silent! nunmap k
12788This works also when a try conditional is active.
12789
12790
12791CATCHING INTERRUPTS *catch-interrupt*
12792
12793When there are active try conditionals, an interrupt (CTRL-C) is converted to
Bram Moolenaar58b85342016-08-14 19:54:54 +020012794the exception "Vim:Interrupt". You can catch it like every exception. The
Bram Moolenaar071d4272004-06-13 20:20:40 +000012795script is not terminated, then.
12796 Example: >
12797
12798 :function! TASK1()
12799 : sleep 10
12800 :endfunction
12801
12802 :function! TASK2()
12803 : sleep 20
12804 :endfunction
12805
12806 :while 1
12807 : let command = input("Type a command: ")
12808 : try
12809 : if command == ""
12810 : continue
12811 : elseif command == "END"
12812 : break
12813 : elseif command == "TASK1"
12814 : call TASK1()
12815 : elseif command == "TASK2"
12816 : call TASK2()
12817 : else
12818 : echo "\nIllegal command:" command
12819 : continue
12820 : endif
12821 : catch /^Vim:Interrupt$/
12822 : echo "\nCommand interrupted"
12823 : " Caught the interrupt. Continue with next prompt.
12824 : endtry
12825 :endwhile
12826
12827You can interrupt a task here by pressing CTRL-C; the script then asks for
Bram Moolenaar58b85342016-08-14 19:54:54 +020012828a new command. If you press CTRL-C at the prompt, the script is terminated.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012829
12830For testing what happens when CTRL-C would be pressed on a specific line in
12831your script, use the debug mode and execute the |>quit| or |>interrupt|
12832command on that line. See |debug-scripts|.
12833
12834
12835CATCHING ALL *catch-all*
12836
12837The commands >
12838
12839 :catch /.*/
12840 :catch //
12841 :catch
12842
12843catch everything, error exceptions, interrupt exceptions and exceptions
12844explicitly thrown by the |:throw| command. This is useful at the top level of
12845a script in order to catch unexpected things.
12846 Example: >
12847
12848 :try
12849 :
12850 : " do the hard work here
12851 :
12852 :catch /MyException/
12853 :
12854 : " handle known problem
12855 :
12856 :catch /^Vim:Interrupt$/
12857 : echo "Script interrupted"
12858 :catch /.*/
12859 : echo "Internal error (" . v:exception . ")"
12860 : echo " - occurred at " . v:throwpoint
12861 :endtry
12862 :" end of script
12863
12864Note: Catching all might catch more things than you want. Thus, you are
12865strongly encouraged to catch only for problems that you can really handle by
12866specifying a pattern argument to the ":catch".
12867 Example: Catching all could make it nearly impossible to interrupt a script
12868by pressing CTRL-C: >
12869
12870 :while 1
12871 : try
12872 : sleep 1
12873 : catch
12874 : endtry
12875 :endwhile
12876
12877
12878EXCEPTIONS AND AUTOCOMMANDS *except-autocmd*
12879
12880Exceptions may be used during execution of autocommands. Example: >
12881
12882 :autocmd User x try
12883 :autocmd User x throw "Oops!"
12884 :autocmd User x catch
12885 :autocmd User x echo v:exception
12886 :autocmd User x endtry
12887 :autocmd User x throw "Arrgh!"
12888 :autocmd User x echo "Should not be displayed"
12889 :
12890 :try
12891 : doautocmd User x
12892 :catch
12893 : echo v:exception
12894 :endtry
12895
12896This displays "Oops!" and "Arrgh!".
12897
12898 *except-autocmd-Pre*
12899For some commands, autocommands get executed before the main action of the
12900command takes place. If an exception is thrown and not caught in the sequence
12901of autocommands, the sequence and the command that caused its execution are
12902abandoned and the exception is propagated to the caller of the command.
12903 Example: >
12904
12905 :autocmd BufWritePre * throw "FAIL"
12906 :autocmd BufWritePre * echo "Should not be displayed"
12907 :
12908 :try
12909 : write
12910 :catch
12911 : echo "Caught:" v:exception "from" v:throwpoint
12912 :endtry
12913
12914Here, the ":write" command does not write the file currently being edited (as
12915you can see by checking 'modified'), since the exception from the BufWritePre
12916autocommand abandons the ":write". The exception is then caught and the
12917script displays: >
12918
12919 Caught: FAIL from BufWrite Auto commands for "*"
12920<
12921 *except-autocmd-Post*
12922For some commands, autocommands get executed after the main action of the
12923command has taken place. If this main action fails and the command is inside
12924an active try conditional, the autocommands are skipped and an error exception
12925is thrown that can be caught by the caller of the command.
12926 Example: >
12927
12928 :autocmd BufWritePost * echo "File successfully written!"
12929 :
12930 :try
12931 : write /i/m/p/o/s/s/i/b/l/e
12932 :catch
12933 : echo v:exception
12934 :endtry
12935
12936This just displays: >
12937
12938 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e)
12939
12940If you really need to execute the autocommands even when the main action
12941fails, trigger the event from the catch clause.
12942 Example: >
12943
12944 :autocmd BufWritePre * set noreadonly
12945 :autocmd BufWritePost * set readonly
12946 :
12947 :try
12948 : write /i/m/p/o/s/s/i/b/l/e
12949 :catch
12950 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e
12951 :endtry
12952<
12953You can also use ":silent!": >
12954
12955 :let x = "ok"
12956 :let v:errmsg = ""
12957 :autocmd BufWritePost * if v:errmsg != ""
12958 :autocmd BufWritePost * let x = "after fail"
12959 :autocmd BufWritePost * endif
12960 :try
12961 : silent! write /i/m/p/o/s/s/i/b/l/e
12962 :catch
12963 :endtry
12964 :echo x
12965
12966This displays "after fail".
12967
12968If the main action of the command does not fail, exceptions from the
12969autocommands will be catchable by the caller of the command: >
12970
12971 :autocmd BufWritePost * throw ":-("
12972 :autocmd BufWritePost * echo "Should not be displayed"
12973 :
12974 :try
12975 : write
12976 :catch
12977 : echo v:exception
12978 :endtry
12979<
12980 *except-autocmd-Cmd*
12981For some commands, the normal action can be replaced by a sequence of
12982autocommands. Exceptions from that sequence will be catchable by the caller
12983of the command.
12984 Example: For the ":write" command, the caller cannot know whether the file
Bram Moolenaar58b85342016-08-14 19:54:54 +020012985had actually been written when the exception occurred. You need to tell it in
Bram Moolenaar071d4272004-06-13 20:20:40 +000012986some way. >
12987
12988 :if !exists("cnt")
12989 : let cnt = 0
12990 :
12991 : autocmd BufWriteCmd * if &modified
12992 : autocmd BufWriteCmd * let cnt = cnt + 1
12993 : autocmd BufWriteCmd * if cnt % 3 == 2
12994 : autocmd BufWriteCmd * throw "BufWriteCmdError"
12995 : autocmd BufWriteCmd * endif
12996 : autocmd BufWriteCmd * write | set nomodified
12997 : autocmd BufWriteCmd * if cnt % 3 == 0
12998 : autocmd BufWriteCmd * throw "BufWriteCmdError"
12999 : autocmd BufWriteCmd * endif
13000 : autocmd BufWriteCmd * echo "File successfully written!"
13001 : autocmd BufWriteCmd * endif
13002 :endif
13003 :
13004 :try
13005 : write
13006 :catch /^BufWriteCmdError$/
13007 : if &modified
13008 : echo "Error on writing (file contents not changed)"
13009 : else
13010 : echo "Error after writing"
13011 : endif
13012 :catch /^Vim(write):/
13013 : echo "Error on writing"
13014 :endtry
13015
13016When this script is sourced several times after making changes, it displays
13017first >
13018 File successfully written!
13019then >
13020 Error on writing (file contents not changed)
13021then >
13022 Error after writing
13023etc.
13024
13025 *except-autocmd-ill*
13026You cannot spread a try conditional over autocommands for different events.
13027The following code is ill-formed: >
13028
13029 :autocmd BufWritePre * try
13030 :
13031 :autocmd BufWritePost * catch
13032 :autocmd BufWritePost * echo v:exception
13033 :autocmd BufWritePost * endtry
13034 :
13035 :write
13036
13037
13038EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param*
13039
13040Some programming languages allow to use hierarchies of exception classes or to
13041pass additional information with the object of an exception class. You can do
13042similar things in Vim.
13043 In order to throw an exception from a hierarchy, just throw the complete
13044class name with the components separated by a colon, for instance throw the
13045string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library.
13046 When you want to pass additional information with your exception class, add
13047it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)"
13048for an error when writing "myfile".
13049 With the appropriate patterns in the ":catch" command, you can catch for
13050base classes or derived classes of your hierarchy. Additional information in
13051parentheses can be cut out from |v:exception| with the ":substitute" command.
13052 Example: >
13053
13054 :function! CheckRange(a, func)
13055 : if a:a < 0
13056 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")"
13057 : endif
13058 :endfunction
13059 :
13060 :function! Add(a, b)
13061 : call CheckRange(a:a, "Add")
13062 : call CheckRange(a:b, "Add")
13063 : let c = a:a + a:b
13064 : if c < 0
13065 : throw "EXCEPT:MATHERR:OVERFLOW"
13066 : endif
13067 : return c
13068 :endfunction
13069 :
13070 :function! Div(a, b)
13071 : call CheckRange(a:a, "Div")
13072 : call CheckRange(a:b, "Div")
13073 : if (a:b == 0)
13074 : throw "EXCEPT:MATHERR:ZERODIV"
13075 : endif
13076 : return a:a / a:b
13077 :endfunction
13078 :
13079 :function! Write(file)
13080 : try
Bram Moolenaar446cb832008-06-24 21:56:24 +000013081 : execute "write" fnameescape(a:file)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013082 : catch /^Vim(write):/
13083 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR"
13084 : endtry
13085 :endfunction
13086 :
13087 :try
13088 :
13089 : " something with arithmetics and I/O
13090 :
13091 :catch /^EXCEPT:MATHERR:RANGE/
13092 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "")
13093 : echo "Range error in" function
13094 :
13095 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV
13096 : echo "Math error"
13097 :
13098 :catch /^EXCEPT:IO/
13099 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "")
13100 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "")
13101 : if file !~ '^/'
13102 : let file = dir . "/" . file
13103 : endif
13104 : echo 'I/O error for "' . file . '"'
13105 :
13106 :catch /^EXCEPT/
13107 : echo "Unspecified error"
13108 :
13109 :endtry
13110
13111The exceptions raised by Vim itself (on error or when pressing CTRL-C) use
13112a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself
13113exceptions with the "Vim" prefix; they are reserved for Vim.
13114 Vim error exceptions are parameterized with the name of the command that
13115failed, if known. See |catch-errors|.
13116
13117
13118PECULIARITIES
13119 *except-compat*
13120The exception handling concept requires that the command sequence causing the
13121exception is aborted immediately and control is transferred to finally clauses
13122and/or a catch clause.
13123
13124In the Vim script language there are cases where scripts and functions
13125continue after an error: in functions without the "abort" flag or in a command
13126after ":silent!", control flow goes to the following line, and outside
13127functions, control flow goes to the line following the outermost ":endwhile"
13128or ":endif". On the other hand, errors should be catchable as exceptions
13129(thus, requiring the immediate abortion).
13130
13131This problem has been solved by converting errors to exceptions and using
13132immediate abortion (if not suppressed by ":silent!") only when a try
Bram Moolenaar58b85342016-08-14 19:54:54 +020013133conditional is active. This is no restriction since an (error) exception can
13134be caught only from an active try conditional. If you want an immediate
Bram Moolenaar071d4272004-06-13 20:20:40 +000013135termination without catching the error, just use a try conditional without
13136catch clause. (You can cause cleanup code being executed before termination
13137by specifying a finally clause.)
13138
13139When no try conditional is active, the usual abortion and continuation
13140behavior is used instead of immediate abortion. This ensures compatibility of
13141scripts written for Vim 6.1 and earlier.
13142
13143However, when sourcing an existing script that does not use exception handling
13144commands (or when calling one of its functions) from inside an active try
13145conditional of a new script, you might change the control flow of the existing
13146script on error. You get the immediate abortion on error and can catch the
13147error in the new script. If however the sourced script suppresses error
13148messages by using the ":silent!" command (checking for errors by testing
Bram Moolenaar58b85342016-08-14 19:54:54 +020013149|v:errmsg| if appropriate), its execution path is not changed. The error is
13150not converted to an exception. (See |:silent|.) So the only remaining cause
Bram Moolenaar071d4272004-06-13 20:20:40 +000013151where this happens is for scripts that don't care about errors and produce
13152error messages. You probably won't want to use such code from your new
13153scripts.
13154
13155 *except-syntax-err*
13156Syntax errors in the exception handling commands are never caught by any of
13157the ":catch" commands of the try conditional they belong to. Its finally
13158clauses, however, is executed.
13159 Example: >
13160
13161 :try
13162 : try
13163 : throw 4711
13164 : catch /\(/
13165 : echo "in catch with syntax error"
13166 : catch
13167 : echo "inner catch-all"
13168 : finally
13169 : echo "inner finally"
13170 : endtry
13171 :catch
13172 : echo 'outer catch-all caught "' . v:exception . '"'
13173 : finally
13174 : echo "outer finally"
13175 :endtry
13176
13177This displays: >
13178 inner finally
13179 outer catch-all caught "Vim(catch):E54: Unmatched \("
13180 outer finally
13181The original exception is discarded and an error exception is raised, instead.
13182
13183 *except-single-line*
13184The ":try", ":catch", ":finally", and ":endtry" commands can be put on
13185a single line, but then syntax errors may make it difficult to recognize the
13186"catch" line, thus you better avoid this.
13187 Example: >
13188 :try | unlet! foo # | catch | endtry
13189raises an error exception for the trailing characters after the ":unlet!"
13190argument, but does not see the ":catch" and ":endtry" commands, so that the
13191error exception is discarded and the "E488: Trailing characters" message gets
13192displayed.
13193
13194 *except-several-errors*
13195When several errors appear in a single command, the first error message is
13196usually the most specific one and therefor converted to the error exception.
13197 Example: >
13198 echo novar
13199causes >
13200 E121: Undefined variable: novar
13201 E15: Invalid expression: novar
13202The value of the error exception inside try conditionals is: >
13203 Vim(echo):E121: Undefined variable: novar
13204< *except-syntax-error*
13205But when a syntax error is detected after a normal error in the same command,
13206the syntax error is used for the exception being thrown.
13207 Example: >
13208 unlet novar #
13209causes >
13210 E108: No such variable: "novar"
13211 E488: Trailing characters
13212The value of the error exception inside try conditionals is: >
13213 Vim(unlet):E488: Trailing characters
13214This is done because the syntax error might change the execution path in a way
13215not intended by the user. Example: >
13216 try
13217 try | unlet novar # | catch | echo v:exception | endtry
13218 catch /.*/
13219 echo "outer catch:" v:exception
13220 endtry
13221This displays "outer catch: Vim(unlet):E488: Trailing characters", and then
13222a "E600: Missing :endtry" error message is given, see |except-single-line|.
13223
13224==============================================================================
132259. Examples *eval-examples*
13226
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013227Printing in Binary ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000013228>
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010013229 :" The function Nr2Bin() returns the binary string representation of a number.
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013230 :func Nr2Bin(nr)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013231 : let n = a:nr
13232 : let r = ""
13233 : while n
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013234 : let r = '01'[n % 2] . r
13235 : let n = n / 2
Bram Moolenaar071d4272004-06-13 20:20:40 +000013236 : endwhile
13237 : return r
13238 :endfunc
13239
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013240 :" The function String2Bin() converts each character in a string to a
13241 :" binary string, separated with dashes.
13242 :func String2Bin(str)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013243 : let out = ''
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013244 : for ix in range(strlen(a:str))
13245 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix]))
13246 : endfor
13247 : return out[1:]
Bram Moolenaar071d4272004-06-13 20:20:40 +000013248 :endfunc
13249
13250Example of its use: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013251 :echo Nr2Bin(32)
13252result: "100000" >
13253 :echo String2Bin("32")
13254result: "110011-110010"
Bram Moolenaar071d4272004-06-13 20:20:40 +000013255
13256
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013257Sorting lines ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000013258
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013259This example sorts lines with a specific compare function. >
13260
13261 :func SortBuffer()
13262 : let lines = getline(1, '$')
13263 : call sort(lines, function("Strcmp"))
13264 : call setline(1, lines)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013265 :endfunction
13266
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013267As a one-liner: >
13268 :call setline(1, sort(getline(1, '$'), function("Strcmp")))
Bram Moolenaar071d4272004-06-13 20:20:40 +000013269
Bram Moolenaar071d4272004-06-13 20:20:40 +000013270
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013271scanf() replacement ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000013272 *sscanf*
13273There is no sscanf() function in Vim. If you need to extract parts from a
13274line, you can use matchstr() and substitute() to do it. This example shows
13275how to get the file name, line number and column number out of a line like
13276"foobar.txt, 123, 45". >
13277 :" Set up the match bit
13278 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)'
13279 :"get the part matching the whole expression
13280 :let l = matchstr(line, mx)
13281 :"get each item out of the match
13282 :let file = substitute(l, mx, '\1', '')
13283 :let lnum = substitute(l, mx, '\2', '')
13284 :let col = substitute(l, mx, '\3', '')
13285
13286The input is in the variable "line", the results in the variables "file",
13287"lnum" and "col". (idea from Michael Geddes)
13288
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013289
13290getting the scriptnames in a Dictionary ~
13291 *scriptnames-dictionary*
13292The |:scriptnames| command can be used to get a list of all script files that
13293have been sourced. There is no equivalent function or variable for this
13294(because it's rarely needed). In case you need to manipulate the list this
13295code can be used: >
13296 " Get the output of ":scriptnames" in the scriptnames_output variable.
13297 let scriptnames_output = ''
13298 redir => scriptnames_output
13299 silent scriptnames
13300 redir END
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010013301
Bram Moolenaar446cb832008-06-24 21:56:24 +000013302 " Split the output into lines and parse each line. Add an entry to the
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013303 " "scripts" dictionary.
13304 let scripts = {}
13305 for line in split(scriptnames_output, "\n")
13306 " Only do non-blank lines.
13307 if line =~ '\S'
13308 " Get the first number in the line.
Bram Moolenaar446cb832008-06-24 21:56:24 +000013309 let nr = matchstr(line, '\d\+')
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013310 " Get the file name, remove the script number " 123: ".
Bram Moolenaar446cb832008-06-24 21:56:24 +000013311 let name = substitute(line, '.\+:\s*', '', '')
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013312 " Add an item to the Dictionary
Bram Moolenaar446cb832008-06-24 21:56:24 +000013313 let scripts[nr] = name
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013314 endif
13315 endfor
13316 unlet scriptnames_output
13317
Bram Moolenaar071d4272004-06-13 20:20:40 +000013318==============================================================================
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001331910. Vim script versions *vimscript-version* *vimscript-versions*
Bram Moolenaar911ead12019-04-21 00:03:35 +020013320 *scriptversion*
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013321Over time many features have been added to Vim script. This includes Ex
13322commands, functions, variable types, etc. Each individual feature can be
13323checked with the |has()| and |exists()| functions.
13324
13325Sometimes old syntax of functionality gets in the way of making Vim better.
13326When support is taken away this will break older Vim scripts. To make this
13327explicit the |:scriptversion| command can be used. When a Vim script is not
13328compatible with older versions of Vim this will give an explicit error,
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013329instead of failing in mysterious ways.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013330
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013331 *scriptversion-1* >
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013332 :scriptversion 1
13333< This is the original Vim script, same as not using a |:scriptversion|
13334 command. Can be used to go back to old syntax for a range of lines.
13335 Test for support with: >
13336 has('vimscript-1')
13337
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013338< *scriptversion-2* >
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013339 :scriptversion 2
Bram Moolenaar68e65602019-05-26 21:33:31 +020013340< String concatenation with "." is not supported, use ".." instead.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013341 This avoids the ambiguity using "." for Dict member access and
13342 floating point numbers. Now ".5" means the number 0.5.
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013343
13344 *scriptversion-3* >
Bram Moolenaar911ead12019-04-21 00:03:35 +020013345 :scriptversion 3
13346< All |vim-variable|s must be prefixed by "v:". E.g. "version" doesn't
13347 work as |v:version| anymore, it can be used as a normal variable.
13348 Same for some obvious names as "count" and others.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013349
Bram Moolenaar911ead12019-04-21 00:03:35 +020013350 Test for support with: >
13351 has('vimscript-3')
Bram Moolenaar60a8de22019-09-15 14:33:22 +020013352<
13353 *scriptversion-4* >
13354 :scriptversion 4
13355< Numbers with a leading zero are not recognized as octal. With the
13356 previous version you get: >
13357 echo 017 " displays 15
13358 echo 018 " displays 18
13359< with script version 4: >
13360 echo 017 " displays 17
13361 echo 018 " displays 18
13362< Also, it is possible to use single quotes inside numbers to make them
13363 easier to read: >
13364 echo 1'000'000
13365< The quotes must be surrounded by digits.
13366
13367 Test for support with: >
13368 has('vimscript-4')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013369
13370==============================================================================
1337111. No +eval feature *no-eval-feature*
Bram Moolenaar071d4272004-06-13 20:20:40 +000013372
13373When the |+eval| feature was disabled at compile time, none of the expression
13374evaluation commands are available. To prevent this from causing Vim scripts
13375to generate all kinds of errors, the ":if" and ":endif" commands are still
13376recognized, though the argument of the ":if" and everything between the ":if"
13377and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but
13378only if the commands are at the start of the line. The ":else" command is not
13379recognized.
13380
13381Example of how to avoid executing commands when the |+eval| feature is
13382missing: >
13383
13384 :if 1
13385 : echo "Expression evaluation is compiled in"
13386 :else
13387 : echo "You will _never_ see this message"
13388 :endif
13389
Bram Moolenaar773a97c2019-06-06 20:39:55 +020013390To execute a command only when the |+eval| feature is disabled can be done in
13391two ways. The simplest is to exit the script (or Vim) prematurely: >
13392 if 1
13393 echo "commands executed with +eval"
13394 finish
13395 endif
13396 args " command executed without +eval
13397
13398If you do not want to abort loading the script you can use a trick, as this
13399example shows: >
Bram Moolenaar45d2cca2017-04-30 16:36:05 +020013400
13401 silent! while 0
13402 set history=111
13403 silent! endwhile
13404
13405When the |+eval| feature is available the command is skipped because of the
13406"while 0". Without the |+eval| feature the "while 0" is an error, which is
13407silently ignored, and the command is executed.
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +020013408
Bram Moolenaar071d4272004-06-13 20:20:40 +000013409==============================================================================
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001341012. The sandbox *eval-sandbox* *sandbox* *E48*
Bram Moolenaar071d4272004-06-13 20:20:40 +000013411
Bram Moolenaar368373e2010-07-19 20:46:22 +020013412The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and
13413'foldtext' options may be evaluated in a sandbox. This means that you are
13414protected from these expressions having nasty side effects. This gives some
13415safety for when these options are set from a modeline. It is also used when
13416the command from a tags file is executed and for CTRL-R = in the command line.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +000013417The sandbox is also used for the |:sandbox| command.
Bram Moolenaar071d4272004-06-13 20:20:40 +000013418
13419These items are not allowed in the sandbox:
13420 - changing the buffer text
Bram Moolenaarb477af22018-07-15 20:20:18 +020013421 - defining or changing mapping, autocommands, user commands
Bram Moolenaar071d4272004-06-13 20:20:40 +000013422 - setting certain options (see |option-summary|)
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013423 - setting certain v: variables (see |v:var|) *E794*
Bram Moolenaar071d4272004-06-13 20:20:40 +000013424 - executing a shell command
13425 - reading or writing a file
13426 - jumping to another buffer or editing a file
Bram Moolenaar4770d092006-01-12 23:22:24 +000013427 - executing Python, Perl, etc. commands
Bram Moolenaar7b0294c2004-10-11 10:16:09 +000013428This is not guaranteed 100% secure, but it should block most attacks.
13429
13430 *:san* *:sandbox*
Bram Moolenaar045e82d2005-07-08 22:25:33 +000013431:san[dbox] {cmd} Execute {cmd} in the sandbox. Useful to evaluate an
Bram Moolenaar7b0294c2004-10-11 10:16:09 +000013432 option that may have been set from a modeline, e.g.
13433 'foldexpr'.
13434
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013435 *sandbox-option*
13436A few options contain an expression. When this expression is evaluated it may
Bram Moolenaar9b2200a2006-03-20 21:55:45 +000013437have to be done in the sandbox to avoid a security risk. But the sandbox is
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013438restrictive, thus this only happens when the option was set from an insecure
13439location. Insecure in this context are:
Bram Moolenaar551dbcc2006-04-25 22:13:59 +000013440- sourcing a .vimrc or .exrc in the current directory
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013441- while executing in the sandbox
13442- value coming from a modeline
Bram Moolenaarb477af22018-07-15 20:20:18 +020013443- executing a function that was defined in the sandbox
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013444
13445Note that when in the sandbox and saving an option value and restoring it, the
13446option will still be marked as it was set in the sandbox.
13447
13448==============================================================================
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001344913. Textlock *textlock*
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013450
13451In a few situations it is not allowed to change the text in the buffer, jump
13452to another window and some other things that might confuse or break what Vim
13453is currently doing. This mostly applies to things that happen when Vim is
Bram Moolenaar58b85342016-08-14 19:54:54 +020013454actually doing something else. For example, evaluating the 'balloonexpr' may
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013455happen any moment the mouse cursor is resting at some position.
13456
13457This is not allowed when the textlock is active:
13458 - changing the buffer text
13459 - jumping to another buffer or window
13460 - editing another file
13461 - closing a window or quitting Vim
13462 - etc.
13463
Bram Moolenaar071d4272004-06-13 20:20:40 +000013464
Bram Moolenaar91f84f62018-07-29 15:07:52 +020013465 vim:tw=78:ts=8:noet:ft=help:norl: